[PHP] Codice accetta solo identificatore numerico

  • Creatore Discussione Creatore Discussione Shyson
  • Data di inizio Data di inizio
Beh, ma se come id tengo questo, non va bene lo stesso? Evita di avere un include.

PHP:
// Identificativo della pagina
$pagina = "'a-istinti-del-body'";

Come ti dicevo ho messo questo, ma non estrae

PHP:
$res = mysqli_query($link,"SELECT visite FROM phpbb_contatore WHERE pagina like $pagina"); 
$tot_visite = mysql_fetch_assoc($res);
 
Ultima modifica di un moderatore:
ciao
è lo stesso, io normalmente faccio ove possibile gli include, se ho da correggere correggo un file solo, poi, in questo caso, sarei abbastanza sicuro di avere nomi univoci senza preuccuparmi di andare a vedere cosa ho scritto in altre pagine, comunque è lo stesso
per il problema dell'insert, visto così (a parte il like) è sintatticamente corretto.
prova un var_dump e guarda cosa riporta
PHP:
<?php
//...
$res = mysqli_query($link,"SELECT visite FROM phpbb_contatore WHERE pagina like $pagina");
var_dump($res); //se ok dovrebbe dart resorce altrimenti o null o false
$tot_visite = mysql_fetch_assoc($res);
// se ti ha dato resource
var_dump($tot_visite);
/*dovrebbe darti qualcosa di simile
cioè mostrarti l'array
array(xx)
[pinco] => 3
[pallo] => 287
*/
//...
?>
a proposito guarda che non puoi usare direttamente l'echo per visualizzare $tot_visite o print_r o meglio un ciclo foreach
PHP:
<?php
foreach($tot_visite as $pag $num){
    echo "visite alla pagina $pag: $num<br>";
}
?>

p.s.
non usare codice generico quando inserisci codice php
 
Mi da questo:
object(mysqli_result)#183 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) } [phpBB Debug] PHP Warning: in file [ROOT]/a-istinti-del-body.php on line 50:mysql_fetch_assoc() expects parameter 1 to be resource, object given
NULL

Non uso un echo php, è un metodo che usa phpbb. Che intendi per codice generico?
 
ciao
attento hai scritto
$tot_visite = mysql_fetch_assoc($res);
correggi in
$tot_visite = mysqli_fetch_assoc($res);

quando inserisci il codice poi seleziona PHP

dimenticavo
con myadmin hai visto se la tabella si è riempita, sembrerebbe che non risca a leggerela, verifica corrispondenza nomi
 
Nel frattempo ho fatto delle modifiche, questa è la tabella, come vedi il numero visite_tot è corretto, ma negli altri campi ne inserisce uno in meno (il primo click non lo inserisce), ho fatto 4 click come ospite. Poi c'è ancora quel like da sistemare, poi per il resto, ora è funzionale.

Schermata 2016-06-02 alle 23.48.48.png


- Come puoi vedere dal mio sito, non inserisce il contatore nelle immagini-link in fondo, nel file ovviamente c'è lo stesso echo che ho nella pagina {CONTA_VISITE1}

Ho creato un include per ogni file php così modifico solo il file esterno.

Questo è il nuovo codice

PHP:
<?php
//Contavisite, connessione al db tramite i parametri in config.php
$link = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
if (!$link) {
    die ("Non riesco a connettermi:" . mysqli_error());
}

// Aggiorna il contatore
if($user->data['user_id'] <> 314 ) { // il 314 è l'ID admin (il mio), non viene conteggiato
if ($user->data['user_id'] == 1 ) { // Conteggia solo gli Utenti Registrati e gli Ospiti
      mysqli_query($link,"UPDATE phpbb_contatore SET visite_tot = visite_tot + 1, visite_ospiti = visite_ospiti + 1 WHERE pagina = $pagina");
   } else {
      // Aggiorna il contatore generale e quello degli Utenti Registrati
      mysqli_query($link,"UPDATE phpbb_contatore SET visite_tot = visite_tot + 1, visite_users = visite_users + 1 WHERE pagina = $pagina");
   }
}

