2010-12-14 5 views
1

J'ai un petit problème avec une requête très simple, quand je code dur les valeurs dans la requête son fonctionnement, mais quand j'utilise une variable PHP rien n'est récupéré, je vérifie un beaucoup de choses y compris la requête, la base de données il vaut la peine de dire que je reçois la variable d'un formulaire par POST et aussi vérifié que je les obtiens mais quand je les utilise dans une requête, ils ne fonctionnent pas: Sune requête très simple ne fonctionne pas PHP

voici mon code ..PLZ qu'est-ce que je fais mal? !!!!!!!!!!!

<?php 

$email = $_POST ['emailEnter'] ; 
$password = $_POST ['passwordEnter']; 


$connection = mysql_connect('localhost','root','') ; 

$db_selected = mysql_select_db("lab5" , $connection) ; 

$query = 'select * From user where email="$email" and password="$password" ' ; 
$result = mysql_query ($query , $connection); 
    while($row=mysql_fetch_array($result)) 
    { 
     echo $row['name']; 
    } 
mysql_close($connection);  
?> 
+5

http://bobby-tables.com/ – Quentin

+0

code besoin ...... oh là, il est –

+0

me donner Teh codez –

Répondre

4

Les étapes de débogage de base sont 1. l'ajout

if (!$result) echo "Error: ".mysql_error(); 

voir toutes les erreurs de la requête SQL et 2. sortie

echo "Query: $query"; 

pour voir ce que les variables contiennent. L'un d'eux vous indiquera le problème.

En outre, votre requête est vulnérable à SQL injection. Vous devez ajouter un

$email = mysql_real_escape_string($email); 
$password = mysql_real_escape_string($password); 

après avoir récupéré les valeurs du tableau POST.

+0

êtes-vous volontairement ne pas donner la vraie raison que ça ne fonctionne pas?Je me demandais simplement, ne dis pas que c'est mauvais :) –

+0

les espaces réservés sont mieux! – Nathan

+0

@Viper non, je n'ai juste pas remarqué. @Nathan vrai, mais je suppose que l'OP est nouveau à cela, donc je le prendrais pas à pas. Il est raisonnablement sûr pour le moment avec escape_string –

6

Vous utilisez des guillemets simples dans la variable de requête. Les guillemets simples ne remplacent pas les variables - donc il recherche la chaîne littérale $email pas la variable email. Soit utiliser des guillemets doubles ou encore mieux utiliser quelque chose comme PDO qui ferait le travail pour vous.

Vous devez également nettoyer vos entrées des vulnérabilités SQL/XSS.

0

Votre erreur réside probablement dans le fait que vous n'échappez pas à vos paramètres.

Pendant que vous y êtes, utilisez MySQLi ou AOP (peut-être même quelques déclarations préparées)


Quelqu'un a mentionné votre utilisation de guillemets simples, c'est l'erreur réelle, mon mauvais.

Mais mon conseil est toujours valable.Après avoir utilisé des déclarations préparées, vous n'auriez pas tombé pour cette erreur

+0

oooooooooh merci les gars, vous avez mentionné quelque chose sur le mysqli et PDO où puis-je commencer à lire sur ces trucs, je suis un vrai Newbie –

0

essayer

$query = 'select * From user where email="' . $email . '" and password="'. $password . '" ' ; 

ou

$query = "select * From user where email='$email' and password='$password'" ; 
0

Essayez ceci:

$query = "select * From user where email='" . $email . "' and password='" . $password . "'; 

ensuite changer immédiatement à ceci à la place:

$query = "select * From user where email='" . mysql_real_escape_string($email) . "' and password='" . mysql_real_escape_string($password) . "'; 
0

Essayez

$query = "SELECT * FROM user WHERE email = '".$email."' AND password = '".$password."'"; 
+0

Ow, im toujours lent à répondre à ces question:/Anyway comme d'autres l'ont dit, n'oubliez pas d'ajouter mysql_real_escape_string! – Mac

0

Vous avez confondu les guillemets simples et doubles

Vous avez:

$query = 'select * From user where email="$email" and password="$password" ' ; 

Vous voulez:

$query = "select * From user where email='$email' and password='$password' " ; 

guillemets simples à évaluer ce qui est littéralement à l'intérieur. Les guillemets doubles analysent les variables à l'intérieur. Il y a aussi une syntaxe d'accolade {$ variable} que vous pouvez utiliser.

Les suggestions d'autres affiches pour l'utilisation de mysql_real_escape ou l'utilisation de mysqli ou PDO plus récents sont également importantes. À tout le moins, utilisez mysql_real_escape sur les paramètres qui proviennent de l'entrée de l'utilisateur.

0

le problème est la façon dont vous citez les variables. Supposons que $ email = '[email protected]' et $ password = 'securenot'.

ce que nous voulons est la chaîne interprétée finale à être les suivants

select * de l'utilisateur où email='[email protected] » et mot de passe = « securenot »

pour ce faire, nous remplaçons simplement le [email protected] pour $ email et securenot pour $ mot de passe et obtenir ce qui suit:

sélectionnez * de l'utilisateur où email = '$ email' et mot de passe = '$ mot de passe'.

puis dans le code php ...

$ query = "select * from utilisateur où email = '$ email' et mot de passe = '$ password'";

espoir est d'une aide

0

mysql_fetch_assoc() pour un tableau associatif. Vous ne pouvez pas utiliser le tableau normal comme tableau assoc.

while($row=mysql_fetch_assoc($result)) 
{ 
    echo $row['name']; 
} 
Questions connexes