Siccome nel mio sito ho molte pagine, vorrei mettere un'area con un codice del tipo che mi visualizza in automatico le prime 4 pagine più visitati. Ho già creato la tabella nel DB, ma non so come fare il codice.
Siccome nel mio sito ho molte pagine, vorrei mettere un'area con un codice del tipo che mi visualizza in automatico le prime 4 pagine più visitati. Ho già creato la tabella nel DB, ma non so come fare il codice.
Nella tabella nel DB metti le colonne
pagina | url | visite
*visite fallo di tipo int
Crei la funzione per aumentare il contatore a ogni visita:
E la richiami in ogni pagina passandole come parametro il titolo che vuoi abbia il link:Codice PHP:
function contatore ($title) {
$mysqli = new mysqli("localhost", "username", "password", "nome_database");
$url = $_SERVER['PHP_SELF'];
$esiste = $mysqli->query ("SELECT url FROM tabella WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysqli->query ("INSERT INTO tabella VALUES ('$title', '$url', 1");
}
else {
$old = $esiste->fetch_array;
$visite = $old['visite'] + 1;
$mysqli->query("UPDATE tabella SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
Questo era il contatore, ora serve la funzione per creare la lista delle pagine più visteCodice PHP:
contatore("Pagina di prova");
E la richiami dove vuoi venga la lista passando come parametro il numero di pagine:Codice PHP:
function piu_visitate ($n) {
$mysqli = new mysqli("localhost", "username", "password", "nome_database");
$visti = $mysqli->query("SELECT * FROM tabella ORDER BY visite DESC LIMIT 0,$n");
if ($visti->num_rows > 0) {
echo "<ul id='piu_visitate'>";
while ($link = $visti->fetch_array) {
echo "<li>";
echo "<a href='" . $link['url'] . ">" . $link['pagina'] . "</a>";
echo "</li>";
}
echo "</ul>";
}
}
(Ho scritto tutto dal cellulare, potrebbe essere pieno di errori, non l'ho testato o potrei aver scritto tante cavolate )Codice PHP:
piu_visitate(4);
Il tuo codice contatore('…'); lo dovrei adattare al mio codice, ma mi da sempre errore
Codice PHP:
<?php
$links = array('http://miosito.it/storia.php' => 'La storia di Akuna',
'http://miosito.it/missione.php' => 'Missione e visione',
'http://miosito.it/prod-alveo.php' => 'Produzione di ALVEO',
'http://miosito.it/attivita-alveo.php' => 'Attività biologica ALVEO');
$pagina = basename($_SERVER['PHP_SELF']);
foreach($links as $link => $text) {
if(basename($link) == $pagina) {
echo '<div class="menu1a">' . $text . '</div>';
}
else
{
echo '<a href="' . $link . '">' . $text . '</a>';
}
}
?>
Ultima modifica di gruppoalveo : 29-03-2014 alle ore 15.18.54 Motivo: Aggiornamento
Che errore da?
Ma quel codice lo metti nella funzione contatore?
I tuoi codici li metto nel file delle funzioni e cerco di richiamarli nel codice che ho postato. L'errore che dà è che non mette a video una porzione di pagina, quella che dovrebbe mostrare a video le 4 pagine più viste.
Se io metto così, non da più errore
…ma a video stampa così contatore('La storia di Akuna')Codice PHP:
<?php
$links = array('http://miosito.it/storia.php' => "contatore('La storia di Akuna')",
...
Ultima modifica di gruppoalveo : 29-03-2014 alle ore 20.43.45 Motivo: Aggiornamento
La funzione contatore serve solo a gestire il db, per stampare a video i risultati usa piu_visitate...
Edit
Ma tu vuoi che stampi questi quattro link
o le quattro pagine più viste?Codice PHP:
$links*=*array('http://miosito.it/storia.php'*=>*'La*storia*di*Akuna',*'http://miosito.it/missione.php'*=>*'Missione*e*visione',*'http://miosito.it/prod-alveo.php'*=>*'Produzione*di*ALVEO','http://miosito.it/attivita-alveo.php'*=>*'Attività*biologica*ALVEO');
Ultima modifica di tampertools : 29-03-2014 alle ore 22.57.45
Le 4 pagine più viste, questo è il codice più completo
Codice PHP:
<?php
$links = array('http://sito.it/storia.php' => 'La storia di Akuna',
'http://sito.it/missione.php' => 'Missione e visione',
'http://sito.it/prod-alveo.php' => 'Produzione di ALVEO',
'http://sito.it/prodotti.php' => 'Prodotti',
'http://sito.it/attivita-alveo.php' => 'Attività biologica ALVEO');
$pagina = basename($_SERVER['PHP_SELF']);
foreach($links as $link => $text) {
if(basename($link) == $pagina) {
echo '<div class="menu1a">' . $text . '</div>';
}
else
{
echo '<a href="' . $link . '">' . $text . '</a>';
}
}
?>
Ultima modifica di gruppoalveo : 29-03-2014 alle ore 23.06.56
Scusa ma non capisco...
Quel tuo codice serve a stampare 4 link (uno dei quali non cliccabile se attivo)...
Anche se quelle quattro pagine fossero le meno viste le stamperebbe comunque...
Ah scusa, mi sono confuso vedendo quel tuo codice (che non c'entra niente?)
Mi fai vedere il pezzo di codice dove richiami le mie funzioni?
Qui richiamo la pagina con tutto
Questa è il visitate.php con i codiciCodice PHP:
<div class="info">I più visti</div>
</div>
<?php
include("visitate.php");
?>
Codice PHP:
<?php
//Mette i dati nel DB e aumenta il contatore ad ogni visita
function contatore($text) {
$url = $_SERVER['PHP_SELF'];
$esiste = $mysql->query ("SELECT url FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysql->query ("INSERT INTO visitate VALUES ('$text', '$url', 1");
}
else {
$old = $esiste->fetch_array;
$visite = $old['visite'] + 1;
$mysql->query("UPDATE visitate SET pagina='$text', url='$url', visite=$visite WHERE");
}
}
//Estrae i dati dal DB e crea la sequenza delle pagine più viste
function piu_visitate($n) {
$visti = $mysql->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,$n");
if ($visti->num_rows > 0) {
echo "<ul id='piu_visitate'>";
while ($link = $visti->fetch_array) {
echo "<li>";
echo "<a href='" . $link['url'] . "'>" . $link['pagina'] . "</a>";
echo "</li>";
}
echo "</ul>";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>I più visti</title>
<?php include("metaTag.php"); ?>
<meta name="description" content="Pagine più visitate">
<meta name="keywords" content="sito,alveo,akuna">
</head>
<body>
<div style="background-color:#ffffff; margin-top:-5px; margin-bottom:15px; padding-top:5px; padding-bottom:5px; text-align:left; font-size:12px; color:#004080;">
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<?php
echo "piu_visitate(4)";
?>
<br>
</div> <!--style-->
</form>
</body>
</html>
l'echo della funzione contatore() non so dove metterlo
Ecco, ora riesco (spero) ad esserti più d'aiuto ;)
- Sostituisci
conCodice PHP:
<?php
echo "piu_visitate(4)";
?>Codice PHP:
<?php
piu_visitate(4);
?>- C'è un errore in questa query
Dovrebbe essereCodice:UPDATE visitate SET pagina='$text', url='$url', visite=$visite WHERECodice:UPDATE visitate SET pagina='$text', visite=$visite WHERE url='$url'- in qualsiasi punto di ogni pagina devi richiamare la funzione contatore:
Codice PHP:
contatore("Titolo pagina");
Ultima modifica di tampertools : 30-03-2014 alle ore 00.09.34
Posso avere il link della pagina?
Controlla la modifica che ho fatto al mio post precedente
Lo sto facendo il locale, non c'è ancora online.
Solo a mettere questo (al posto dell'altro) da errore, come vedi la colonna non stampa più, sotto.
http://imageshack.com/a/img824/5240/eb2l.pngCodice PHP:
<?php
piu_visitate(4);
?>
Vai a vedere se la tabella in cui salvi le pagine visitate è vuota.
Se lo è. .. prova a metterci dentro una riga manualmente e dimmi se viene fuori
Ultima modifica di gruppoalveo : 30-03-2014 alle ore 11.02.33 Motivo: Aggiornamento
Ok, e quella riga te la stampa?
Se la funzione contatore non inserisce le pagine nel db c'è un errore. .. me la puoi rifar vedere con le nuove mmodifiche?
Ho dovuto inserirla a mano.
Queste sono le funzioni:
Codice PHP:
<?php
//Mette i dati nel DB e aumenta il contatore ad ogni visita
function contatore($title) {
$url = $_SERVER['PHP_SELF'];
$esiste = $mysql->query ("SELECT url FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysql->query ("INSERT INTO visitate VALUES ('$title', '$url', 1");
}
else {
$old = $esiste->fetch_array;
$visite = $old['visite'] + 1;
$mysql->query("UPDATE visitate SET pagina='$title', url='$url', visite=$visite WHERE");
}
}
//Estrae i dati dal DB e crea la sequenza delle pagine più viste
function piu_visitate($n) {
$visti = $mysql->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,$n");
if ($visti->num_rows > 0) {
echo "<ul id='piu_visitate'>";
while ($link = $visti->fetch_array) {
echo "<li>";
echo "<a href='" . $link['url'] . "'>" . $link['pagina'] . "</a>";
echo "</li>";
}
echo "</ul>";
}
}
?>
…
<?php
piu_visitate(4);
?>
C'erano due errori nella funzione contatore, guarda se così va:
PSCodice PHP:
function contatore($title) {
$url = $_SERVER['PHP_SELF'];
$esiste = $mysql->query ("SELECT * FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysql->query ("INSERT INTO visitate VALUES ('$title', '$url', 1");
}
else {
$old = $esiste->fetch_array;
$visite = $old['visite'] + 1;
$mysql->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
a che ti serve la colonna id nella tabella?
Ultima modifica di tampertools : 30-03-2014 alle ore 11.33.56
Ultima modifica di gruppoalveo : 30-03-2014 alle ore 11.49.13
"Non va. Devo togliere la colonna id? Di solito si mette."
Io sono abituato a mettere solo il necessario
Se imane bianco senza dare errori prova a scrivere
all'inizio del documento. ..Codice PHP:
error_reporting (E_ALL);
Così vedremo gli errori che bloccano tutto...
Ti chiedo scusa, ma il mio pc ha fatto boom e quindi non posso testare il codice. ..
Da questo Fatal error: Call to undefined function contatore() in /membri/gruppoalveo/index.php on line 5
Ora ho messo online, puoi vedere qui: http://www.gruppoalveo.altervista.org/
Quell'errore significa che richiami quella funzione prima di definirla.
Ptrova a spostare il richiamo al fondo del documento. ..
No, non metti niente come auto_increment
All inizio del file visitate scrivi
Codice PHP:
$mysql = new mysqli("localhost", "gruppoalveo", "TUA PASSWORD", "my_gruppoalveo");
Non è necessario l'indice...
Nel file connessione.php usi l'oggetto mysqli?
Se si passa la connessione come parametro alle due funzioni, altrimenti all'inizio di ogni funzione metti quella riga che ti ho detto
mysql, non mysqli
Codice PHP:
$host = 'localhost'; //nome host
$username = 'gruppoalveo'; //username che utilizzi per accedere a phpmyadmin
$password = 'pwd'; //password che utilizzi per accedere a phpmyadmin
$db = 'my_gruppoalveo'; // nome del database
//---connessione----------------------------------------------------
$connessione = mysql_connect($host,$username,$password);
if (!$connessione) {
die ('Non riesco a connettermi: ' . mysql_error());
}
//---e selezione del db----------------------------------------------------
$db = mysql_select_db($db, $connessione);
if (!$db) {
die ("Errore nella selezione del database: " . mysql_error());
}
Ultima modifica di gruppoalveo : 30-03-2014 alle ore 14.16.15