// Inserisce i dati nel db LA PRIMA VOLTA e mette "1"  o "0" se clicco io
if($user->data['user_id'] <> 314 ) {
mysqli_query($link,"INSERT INTO phpbb_contatore (pagina, visite_tot) VALUES ($pagina, 1)");
} else {
mysqli_query($link,"INSERT INTO phpbb_contatore (pagina, visite_tot) VALUES ($pagina, 0)");
}

// Estrae i dati dal DB
$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE pagina like $pagina");
$tot_visite = mysqli_fetch_assoc($res);

if ( $tot_visite['visite_tot'] == 1) {
    $volte = "volta";
}
else {
    $volte = "volte";
}
 

Allegati

  • Schermata 2016-06-02 alle 20.16.00.png
    Schermata 2016-06-02 alle 20.16.00.png
    25 KB · Visite: 386
Ultima modifica di un moderatore:
ciao
per prima cosa setta i campi visite_tot, visite_ospiti e visite_user con il valore default 0
poi prova questo codice, dovrebbe semplificarti la vita

PHP:
<?php
//.....
// Aggiorna il contatore
if($user->data['user_id'] != 314 ) { // il 314 è l'ID admin (il mio), non viene conteggiato
    if ($user->data['user_id'] == 1 ) {
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot,visite_ospiti) VALUES($pagina,1,1)  ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_ospiti = visite_ospiti + 1";
    }else{
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot,visite_user) VALUES($pagina,1,1)  ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_user = visite_user + 1";
    }
    $ins_up=mysqli_query($link, $query);//ed eventualmente l'if se andato a buon fine
}
// Estrae i dati dal DB
$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE pagina like $pagina");
$tot_visite = mysqli_fetch_assoc($res);
if($tot_visite['visite_tot'] == 1){
    $volte = "volta";
}else{
    $volte = "volte";
}
?>

p.s.
sono di corsa però fammi sapere
 
Va meglio, non crea un nuovo record per ogni pagina cliccata, ma aggiorna sempre lo stesso, inoltre non estrae i dati.

Schermata%202016-06-04%20alle%2013.36.49.png


Codice:
// Identificativo della pagina
$pagina = "a-istinti-del-body";
$id_page = 1

//Contavisite, connessione al db tramite i parametri in config.php
$link = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
if (!$link) {
    die ("Non riesco a connettermi:" . mysqli_error());
}

// Aggiorna il contatore
if ($user->data['user_id'] != 314 ) { // il 314 è l'ID admin (il mio), non viene conteggiato
    if ($user->data['user_id'] == 1 ) { // Conteggia solo gli Utenti Registrati e gli Ospiti
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_ospiti)
                   VALUES($id_page,1,1)  ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_ospiti = visite_ospiti + 1";
    } else {
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_users)
                   VALUES($id_page,1,1)  ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_users = visite_users + 1";
    }
    $ins_up=mysqli_query($link, $query);
}

// Estrae i dati dal DB
$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE id = $id_page");
$tot_visite = mysqli_fetch_assoc($res);

if ( $tot_visite['visite_tot'] == 1) {
    $volte = "volta";
}
else {
    $volte = "volte";
}

// Crea la variabile-echo che viene poi richiamata nel template e nel file articoliX.html
$template->assign_vars(array(
    'CONTA_VISITE1' => "<span class=\"letto\">Letto </span><span class=\"number\">". $tot_visite['visite_tot'] ."</span> <span class=\"letto\">". $volte ."</span>",
));
 
Ultima modifica:
ciao
mi sbaglierò, ma scommetto che hai messo id chiave primaria
poi per vedere se l'errore è nell'estrazione o nel passaggio al contatore metti il solito var_dump
PHP:
//....
$tot_visite = mysqli_fetch_assoc($res);
var_dump($tot-visite);
//....
 
Ora sembra che funzioni, mette nel db in automatico la prima volta. Mette a video il numero giusto nel template, ma non stampa l'echo nelle immagini-link in fondo "Potrebbe interessarti anche:"

Schermata 2016-06-07 alle 02.53.31.png


Codice:
// Identificativo della pagina
$pagina = "'a-istinti-del-body'";

