View Full Version : [php-mysql] problema query
ho una query di questo tipo:
$query = "SELECT user FROM tabella WHERE user='$utente'";
$query = mysql_query($query);
$num = mysql_num_rows($query);
if($num >= 1) {
// query di insert
} else echo "Il nome utente ".$utente." è già in uso!"
come mai mi fa sempre la query di insert??
(praticamente dovrebbe controllare se un utente esiste già.. se nn esiste fa la query di insert, se esiste invece dice che è già in uso)
Non sono un guru di php, dato che al 98% lavoro in Java, ma secondo me il problema è nell'if dove hai messo $num>=1
Prova a mettere solo > e non =.
Da quello che posso capire in $num ci và il numero di righe che soddisfa la query. Se trova l'utente, tale numero è almeno uno (maggiore di 1 se si ripete). Quindi "non lo trova" dovrebbe essere 0.
L'IF potrebbe quindi essere anche del tipo
if ($num==0)
il num>=1 significa che deve trovare almeno una riga, quindi se trova un solo utente con quel nome già dovrebbe essere vero l'if.. invece a me viene falso lo stesso, l'if che hai postato tu invece è l'inverso di questo, praticamente se metto in quel modo significa che se è vero nn ci sono utenti, se è falso ci sono!
grazie mille dell'aiuto cmq!! :)
rdefalco
19-12-2005, 09:34
"SELECT user FROM tabella WHERE user='$utente'"
Non capisco di PHP ancora ma credo che vada scritta come
"SELECT user FROM tabella WHERE user='" . $utente . "'"
A meno che non sia possibile includere variabili PHP all'interno di stringhe senza dover prima terminare la stringa e concatenarla...
gaglioppo
19-12-2005, 11:30
innanzittuto ha ragione rdefalco:
si deve concatenare correttamente la stringa:
"SELECT user FROM tabella WHERE user='" . $utente . "'"
e poi io farei cosi':
$query = "SELECT user FROM tabella WHERE user='".$utente."'";
$query = mysql_query($query);
$risultato=mysql_fetch_array($query);
if($risultato<>null){
// query di insert
} else echo "Il nome utente ".$utente." è già in uso!"
se è un metodo ridicolo non lo so, ma io faccio sempre cosi'.
sìsì per il fatto della concatenazione ho sbagliato a trascrivere, in realtà avevo fatto così:
$query = "SELECT user FROM reflink WHERE user=".$utente;
cmq ora mi dà sempre che è già esistente, anche se nn lo è:
$query = "SELECT user FROM tabella WHERE user=".$utente;
$query = mysql_query($query);
$risultato=mysql_fetch_array($query);
if($risultato<>null){
// query di insert
echo "La registrazione è avvenuta correttamente!";
} else echo "Il nome utente ".$utente." è già in uso!";
gaglioppo
19-12-2005, 18:00
fai questa prova:
-scegli un user che non sia esistente e fattelo stampare, per vedere cosa ti porta, anche se sembra la stessa cosa dovresti usare gli apici '
in questo modo:
query=" select * from utenti where utente=' ".$user." ' ";
infatti ci potrebbero essere problemi, lo vedi di sicuro quando $user contiene uno spazio.
facci sapere
rdefalco
19-12-2005, 18:15
$query = "SELECT user FROM reflink WHERE user=".$utente;
Come anche segnalato da altri qui è sbagliato! Se $utente è rdefalco ad esempio la stringa passata al DBMS sarà
SELECT user FROM reflink WHERE user=rdefalco
mentre dovrebbe essere
SELECT user FROM reflink WHERE user='rdefalco'
con l'apice singolo quindi il codice corrispondente almeno sarà così
$query = "SELECT user FROM reflink WHERE user='" . $utente . "'";
cioè aggiunge l'apostrofo prima e dopo il nome utente
mercurio76
19-12-2005, 19:35
Il nomeutente va tra apici quindi va bene anche usare la variabile dentro la stringa ma tra apici come avevi fatto nel primo esempio:
$query = "SELECT user FROM tabella WHERE user='$utente'";
Per il resto sinceramente non ho capito forse il problema. Se vuoi che l'insert te lo faccia solo se non trova corrispondenze devi fare un controllo diverso...non capisco perchè fai $num>=1.
Io farei in questo modo:
$query = "SELECT user FROM tabella WHERE user='$utente'";
$result = mysql_query($query);
$num = mysql_num_rows($result);
//Se non trova una cippa ti fa l'insert altrimenti ti da il messaggio di errore
if($num == 0) {
// query di insert
} else echo "Il nome utente ".$utente." è già in uso!"
Se non è così allora non ho capito cosa volevi fare ;)
Il nomeutente va tra apici quindi va bene anche usare la variabile dentro la stringa ma tra apici come avevi fatto nel primo esempio:
$query = "SELECT user FROM tabella WHERE user='$utente'";
Per il resto sinceramente non ho capito forse il problema. Se vuoi che l'insert te lo faccia solo se non trova corrispondenze devi fare un controllo diverso...non capisco perchè fai $num>=1.
Io farei, come ha già detto qualcuno, in questo modo:
$query = "SELECT user FROM tabella WHERE user='$utente'";
$result = mysql_query($query);
$num = mysql_num_rows($result);
//Se non trova una cippa ti fa l'insert altrimenti ti da il messaggio di errore
if($num == 0) {
// query di insert
} else echo "Il nome utente ".$utente." è già in uso!"
Se non è così allora non ho capito cosa volevi fare ;)
sono una grandissima testa di cavolo, a parte il fatto dell'utente tra gli apici che proprio nn lo sapevo ma per il fatto del num == 0 son stato proprio un idiota -_-'' dopo 1 giorno che c'ho combattuto dietr a sto cavolo di script ero fuso e nn mi ero accorto che con >= 1 era il contrario.. il bello è che c'ho pure ragionato.. bah!!
vabbè, vi ringrazio tutti quanti, ora funziona :D
ora ho un altro problemino.. praticamente la seguente riga:
$query=mysql_query("INSERT INTO reflink (user, val, val1) VALUES ('".$utente."','".$val."','".$val1."')") or die('Errore nella query: '.mysql_error());
$utente e $val1 li passa tranquillamente.. $val invece nn lo passa.. mi passa proprio $val
o.O
grazie :)
uppino, ho ancora il problema :(
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.