2017-11-20 4 views
0

Ich mache meine eigene Testanwendung und möchte eine Login-Seite dazu. Und wenn der Benutzer die Anmeldeinformationen übergibt, sollte es Echo Success sein. aber das ist mir nicht gelungen.Wie Ressourcen aus der Datenbank abgerufen werden?

Also, vor allem möchte ich meinen Code mit euch teilen. Bitte guck dir das an.

<?php 
define ('DB_HOST', '127.0.0.1'); 
define ('DB_NAME', 'sqltest'); 
define ('DB_USER', 'sqltest'); 
define ('DB_PASSWORD', 'sqltest'); 

$conn=mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die ("failed to connect to db". mysql_error()); 

$db=mysql_select_db (DB_NAME, $conn) or die ("failed to connect to db". mysql_error()); 

[email protected]$_POST['username']; 

[email protected]$_POST['password']; 

$query = "SELECT Username, Password FROM userinfo WHERE username=".'$v1'. "AND password=.'$v2'."; 
$v3 = mysql_query($query); 

if ($v3 === true){ 
    echo "success".$query; 
} 

else { 
    echo "failed"; 
}?> 

So können Sie die MySQL-Abfrage mit Variable sehen, und ich gab es an den mysql_query zu initialisieren. Und diese Abfrage überprüft die Benutzerberechtigung ($ v1, $ v2) in der Datenbank. Und wenn die Anmeldeinformationen des Benutzers dann Erfolg wird Echo auf dem Display sonst fehlgeschlagen sein.

Aber ich sehe nur auf meinem Bildschirm fehlgeschlagen. Also, was ist der Grund? Ich weiß, dass es viele Codes im Internet gibt, aber ich möchte meine eigenen

Ist die Abfrage korrekt? Oder etwas anderes.

Ich weiß, dass es viele Fehler in meinem PHP-Code gibt. Deshalb komme ich hierher.

Bitte beantworten Sie es mit Klarstellung.

Danke, gewartet .....

+0

nur ändern, um diese '' auf '‘ $ v1'' und das '. '$ v2'.'' '$ v2'' – Rits

Antwort

1

Wenn PHP-Variable innen Doppel-String zitiert wird es als Variable behandelt werden, und es ist wird Wert stattdessen verwendet werden. Aber wenn die Variable im Inneren ist, wird eine einzelne Stringvariable in Anführungszeichen als String behandelt, nicht als Variable, daher wird sie nicht analysiert und ihr Wert wird nicht verwendet.

Also statt:

$query = "SELECT Username, Password FROM userinfo WHERE username=".'$v1'. "AND password=.'$v2'."; 

wo diejenigen $v1 und '$v2' NICHT, da sie innerhalb einzelner Strings in Anführungszeichen sind analysiert werden sollten Sie haben:

$query = "SELECT Username, Password FROM userinfo WHERE username='".$v1."' AND password='".$v2."'"; 

wo Variable nicht in der Zeichenfolge an alle. Beachten Sie, dass einfache Anführungszeichen in doppelt zitierte Strings verschoben werden.Oder auch so:

$query = "SELECT Username, Password FROM userinfo WHERE username='$v1' AND password='$v2'"; 

Wo $v1 und $v2 sind in Doppelsaiten zitiert, damit sie analysiert werden. Verwechseln Sie nicht einzelne Anführungszeichen in doppelten Anführungszeichen. Nur der erste ist wichtig - der zweite behandelt nur einen gemeinsamen Charakter. Also in meinem letzten Beispiel sind $v1 und $v2 innerhalb doppelte Anführungszeichen und einfache Anführungszeichen sind nur Zeichen, die Teil dieser Zeichenfolge sind.

Und natürlich denken über SQL-Injektionen und mindestens Escape-Werte Sie von den Benutzern sammeln, bevor sie in Ihre SQL einschließlich: „.‚$ V1‘“

$query = "SELECT Username, Password FROM userinfo WHERE username='".addslashes($v1)."' AND password='".addslashes($v2)."'"; 
+0

Hey, danke! Gut erklärt. Okay, aber ich möchte die Anmeldeinformationen in der Datenbank überprüfen. Wenn ich die gültigen Anmeldeinformationen einreiche, sollte das Echo "Found" lauten. Und ich habe in der Frage erklärt. –

+0

Diese $ v3-Variable wird Abfrageergebnisse enthalten, überprüfen Sie ihren Inhalt. Verwenden Sie z.B. print_r ($ v3); um zu sehen, was Sie dort haben (in beiden Fällen ... wenn Benutzer erkannt wird und wann nicht) und setzen Sie eine geeignete if-Anweisung in Abhängigkeit von Werten, die print_r() Ihnen gezeigt hat. – MilanG

1

Ihre Zeichenfolge zitieren falsch ist. Hier ist die korrigierte Zeile:

$query = "SELECT `username`, `password` FROM userinfo WHERE `username` = '$v1' AND `password` = '$v2'"; 

mysql_query nicht wahr auf Erfolg zurückkehrt, aber es funktioniert return false bei einem Fehler, so dass Sie auch diese Zeile müssen beheben:

if ($v3 !== false){ 

By the way:

  • Ihr Code hat schlechte SQL-Injection-Schwachstellen, damit ich hoffe wirklich, dass Sie es nie in einem echten Web-Site verwenden möchten
  • mysql_ * Funktionen sind de präzisiert, sodass Sie keinen neuen Code schreiben sollten, der von ihnen abhängig ist.
+0

Hallo @ sg- Danke dafür, aber es hat nicht so funktioniert, wie ich es will. d. Wenn ich den Benutzernamen und das Passwort eintippe ist admin: admin display echo ** found ** was ist gut, aber wenn ich die ** adminn: adminn (d. h. falsche Anmeldeinformationen) ** ** ist wieder sagt gefunden? –

+0

Es gibt keine Erwähnung von "gefunden" irgendwo in Ihrem Code. Ihre Frage bezieht sich auf eine Abfrage, die nicht ausgeführt werden kann (dh: einen Fehler erzeugt). Wenn es jetzt ausgeführt wird, aber die falschen Ergebnisse erzeugt, sollten Sie meine Antwort akzeptieren und eine weitere Frage für das neue Problem öffnen. –

+0

Oh! Ich habe vergessen, es zu akzeptieren. Dann sollte ich ein anderes Thema erwähnen? –

1

Versuchen Sie dieses:

<?php 
define ('DB_HOST', '127.0.0.1'); 
define ('DB_NAME', 'sqltest'); 
define ('DB_USER', 'sqltest'); 
define ('DB_PASSWORD', 'sqltest'); 

$conn=mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die ("failed to connect to db". mysql_error()); 

$db=mysql_select_db (DB_NAME, $conn) or die ("failed to connect to db". mysql_error()); 

[email protected]$_POST['username']; 

[email protected]$_POST['password']; 

$query = "SELECT Username, Password FROM userinfo WHERE username='$v1' AND password='$v2'"; 
$v3 = mysql_query($query); 

if ($v3){ 
    echo "success"; 
} 

else { 
    echo "failed"; 
} ?> 
Verwandte Themen