un "if" anomalo...

Near

Nuovo Utente
18 Ott 2009
8
0
0
Salve a tutti.
Avrei un problemino e spero che qualcuno possa gentilmente aiutarmi.
Dovrei fare una classifica cioè una pagina con una casella di testo in cui inserire il nome, poi una pagina che controlla se il nome inserito è già presente nella classifica o meno e ne l caso in cui non sia presente inserirlo.
Il mio codice fa questo tranne che capire se due nomi sono uguali e non capisco perkè.
Vi scrivo un pezzo di codice:
Codice:
$connessione=mysql_connect("localhost","root","") or die(mysql_error());
$scelta_db=mysql_select_db("nomedb") or die(mysql_error());

$nm = $_POST['name'];
if($nm==""){
echo "Errore! Non hai inserito nessun nome. Torna Indietro!!!";
$ok=0;
}else $ok=1;
$query = 'select * from nick';
$ri = mysql_query($query, $connessione);
$nr = mysql_num_rows($ri);

while ( ($dati = mysql_fetch_array($ri)) And $ok==1 ) {
$ndb = $dati['nickname'];

[COLOR="Red"]/*ecco il problema:l'if qui sotto non viene eseguito mai cioè non 
capisce che il nome inviato e il nome nel database sono uguali, come mai?*/[/COLOR]
if ($ndb == "$nm"){
echo 'Siamo spiacenti.Il nome è già presente. ';
$ok=0;
echo "<br />";
echo "<a href=\"http://localhost/paginaprecedente.php\">Indietro</a>";
} else $ok=1;
}

[COLOR="Red"]ecc...(il resto funziona cioè inserisce il nome correttamente)[/COLOR]

Forse il problema è che sono appena passate le 3:00 e sono ancora sveglia :dormo:

Ringrazio in anticipo chiunque verrà in mio soccorso.

Buona notte.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
scusa mi sono accorto di un'altra cosa

if ($ndb == $nm){
echo 'Siamo spiacenti.Il nome è già presente. ';
$ok=0;
echo "<br />";
echo "<a href=\"http://localhost/paginaprecedente.php\">Indietro</a>";
} else {
$ok=1;
}
 

Near

Nuovo Utente
18 Ott 2009
8
0
0
parentesi

grazie ora provo.:fonzie:
Per quanto riguarda la parentesi graffa che hai aggiunto, penso che mi darà errore messa così, visto che la graffa chiusa dopo, è riferita al while e non all'else.
cmq ora provo l'if come hai detto tu, non si sa mai...grazie tante vi farò sapere.
 

Near

Nuovo Utente
18 Ott 2009
8
0
0
che io sappia, scrivere:
else { $ok=1;}

oppure:

else $ok=1;

è asattamente la stessa cosa quando dopo l'else c'è solo una istruzione.
di solito le parentesi graffe si usano quando devi far eseguire tante istruzioni , mentre quando ce n'è una sola da eseguire, le graffe sono inutili, almeno è così che funziona in quasi tutti i linguaggi.

Per quanto riguarda if($ndb==$nm) cioè senza virgolette, l'ho provato ma senza successo, cioè quell'if non viene considerato mai, come prima insomma.
Mi pare assurda sta situazione perkè non mi sembra ci sia nulla di errato.
Ho guardato un altro codice che avevo scritto tempo fa per una cosa simile e che funziona, ed avevo scritto l'if come ho scritto nel mio primo post.
Com'è possibile che non funzioni adesso? :gun:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
per la scrittura hai ragione, anche si io preferisco sempre (anche per ragioni di lettura fare
if(......){
........
}else{
........
}

per quanto riguarda il fatto che non ti esegue l'if (che comunque è scritto giusto) può dipendere da qualcosa a monte
prova a metere dei var_dump (che poi toglierai)

$nm = $_POST['name'];
var_dump($nm);
....................................
$ndb = $dati['nickname'];
var_dump($ndb);

e guarda cosa ti restituisce
 

Near

Nuovo Utente
18 Ott 2009
8
0
0
grazie tante, ho risolto grazie a te... quel var_dumb è stato illuminante

Praticamente il problema era nel codice sotto, quando inserivo, perchè avevo accidentalmente scritto:
$insertquery = "INSERT INTO nick (id, nickname) VALUES ('$n',' $nm')";
cioè con lo spazio dentro ' $nm' e non '$nm', quindi memorizzava nel database spazio+nome cioè se scrivevo "tino" considerava 5 caratteri e non 4.
grazie tante davvero.
:beer:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao, ok
se mi permetti ti do un consiglio, metti la funzione trim e strtolower
$nm = strtolower(trim($_POST['name']));
trim toglie gli spazi perchè se uno nel form mette solo spazi la $nm non è vuota, ma il nick (per me) non è valido
strtolower rende tutto minuscolo (strtoupper tutto maiscolo) cosi non trovi dei nick simili (es "Borgo Italia" e "borgo italia")
 

Near

Nuovo Utente
18 Ott 2009
8
0
0
ti ringrazio per la dritta perkè questi comandi non li conoscevo, solo che non posso usarli perkè può capitare che uno si chiami come un altro ma con lo spazio ecc... perchè di solito chi entra nella mia classifica usa il nickname che usa anche sul forum e certe volte si differenziano veramente per poco, quindi non posso impedirgli di scrivere il nome così come lo usano di solito. a me interessava solo modificare la classifica in modo tale che se uno scrive per esempio "ciccio" e poi lo riscrive, gli viene impedito di riscriverlo, perchè mi è già capitato che qualcuno scrivesse 2 volte il proprio nome per errore.
cmq terrò a mente quei comandi che potrebbero essere utili.
grazie ancora.
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
Non capisco perché c'è bisogno di ciclare tutti gli utenti, puoi fare così:
PHP:
<?php
$query = mysql_query("SELECT * FROM utenti WHERE username='{$nomeutente}'");

if(mysql_num_rows($query) > 0)
  echo "Utente già presente nel database.";
else
  echo "Tutto OK.";
?>
 

Near

Nuovo Utente
18 Ott 2009
8
0
0
emmm... in effetti... hai ragione... :D
mi sono proprio complicata la vita eheh.
tenx.
 

Discussioni simili