//Contavisite, connessione al db tramite i parametri in config.php
$link = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
if (!$link) {
   die ("Non riesco a connettermi:" . mysqli_error());
}

// Aggiorna il contatore
if ($user->data['user_id'] == 314) { // il 314 è l'ID admin (il mio), non viene conteggiato
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot) VALUES($pagina, 0)";
    }
      else if ($user->data['user_id'] == 1) { // Conteggia solo gli Utenti Registrati e gli Ospiti
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_ospiti) VALUES($pagina, 1, 1)
                     ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_ospiti = visite_ospiti + 1";
    } else {
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_users) VALUES($pagina, 1, 1)
                     ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_users = visite_users + 1";
    }
    $ins_up=mysqli_query($link, $query);[/COLOR]

// Estrae i dati dal DB
$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE pagina = $pagina");
$tot_visite = mysqli_fetch_assoc($res);

if ( $tot_visite['visite_tot'] == 1) {
    $volte = "volta";
}
else {
    $volte = "volte";
}

// Crea la variabile-echo che viene poi richiamata nel template e nel file articoliX.html
$template->assign_vars(array(
    'CONTA_VISITE1' => "<span class=\"letto\">Letto </span><span class=\"number\">". $tot_visite['visite_tot'] ."</span> <span class=\"letto\">". $volte ."</span>",
));


 
Ultima modifica:
ciao
non vedo dove hai il link, da qualche parte dovresti avere qualcosa del genere
HTML:
<a href="altro_interesse.php"><img src="pinco.jpg"></a>
o in codice php
 
I link li ho nella sez. Personal, sono gli articoli poi sono anche le immagini che ci sono in fondo agli articoli Potrebbe interessarti anche

Comunque per adesso sono funzionanti il primo (cibo e istinti del body) e il terzo link (la bugia alimentare). Ho creato 2 file php che interagiscono. Sto sistemando anche gli altri.
 
ciao
stavo riguardando il tutto, ma a cosa ti serve questa?
PHP:
<?php
//...
if ($user->data['user_id'] == 314) { // il 314 è l'ID admin (il mio), non viene conteggiato
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot) VALUES($pagina, 0)";
    }
//...
?>
corri il rischio, se il record gia esiste, che ti azzeri il contatore, tra l'altro lasciando invariati i parziali.
quindi fossi in te farei cosi
PHP:
<?php
//....
// Aggiorna il contatore
if ($user->data['user_id'] != 314) { // il 314 è l'ID admin (il mio), non viene conteggiato
    if ($user->data['user_id'] == 1) { // Conteggia solo gli Utenti Registrati e gli Ospiti
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_ospiti) VALUES($pagina, 1, 1)
                     ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_ospiti = visite_ospiti + 1";
    } else {
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_users) VALUES($pagina, 1, 1)
                     ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_users = visite_users + 1";
    }
}
//....
?>
oppure se ti serve proprio per azzerare o creare il conteggio della pagina
PHP:
<?php
if ($user->data['user_id'] == 314) {
    $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_user, visite_ospiti) VALUES($pagina, 0, 0, 0)
                ON DUPLICATE KEY UPDATE visite_tot=0, visite_user=0, visite_ospiti=0,";
    /*in questo modo:
    se il record non esiste lo crei
    se esiste lo azzeri
    */
}else{
    if ($user->data['user_id'] == 1) { // Conteggia solo gli Utenti Registrati e gli Ospiti
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_ospiti) VALUES($pagina, 1, 1)
                     ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_ospiti = visite_ospiti + 1";
    } else {
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_users) VALUES($pagina, 1, 1)
                     ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_users = visite_users + 1";
    }
}
//....
?>
e comunque farei a parte in una pagina a te riservata tutto l'ambaradan di creare un nuovo record o azzerare il contatore esistente, non mescolando quello che puoi fare tu e quello che possono fare gli user o gli ospiti
 
In un qualche sono riuscito a farlo funzionare correttamente, anche se non ho ancora capito perché abbia dovuto far interagire 2 file php.

Qui ho notato che degli users hanno visitato queste pagine, ma entrando nei loro profili vedo che non si collegano da tempo. Come mai?

