2017-01-05 7 views
0

Ich habe einige Probleme, diese Abfrage zu bekommen, um richtig zu sterben. Ich verwende ein HTML-Formular, um nach Daten in einer Tabelle zu suchen. jetzt, wenn die Daten vorhanden sind, funktioniert die Abfrage einwandfrei und zeigt alles an, was ich auch brauche. Aber wenn ich weiß, dass die Daten nicht existieren, benutze ich den Würfel in meinem Code. Ich möchte, dass "Error get data please search again" angezeigt wird, aber nicht. Alles tut nichts, absolut nichts! Können Sie Fehler innerhalb des Codes sehen? Ich kann die ganze HTML-Datei hochladen, wenn es nötig ist. Ich habe es stundenlang angeschaut und angefangen, ein bisschen verrückt zu werden!PHP-Abfrage nicht richtig

Dank
if (isset($_POST['submitted'])) { 

    $category = $_POST ['category']; 
    $criteria = $_POST ['criteria']; 

    $query = "SELECT g.GameID, g.GameName, g.PubID, g.TimePeriodID, g.SettingID, g.MoodID, g.GameWeaponID, g.GameCameraAngleID, g.GamePlayerTypeID, g.GameDescription FROM GameTable g WHERE $category = '$criteria'"; //selecting all the data from the game table that makes the search criteria 
    $result = mysqli_query($dbcon, $query) or die("Error getting data please search again"); 

    echo "<table class='col-md-12'>"; // displays the searched data as a table 


    while ($row = mysqli_fetch_array($result)) { 

     echo "<form class=col-md-6 action=searchgame.php method=post>"; 
     echo "<tr> <th> Game ID</th> </tr>"; 
     echo "<tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gameid readonly=readonly value=" . $row['GameID'] . " </td> <br>"; //here i have made the game Id read only so that it is not editable by the administrator 
     echo "<tr> <th> Game Name</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gamename value=" .$row['GameName'] . " < /td> <br>"; // editable boxes so administator can update 
     echo "<tr> <th> Publisher ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=pubid value=" . $row['PubID'] . " < /td><br>"; 
     echo "<tr> <th> Time Period ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=timeperiodid value=" . $row['TimePeriodID'] . " < /td><br>"; 
     echo "<tr> <th> Setting ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=settingid value=" . $row['SettingID'] . " < /td> <br>"; 
     echo "<tr> <th> Mood ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=moodid value=" . $row['MoodID'] . " < /td><br>"; 
     echo "<tr> <th> Weapon ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gameweaponid value=" . $row['GameWeaponID'] . " < /td><br>"; 
     echo "<tr> <th> Camera Angle ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gamecameraangleid value=" . $row['GameCameraAngleID'] . " < /td><br>"; 
     echo "<tr> <th> Player ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gameplayertype value=" . $row['GamePlayerTypeID'] . " < /td><br>"; 
     echo "<tr> <th> Game Description</th> </tr>"; 
     echo "<td>" . "<textarea style=height:200px;width:300px; class=text-black type=text name=gamedescription value=>" . $row['GameDescription'] . "</textarea><br>"; 
     echo "<td>" . "<input type=hidden name=hidden value=" . $row['GameID'] . " </td>"; 

     echo "<td>" . "<input class=text-black input-button-rounded type=submit name=update value=Update" . " </td>"; //update button 
     echo "<td>" . "<input class=text-black input-button-rounded type=submit name=delete value=Delete" . " </td>"; //delete button 
     echo "</tr>"; 
     echo"</form>"; 

    } 

    echo "</table>"; 
} 
?> 
+2

Dann erhalten Sie den echten Fehler mysqli_error ($ dbcon) ' –

+0

auch die Abfrage und in mysql direkt ausführen ... – Naga

+0

