[PHP] Codice accetta solo identificatore numerico

  • Creatore Discussione Creatore Discussione Shyson
  • Data di inizio Data di inizio

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Questo è quello che ho nel db
Schermata 2016-05-28 alle 16.46.20.png


Questo è il codice, invece di mettere $pagina = 1; vorrei mettere una parola al posto del numero.

PHP:
// Identificativo numerico della pagina
$pagina = 1;

// il 314 è il mio ID utente che ho in LOCALHOST per impedire che il contatore che conteggi i miei click
if($user->data['user_id'] <> 314 ) {
// Aggiorna il contatore
mysql_query("UPDATE phpbb_contatore SET visite = visite+ 1 WHERE pagina = $pagina");
}

// Inserisce i dati nel db e sovrascrive il numero-visite precedente
if (mysql_affected_rows() == 0) {
    mysql_query("INSERT INTO phpbb_contatore (pagina, visite) VALUES ($pagina, 1)");
}

// Estrae i dati dal DB
$res = mysql_query("SELECT visite FROM phpbb_contatore WHERE pagina = $pagina");
$visite = mysql_fetch_assoc($res);

// Crea la variabile-echo che viene poi richiamata nel file HTML
$template->assign_vars(array(
    'conta_visite1' => $visite['visite'],
));
 
Ultima modifica di un moderatore:
Ciao, metti
PHP:
$pagina = "stringa";
e poi gli apici nella query
PHP:
..... WHERE pagina = '$pagina'"
 
Così funziona

PHP:
$pagina = "'a-enzimi'";

// Aggiorna il contatore
mysql_query("UPDATE phpbb_contatore SET visite = visite WHERE pagina like $pagina");

// Inserisce i dati nel db e sovrascrive il numero-visite precedente
mysql_query("INSERT INTO phpbb_contatore (pagina, visite) VALUES ($pagina, 0)");

// Estrae i dati dal DB
$res = mysql_query("SELECT visite FROM phpbb_contatore WHERE pagina like $pagina");
$tot_visite = mysql_fetch_assoc($res);

if ( $tot_visite['visite'] == 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_VISITE4' => "<span class=\"letto\">Letto </span><span class=\"number\">". $tot_visite['visite'] ."</span> <span class=\"letto\">". $volte ."</span>",
));
 
Ultima modifica di un moderatore:
ciao
due consigli:
1) forse ti conviene usare l'on duplicate key, velocizzi di molto
PHP:
<?php
//....
if($user->data['user_id'] <> 314 ) {
    $query="INSERT INTO phpbb_contatore(pagina, visite) VALUES('$pagina',1) ON DUPLICATE KEY UPDATE visite = visite+ 1";
    mysql_query($query);//inserisce se key non esiste, aggiorna se esiste
}
//.....
?>
2) abbandona le vecchie mysql e passa a mysqli, corri il rischio tra un po' di dover rifare tutto
 
Se metto così, mi da errore "Errore nella selezione del database" ho aggiunto la "i" a mysql

Codice:
$link = mysqli_connect($dbhost, $dbuser, $dbpasswd);
if (!$link) {
    die ("Non riesco a connettermi:" . mysqli_error());
}
$db_selected = mysqli_select_db($dbname, $link);
if (!$db_selected) {
    die ("Errore nella selezione del database:" . mysqli_error());
}
 
ciao
PHP:
<?php
//....
$link = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
//poi nella query
$query=mysqli_query($link,"SELECT....");//o l'inser o l'update
//...
?>
 
Ho notato che Netsons non accetta mysqli, quello sotto senza la "i" funziona

Codice:
$link = mysql_connect($dbhost, $dbuser, $dbpasswd);
if (!$link) {
    die ("Non riesco a connettermi:" . mysql_error());
}
$db_selected = mysql_select_db($dbname, $link);
if (!$db_selected) {
    die ("Errore nella selezione del database:" . mysql_error());
}
 