Schermata 2016-06-10 alle 04.05.12.png
 
ciao
forse devi modificare qualcosa nei profili, esempio quando pinco si collega devi aggiornare la data relativa a pinco.
certo, ma questo non lo so, pinco deve essere registrato e per accedere loggato, quindi se si logga (con suo user e pass) e visita una pagina aggiorni per quell'user e pass la data della visita
 
No, nel mio forum ora ci sono 3 utenti registrati, 4 con me. L'ultima volta si sono connessi il 9 maggio, ma nel db risulta che ieri qualche user registrato è entrato. O forse è l'user anonymous?
if ($user->data['user_id'] == 1) {...

Il primo della lista sotto sono io, perciò non mi calcola:

Schermata 2016-06-10 alle 13.16.52.png
 
Ultima modifica:
Ora funziona tutto, non capisco questa variabile a cosa serve, ma se la tolgo il contatore non funziona
$ins_up=mysqli_query($link, $query);

Codice:
...
// Identificativo della pagina
$pagina = "'a-istinti-del-body'";

// Connessione al db tramite i parametri nel file config.php
$link = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
if (!$link) {
   die ("Non riesco a connettermi:" . mysqli_error());
}

if ($user->data['user_id'] == 314) { // il 314 è l'ID admin (il mio), non viene conteggiato
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_users, visite_ospiti) VALUES($pagina, 0, 0, 0)
                     ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 0, visite_users = visite_users + 0, visite_ospiti = visite_ospiti + 0";
    }
      else if ($user->data['user_id'] == 1) { // Conteggia solo gli Utenti Registrati e gli Ospiti
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_ospiti) VALUES($pagina, 1, 1)
                     ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_ospiti = visite_ospiti + 1";
    } else {
        $query="INSERT INTO phpbb_contatore(pagina, visite_tot, visite_users) VALUES($pagina, 1, 1)
                     ON DUPLICATE KEY UPDATE visite_tot = visite_tot + 1, visite_users = visite_users + 1";
    }
    $ins_up=mysqli_query($link, $query);

// Include il file php che contiene tutti i contatori per il file articoliX.html. VA MESSO QUI
include($phpbb_root_path . '*a-contatori.' . $phpEx);
...


*a-contatori.php
Codice:
//Nome identificativo nel db
$pagina = "'a-istinti-del-body'";

// Se clicca id 314 admin, nelle img-link mette a video "0"
mysqli_query($link,"INSERT INTO phpbb_contatore (pagina, visite_tot) VALUES ($pagina, 0)");

// Estrae i dati dal DB
$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE pagina = $pagina");
$tot_visite = mysqli_fetch_assoc($res);

if ( $tot_visite['visite_tot'] == 1) {
    $volte = "volta";
}
else {
    $volte = "volte";
}

// Crea la variabile-echo che viene poi richiamata nel file articoliX.html
$template->assign_vars(array(
    'CONTA_VISITE1' => "<span class=\"letto\">Letto </span><span class=\"number\">". $tot_visite['visite_tot'] ."</span> <span class=\"letto\">". $volte ."</span>",
));
 
ciao
parli della variabile $link
nella $ins_up=mysqli_query($link, $query); ?
se si intanto è la sintassi corretta delle query mysqli e poi è la variabile che definisce la connessione, prima della query avrai qualcosa del tipo
PHP:
//....
$link=mysqli_connect($host,$username,$password,$db);
//....
dove la varie varibili sono i dati per connettersi
 
No, intendo questa: $ins_up=mysqli_query($link, $query);
In particolare, non vedo dove viene richiamato questo $ins_up
 
ciao
dipende nel tuo caso (mi sembra) essendo un INSERT potrebbe non servire, però io generalmente la uso perchè poi quando faccio il debag mi è più comodo scrivere
PHP:
var_dump($ins_up);
che
PHP:
var_dump(mysqli_query($link, $query));
oppure, dato che è una variabile boeliana (true o false) la uso nell'if
PHP:
if(!$ins_up){echo "errore";}
questo per l'INSERT/UPDATE/DELETE, nel caso di SELECT ti serve per estrarre i dati
 

Discussioni simili