Newsgroup: it.comp.www.php
Titolo: Verificare se un dato esiste

Ciao a tutti. Avrei bisogno di un aiutino. Ho creato una scheda in cui 
registro gli utenti nel sito. Ora però data la possibilità di inserire 
il nick vorrei fare in modo che non possa essere scritto un nick già 
esistente. Se lo faccio da MySql mi restituisce un errore che mi blocca 
lo script. Io vorrei fare in modo che PHP con una semplice query 
controlli se il nick esiste già e mi riporti al modulo chiedendo di 
cambiare il nome. So che sarà una stupidata farlo, ma essendo nuovo di 
questo linguaggio mi trovo un pochino in difficoltà.
Io ho provato così ma ovviamente non funziona:
/*
questo codice servirà per essere sicuri
che nn esiste un altro nick uguale a quello scelto:
*/
$query1 = "Select * from $tabella WHERE nick = $nick" ;
$dbResult1 = mysql_query($query1, $db);
if ($dbResult1 = mysql_query($query1, $db)== "$nick")
{ print ("Il nome selezionato esiste già.");
}
Grazie a tutti per l'aiuto.
Ciao,
Kevin.

 ha scritto nel messaggio 
news:3_V_d.9815$kC3....@tornado.fastwebnet.it...

innanzitutto dopo WHERE nick = ci vogliono gli apici e mysql_fetch_row, 
quindi:
$query1 = "Select * from $tabella WHERE nick = '$nick'" ;
$row = mysql_fetch_row($query1);
poi nell'if devi solo mettere $dbResult1, quindi:
if ($row['nick']==$nick) 

 
						$num_righe=mysql_num_rows($dbResult1); // Salva il numero di righe 
trovate
if ($num_righe != 0){
	print ("Il nome selezionato esiste già");
}else{
	codice.......
}
Ciao.
	MAX

Merlink...A.K.A Kevin wrote:

la cosa piu' saggia e' impostare la colonna 'unique' direttamente nel db e
poi proseguire con
function insertNick($db, $nick = '')
{
  $nick = mysql_real_escape_string($nick);
  mysql_query("INSERT INTO $tabella ('nick') VALUES ('$nick')", $db);
  if(($errno = mysql_errno($db)) == 0) return 0;
  return ($errno == 1062) ? 1 : -1;
}
la funzione si richiama con insertNick($risorsa_mysql, 'NomeDaInserire');
e ritorna 0 in caso di successo, 1 se il nick esisteva gia', -1 per ogni
altro tipo di errore..
quindi..
$isInserted = insertNick($db, 'Nick');
if($isInserted == 0)
  echo "Nick inserito";
else
  echo ($isInserted > 0) ? "Nick gia' presente nel db" : "Errore generico";
-- 
www.iuz-lab.info

Ragazzi! Grazie mille per l'aiuto!! con i vostri interventi ho scritto 
questo codice, che mi sembra davvero funzionale! Grazie mille a tutti! :)
Kevin.
$query1 = "Select * from $tabella WHERE nick = '$nick'" ;
$dbResult1 = mysql_query($query1, $db);
$num_righe=mysql_num_rows($dbResult1); // Salva il numero di righe trovate
if ($num_righe != 0){
     print ("Il nome selezionato esiste già");
}else{
$query = "INSERT INTO $tabella (nick, pw, email, professione,razza) 
VALUES ('$nick', '$pw', '$mail', '$work', '$razza')";
$result = mysql_query($query, $db)
or die("Nessun dato inserito a causa di un errore sconosciuto.");
}
$query2 = "Select * from $tabella Order by id Asc LIMIT 0,30" ;
$dbResult = mysql_query($query2, $db);
$AffectedRows = mysql_affected_rows($db);

MAI SENTITO PARLARE DI SQL INJECTION?
OCCHIO A COME COMPONI I COMANDI SQL, NN LIMITARTI A METTERE GLI APICI
ALL'INIZIO E ALLA FINE, DEVI FARE IN MODO CHE ANCHE TUTTI GLI APICI
SINGOLI ALL'INTERNO DEL TESTO VENGANO RADDOPPIATI
SE COME NICK NAME IO SCRIVESSI QUALCOSA CON L'APICE SINGOLO?
IL TUO COMANDO SQL RISULTEREBBE
SELECT * FROM TABELLA WHERE CAMPO = 'L'ALTRO MONDO'
E INVEE DOVREBBE ESSERE INVIATO IN QUESTO MODO
SELECT * FROM TABELLA WHERE CAMPO = 'L''ALTRO MONDO'
FATTI UNA FUNZIONCINA BANALE CHE RICEVUTA UNA STRINGA COME PARAMETRO
RITORNI UNA STRINGA QUOTATA:
IN QUESTO MODO POTRAI SEMPLICEMENTE FARE QUESTO
$COMANDO_SQL_DA_ESEGUIRE = 'SELECT * FROM TABELLA WHERE
CAMPO='.QUOTEDSTR($NICK);
PAOLO
Gianluca Cacace ha scritto:



-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 MAI SENTITO PARLARE DI SQL INJECTION?
Per favore, rispetta la netiquette e le regole di quoting.
http://wiki.news.nic.it/QuotarBene
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

 or die("Nessun dato inserito a causa di un errore sconosciuto.");
[/cut]
non è vero che è sconosciuto basta scrivere
or die(mysql_error());
raenkrus

 raenkrus
Grazie lo metto subito..
Kevin

 PAOLO
Ciao. Ho provato a fare una piccola prova nel modulo di iscrizione. In 
realtà se scrivo L'Altro Mondo, mi restituisce nella pagina chiamata, 
L\'Altro Mondo. E' un pò come se fosse già settato come dici tu, solo 
che vorrei appunto evitare questo carattere di escape. Come posso fare? 
Grazie, Ciao.

$stringa_senza_escape = stripslashes($stringa_con_escape);
Attenzione a toglierli, vengono automaticamente aggiunti proprio per
motivi di sicurezza