E' la 5.4.30 però ho notato che se tolgo un include , funziona, perciò dev'essere un problema di codici.
 
Il codice che avevo nell'include l'ho messo nel file php e ora si collega al db, ma non inserisce più i dati nel db, non so, da errori:

phpBB Debug] PHP Warning: in file [ROOT]/a-istinti-del-body.php on line 32: mysqli_query() expects at least 2 parameters, 1 given
[phpBB Debug] PHP Warning
: in file [ROOT]/a-istinti-del-body.php on line 37: mysqli_query() expects at least 2 parameters, 1 given
[phpBB Debug] PHP Warning
: in file [ROOT]/a-istinti-del-body.php on line 41: mysqli_query() expects at least 2 parameters, 1 given

Codice:
//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());
}

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

// il 314 è l'ID admin (il mio) da non calcolare nel conteggio
if($user->data['user_id'] <> 314 ) {
// Aggiorna il contatore
mysqli_query("UPDATE phpbb_contatore SET visite = visite+ 1 WHERE pagina like $pagina");   <-------- 32
}

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

// Estrae i dati dal DB
mysqli_query("SELECT visite FROM phpbb_contatore WHERE pagina like $pagina");    <--------------------- 41

if ( $tot_visite['visite'] == 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'] ."</span> <span class=\"letto\">". $volte ."</span>",
));
 
Ultima modifica:
ciao
la mysqli_quey aspetta il paremetro di connessione
mysqli_query($link,"......");
al posto dei .... o SELECT o INSERT o UPDATE
 
Ultima modifica:
ciao
gli apici (guarda che non è un problema di mysqli, ci volevano anche su mysql)
PHP:
mysqli_query($ink,"INSERT INTO phpbb_contatore (pagina, visite) VALUES ('$pagina', 1)");
poi nella select e nell'update vedo che usi WHERE pagina like $pagina, a parte gli apici che mancano, perchè usi il like?
essendo pagina la key primaria è univoca oppure (ma non capisco perchè), se sei nella pagina pinco in quel modo estrai o aggiurni tutte le pagine che il cui nome inizi, termini o contenga "pinco"
 
Son in fase di creazione, lo sto sistemando. Ora inserisce ma non estrae.
Tieni presente che questo è l'echo che ho nel file html {CONTA_VISITE1}

- Strano, ora funziona anche enza apici
 
Ultima modifica:
Forse è proprio quello. sistemiamolo, secondo te è meglio mettere un id ad ogni pagina o va bene anche la pagina stessa come id?
Es:
Codice:
// Identificativo della pagina
$pagina = "'a-istinti-del-body'";
$id_page = 1;
 
ciao
secondo me in questo caso è indifferente, le chiavi primarie possono essere numeriche o letterali, certo mettendo il nome con un po' di codice php e un include postresti risparmiarti la fatica ed eventuali errori di mettere un numero diverso per ciascuna pagina, se ha pazienza ti faccio un esempio
 
Si, io sono qui, sistemiamolo. non uso include e poi per me va bene anche il nome della pagina, tanto i nomi cambiano.

Ho messo così ma non mette a video il numero

Codice:
// Estrae i dati dal DB
$res = mysqli_query($link,"SELECT visite FROM phpbb_contatore WHERE pagina like $pagina");   
$tot_visite = mysql_fetch_assoc($res);
 
ciao
ti fai un file chiamato esempio nome_pagina.php
PHP:
<?php
$pagina=strtolower(basename($_SERVER['PHP_SELF']));//per omogeneità rendo tutto minscolo
//e se vuoi togliere php o html
$togli=array('.php','.html');//e/o altre estenzioni
$pagina=str_replace( $togli, "" , $pagina);//tolgo l'estenzione
?>
poi nelle pagine che serve
PHP:
<?php
//....
require_once "nome_pagina.php";//attento ai percorsi
//....
?>
in questo modo eviti errori in caso di modifiche o aggiunte pagine
 

Discussioni simili