2016-10-21 2 views
1

Also ich diese einfache Abfrage auszuführen versuchte:Einfache MySql-Abfrage funktioniert nicht in php

SELECT * 
FROM users 
WHERE Username = 'xyz' 
AND OS = 'Windows 10/Server 2016' 
AND HWID = 'FFrWkNSa1l3TURjek1FWXdNUT09' 
AND MACAddress = '33D255CCFDAD' 

Das ist, was ich neben vielen anderen versucht:

$q1 = "SELECT * FROM users WHERE Username = '".urldecode($_GET['userName'])."' AND OS = '".urldecode($_GET['OS'])."' AND HWID = '".$HWID."' AND MACAddress = '".$mac."'"; 
$systemMatches = $mysqli->query($q1); 
if($systemMatches->num_rows == 1) 
{ 
echo"Valid System"; 
}else{ 
echo"Invalid System"; 
} 

alle Variablen ergriffen werden beeing aus der URL-Parameter und 100% CORRECT (Ich habe dreifach überprüft.)

Vielleicht ist etwas mit der Variablen OS ... falsch? Dies ist die rohe Version des Betriebssystems: Windows% 2010/Server% 202016.

Wie Sie sehen können, enthält es 2x Leerzeichen. Ich habe die Leerzeichen mit urldecode() behandelt. Ich habe sogar per Echo gecheckt und die Räume perfekt dekodiert: Windows 10/Server 2016. Aber immer noch etwas nicht funktioniert, würde jede Art von Hilfe zu schätzen wissen, da ich ziemlich neu für MySQL bin, danke!

PS: Diese Abfrage funktioniert gut, wenn in phpmyadmin mit den gleichen Variablen ausgeführt wird.

AKTUALISIERT CODE - STILL DRUCK: INVALID SYSTEM :(

$userName = $mysqli->real_escape_string($_GET['userName']); 
    $OS = $mysqli->real_escape_string($_GET['OS']); 
    $HWID = $mysqli->real_escape_string($_GET['HWID']); 
    $mac = $mysqli->real_escape_string($_GET['mac']); 

    $q1 = "SELECT * FROM users WHERE Username = '".$userName."' AND OS = '".$OS."' AND HWID = '".$HWID."' AND MACAddress = '".$mac."'"; 
    $systemMatches = $mysqli->query($q1); 
    if($userExists->num_rows == 1) 
    { 
    if($systemMatches->num_rows == 1) 
    { 
    echo"Valid System"; 
    }else{ 
    echo"Invalid System"; 
    } 
+2

Sie könnten damit beginnen, die Fehlerbehandlung zur MySQL-Abfrage hinzuzufügen, nur für den Fall, dass ein MySQL-Fehler vorliegt. – Shadow

+1

Echo Ihre Abfrage, um sicherzustellen, dass es das ist, was Sie denken, und führen Sie das in der Konsole aus. Da Sie mysqli verwenden, verhindern Sie die SQL-Injektion, indem Sie vorbereitete Anweisungen mit bind_param verwenden. – aynber

+0

Ich wiederholte sogar meine Abfrage, es ist genau die gleiche Abfrage wie oben beschrieben. Alle Parameter sind korrekt, aber ich bekomme immer noch "ungültiges System" :(Danke noch mehr Vermutungen? – Noob02017

Antwort

1

Zunächst einmal brauchen Sie nicht zu "urldecode" manuell, wenn der Wert in von $_GET kommt dann kümmert sich um alle php nehmen die Decodierung, wenn Sie den Wert Zugriff mit $_GET['xyz'].

auch sein das Entkommen, die das Problem zu schaffen kann, so verwenden nur

... 

$userName = $mysqli->real_escape_string($_GET['userName']); 
$os = $mysqli->real_escape_string($_GET['OS']); 

$q1 = " SELECT * FROM users WHERE Username = '". $userName ."' AND OS = '". $os ."' AND HWID = '".$HWID."' AND MACAddress = '".$mac."' 
     LIMIT 1 "; 
... 
+0

Danke. Php hat sich nicht um die Decodierung gekümmert. Die rohe Variable OS, wenn Echo mit 2x 20% gedruckt. – Noob02017

+0

escape_string half auch nicht. Noch mehr Vermutungen? Danke. – Noob02017

+1

nvm es tatsächlich tat, kümmert sich um Decodierung lol danke, aber die Abfrage funktioniert immer noch nicht :( – Noob02017

Verwandte Themen