2010-12-14 24 views
1

Ich habe ein kleines Problem mit einer sehr einfachen Abfrage, , wenn ich die Werte in der Abfrage hart Code funktioniert, aber wenn ich eine PHP-Variable verwenden nichts abgerufen wird, überprüfe ich ein Viele Dinge einschließlich der Abfrage, der Datenbank es wert zu sagen, dass ich die Variable aus einem Formular per POST bekomme und auch überprüft, dass ich sie bekomme, aber wenn ich sie in einer Abfrage sie jst nicht funktionieren: Seine sehr einfache Abfrage funktioniert nicht PHP

hier ist mein code ..PLZ was mache ich falsch? !!!!!!!!!!!

<?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

Notwendigkeit Code ...... oh ist es –

+0

gib mir teh codez –

Antwort

4

Die grundlegenden Debugging-Schritte sind: 1. Hinzufügen

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

Fehler aus der SQL-Abfrage, um zu sehen und 2. Ausgabe von

echo "Query: $query"; 

zu sehen, was die Variablen enthalten. Einer davon wird Sie auf das Problem hinweisen.

Auch Ihre Abfrage ist anfällig für SQL injection. Sie sollten eine

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

nach dem Abrufen der Werte aus dem POST-Array hinzufügen.

+0

sind Sie absichtlich nicht den wirklichen Grund gibt es nicht funktioniert?nur wundern, nicht sagen, es ist schlecht :) –

+0

Platzhalter sind besser! – Nathan

+0

@Viper Nö, ich habe es einfach nicht bemerkt. @Nathan stimmt, aber ich gehe davon aus, dass das OP neu ist, also würde ich es Schritt für Schritt nehmen. Es ist einigermaßen sicher für den Moment mit escape_string –

6

Sie verwenden einfache Anführungszeichen in der Abfragevariablen. Einfache Anführungszeichen ersetzen keine Variablen. Daher sucht sie nach der Zeichenfolge $email und nicht nach der Variablen-E-Mail. Verwenden Sie doppelte Anführungszeichen oder verwenden Sie besser etwas wie PDO, das die Arbeit für Sie erledigen würde.

Sie sollten auch Ihre Eingaben von SQL/XSS-Schwachstellen bereinigen.

0

Ihr Fehler liegt wahrscheinlich darin, dass Sie Ihren Parametern nicht entkommen.

Während Sie gerade dabei sind, verwenden MySQLi oder gU (vielleicht sogar einige vorbereitete Anweisungen)


Jemand Ihre Verwendung von einfachen Anführungszeichen erwähnt, das ist der wirkliche Fehler, mein schlecht.

Aber mein Rat steht immer noch.Verwendet vorbereitete Anweisungen, würden Sie für diesen Fehler nicht

fiel
+0

oooooooooh danke Jungs, Sie erwähnten etwas über die mysqli und PDO wo kann ich anfangen, über diese Sachen zu lesen, bin ich ein echter Newbie –

0

versuchen stattdessen

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

oder

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

Try this:

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

Ändern Sie dann sofort, dass zu Sie stattdessen:

Versuchen
0

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

Ow, ich bin immer zu langsam, um diese Frage zu beantworten:/Anyway wie andere schon gesagt haben, vergiss nicht, mysql_real_escape_string hinzuzufügen! – Mac

0

Sie verwirrt haben die einfachen und doppelten Anführungszeichen

Sie haben:

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

Sie wollen:

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

Einfache Anführungszeichen bewerten zu was buchstäblich drinnen. Bei doppelten Anführungszeichen wird nach Variablen im Inneren geparst. Es gibt auch eine geschweifte Klammer {$ variable} -Syntax, die Sie verwenden können.

Vorschläge von anderen Plakaten für mysql_real_escape mit oder neuer mysqli oder PDO verwenden, sind ebenso wichtig. Verwenden Sie mysql_real_escape zumindest für Parameter, die von Benutzereingaben kommen.

0

das Problem ist die Art und Weise Sie die Variablen zitieren. Angenommen, $ email = '[email protected]' und $ password = 'secundenot'.

, was wir wollen, ist der endgültige interpretiert Zeichenfolge die folgenden

select * from Benutzer zu sein, wo email='[email protected]‘und password =‚securenot‘

dies erreichen wir einfach ersetzen die so[email protected] für $ email und securenot für $ Passwort und erhält folgende:

select * from user wo email = '$ E-Mail' und password = '$ password'.

und dann in PHP-Code ...

$ query = "select * from user wo email = '$ E-Mail' und password = '$ password'";

Hoffnung, die eine Hilfe ist

0

mysql_fetch_assoc() für assoziative Array. Sie können das normale Array nicht als assoziatives Array verwenden.

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