** WARNUNG **: Wenn Sie mysqli verwenden Sie sollten [parametrisierte Abfragen] (http : //php.net/manual/de/mysqli.quickstart.prepared-statements.php) und ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php) Hinzufügen von Benutzerdaten zu Ihrer Abfrage ** Verwenden Sie NICHT ** String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie einen schwerwiegenden [SQL injection bug] erstellt haben (http://bobby-tables.com/). ** NIEMALS ** $ _POST 'oder' $ _GET' Daten direkt in eine Abfrage einfügen, es kann sehr schädlich sein, wenn jemand versucht, Ihren Fehler auszunutzen. – tadman

Antwort

0

„Ich habe einige Mühe, diese Abfrage immer zu‚sterben‘richtig. Ich bin ein HTML-Formular für Daten in einer Tabelle zu suchen. Jetzt, wenn die Daten, die die Abfrage funktioniert existieren perfekt anzeigen alles, was ich brauche, aber wenn ich weiß, dass die Daten nicht existieren mit dem Würfel in meinem Code Ich möchte es anzeigen "Fehler beim Abrufen von Daten bitte erneut suchen", aber es nicht. Alles tut nichts, absolut nichts ! "

Nach der Frage über ein paar weitere Male lesen, haben zu dem Schluss gekommen, dass die if{...}, was Sie brauchen, ist eine else {...} Erklärung für.

"Können Sie Fehler innerhalb des Codes sehen?"

A: Nein. Sie brauchen nur eine else{...} zu verwenden.

Wenn jedoch Ihre Abfrage zu einem bestimmten Zeitpunkt fehlschlagen sollte, sollten Sie den tatsächlichen Fehler mit mysqli_error() überprüfen.

Edit:

brauche ich zu behaupten, dass der Code in eine SQL-Injektion geöffnet ist.

Verwenden Sie eine vorbereitete Anweisung.

Referenzen:

und auf PHP.net:

+0

Das habe ich von der Frage bekommen. Wenn ich falsch liege oder die Frage falsch interpretiere, lass es mich wissen und ich werde sie löschen. –

+0

Nun, ich war technisch korrekt, nur nicht die Lösung, die der OP gesucht hat. ArtisticPhoenix war die eigentliche Lösung. –

3

Dies ist der Schlüssel Teil auf Ihre Frage

aber wenn ich die Daten wissen nicht

Der Grund sterben nicht alles tun existiert ist die Abfrage völlig in Ordnung vervollständigt , nur ohne Ergebnisse.

versuchen, diese stattdessen

if(!$result->num_rows) die('please search again'); 

Es gibt keine error pro sagen, nur eine leere Ergebnismenge. Mit der Eigenschaft der Ergebnismenge num_rows erhalten Sie die Anzahl der Zeilen, die mit der Suche übereinstimmen. Im Fall von 0 behandelt PHP dies als false oder ! für kurze Hand.

Die wird nur ausgeführt, wenn die Methode davor false zurückgibt, was bei der Rückgabe des Resultset-Objekts aus mysqli nicht der Fall ist.

Viele Leute vermissen-verstehen, was das bedeutet, oder wissen einfach nicht

 $result = mysqli_query($dbcon, $query) or die("Error getting data please search again"); 

dies zu diesem

 if(($result = mysqli_query($dbcon, $query)) || die("Error getting data please search again")); 

Wir überspringen entspricht in etwa nur über die, wenn die or ist ein logischer Operator, den Sie in einer if-Anweisung verwenden können. Der einzige Unterschied zur Verwendung OR oder || ist die Präzedenz in, wenn sie ausgewertet werden (oder so las ich einige wo). Ich habe in 7 Jahren nie gestellt OR in einer if-Anweisung ... lol

http://www.w3schools.com/php/php_operators.asp

 if(($result = mysqli_query($dbcon, $query)) OR die("Error getting data please search again")); 

Also alles, was gesagt, wenn die erste Bedingung in der Aussage wahr ist, weil der ODER gibt es keine muss die zweite Aussage überprüfen. Mehr ist es nicht.

+0

Ich habe die Frage vielleicht nicht vollständig verstanden. Sie können sehr gut Recht haben, aber ich interpretierte es auf eine andere Art und Weise. Ich habe einen Kommentar unter meiner Antwort gepostet. Wenn das die Lösung ist, großartig! Ich bin dafür und ich werde meine Antwort löschen. –

+1

Ja, es dauerte ein paar Mal, um das herauszufinden. Ich bin mir ziemlich sicher, dass sie nur den sterben-Befehl ausführen möchten, wenn die Ergebnisse leer sind. – ArtisticPhoenix

+0

Danke, macht jetzt total Sinn, dass ich darüber nachdenke! Jetzt erfolgreich arbeiten! –