2011-11-03 2 views
-1

Bit confus avec celui-ci.S'il vous plaît aidez-moi à déboguer ce code

Fondamentalement, j'ai une colonne dans une table, et je veux récupérer la valeur dans cette colonne, pour une ligne spécifique.

J'ai un ensemble de code qui fonctionne, mais pas dans cette situation particulière.

Le code je qui fonctionne est la suivante:

$qry="SELECT * FROM logins WHERE username='$login' AND password='$password'"; 
$result=mysql_query($qry); 

Cette récupère évidemment cette ligne particulière, puis:

$member = mysql_fetch_assoc($result); 
$_SESSION['SESS_MEMBER_ID'] = $member['User ID']; 

Ceci définit avec succès la variable de session, la valeur de l'utilisateur id colonne de cette ligne.

Alors, ça va, ça marche. Le code que je suis en train d'utiliser dans ma nouvelle situation est la suivante:

$qry = "SELECT * FROM vote WHERE Username = '" .$_SESSION['SESS_USERNAME']. "'"; 
$result = mysql_query($qry); 

Cela devient la ligne en fonction de l'utilisateur actuel, puis:

while($row = mysql_fetch_array($result)) 
{ 
Print "<b>Name:</b> ".$row['Username'] . " <br>"; 
Print "<b>Vote:</b> ".$row['Vote'] . " "; 
} 

Le tout fonctionne en boucle correctement, il affiche les nom d'utilisateur actuel, et leur vote. Évidemment, je sentais que la boucle n'était pas nécessaire, car je n'ai déjà qu'une seule ligne sélectionnée. Retrait de la boucle l'a cassé, alors je l'ai remis. Pas une grosse affaire, je peux vivre avec ça si ça fait le boulot.

La question que je me concentre sur, est l'utilisation de la

$row['Username'] 

Dans cette instruction if:

if($row['Username'] == "Admin") { 
echo ("Win!<br />"); 
} 
else { 
echo "Failed!"; 
} 

Lors de l'impression de la boucle au-dessus, il imprime:

Name, as Admin, 
and vote, as 0. 

Si j'essaie ensuite de valider en utilisant l'instruction if, je lui demande de faire écho à Win! si le nom d'utilisateur == Admin.

De toute évidence, il est vrai qu'il l'a imprimé sur la ligne avant, mais il saute toujours Fail! et je ne peux pas comprendre pourquoi.

Devrais-je définir $ row ['Username'] comme une autre variable?

Quelqu'un peut-il offrir leurs conseils s'il vous plaît?

Vive

Eds

+1

Changez votre temps en si. – pritaeas

+0

votre boucle ne devrait pas sortir comme vous le montrez. S'il vous plaît vérifiez les codes que vous avez publiés – Raptor

+0

étrange, cela devrait fonctionner. comme @pritaeas a dit, change tout en un if, et un autre qui montre 'mysql_error()'. –

Répondre

1

Le problème provient de la boucle:

while($row = mysql_fetch_array($result)) 
{ 
Print "<b>Name:</b> ".$row['Username'] . " <br>"; 
Print "<b>Vote:</b> ".$row['Vote'] . " "; 
} 

La première fois, $row est réglé sur la ligne de données à partir de la base de données. Il essaie ensuite de parcourir à nouveau la boucle, mais puisqu'il n'y a qu'une seule ligne, mysql_fetch_array renvoie false. maintenant $row est défini sur false. Ainsi, aucun code après la boucle n'aura plus accès aux données.

La solution serait de remplacer votre boucle avec un simple instruction if:

if ($row = mysql_fetch_array($result)) 
{ 
    Print "<b>Name:</b> ".$row['Username'] . " <br>"; 
    Print "<b>Vote:</b> ".$row['Vote'] . " "; 
} 
+0

Cela a fait l'affaire! Merci! Y at-il de toute façon pour moi de supprimer complètement la déclaration if, et juste définir cette valeur comme une variable que je peux travailler avec? – Eds

+0

ne vous inquiétez pas, je définir la variable à partir de l'instruction if! Merci encore! – Eds

0

Je ne vois pas comment votre code PHP pourrait produire cet échantillon « imprime ». Cependant, vérifiez que votre champ Username contient réellement une chaîne "Admin" exacte. Il peut y avoir un saut de ligne ou un autre espace. Faire un

var_dump($row['Username']); 

devrait montrer quelque chose comme

string(5) Admin 

Le nombre entre crochets (5) est la longueur de la chaîne. Si ce n'est pas 5, alors vous avez des trucs supplémentaires dans la chaîne provoquant l'échec du test == 'Admin'.

Questions connexes