2016-05-09 5 views
-2

Ok, so dass meine einfügen sollte in Ordnung sein, aber gibt false zurück, $ quote hält Wert, den ich überprüft habe. und meine Datenbank ist here Hope ein anderes Paar Augen kann dies erkennen. Ich habe den gleichen Insert-Stil für die anderen PHP-Dateien verwendet, funktioniert gut. Aber dieses ist knifflig ... issit wegen der Fremdschlüssel?php insert-Anweisung hat die richtigen Argumente, aber insert gibt false zurück

<?php 

$quote = $_POST["quote"]; 
require "init.php"; 

$query = "INSERT INTO `quote`(`quote_description`) VALUES('".$quote."');"; 
$result = mysqli_query($con,$query); 


//"INSERT INTO `quote`(`quote_description`) VALUES ('".$quote."');"; 

if($result) 
{ 
    $response = array(); 
    $code = "submit_true"; 
    $message = "Quote success, Click Ok to continue"; 
    array_push($response,array("code"=>$code,"message"=>$message)); 
    echo json_encode(array("server_response"=>$response)); 


} 

else{ 
    $response = array(); 
    $code = "submit_false"; 
    $message = "Sorry, some server error occurred, please try again"; 
    array_push($response,array("code"=>$code,"message"=>$message)); 
    echo json_encode(array("server_response"=>$response)); 


} 
mysqli_close($con); 

?> 

Ich erhalte den folgenden Fehler nach Fehler zu überprüfen:

kann nicht hinzugefügt oder ein Kind Zeile aktualisieren: ein Fremdschlüssel fehlschlägt (mydb.quote, CONSTRAINT fk_quote_user FOREIGN KEY (user_id) LITERATUR user (user_id) ON LÖSCHEN KEINE AKTION BEI AKTUALISIERUNG KEINE AKTION)

+2

Konsultieren Sie diese folgenden Links http://php.net/manual/en/mysqli.error.php und http://php.net/manual/en/function.error-reporting.php und wenden Sie diese an Ihre Code; Du machst das nicht. Außerdem gibt es ein paar Unbekannte hier; wenn das POST-Array einen Wert und die MySQL-API enthält, mit der eine Verbindung hergestellt wird. –

+0

Wenn '$ quote' zum Beispiel ein Zitat' '' enthält, werden Sie sql selbst injizieren. Sie sollten stattdessen eine vorbereitete Anweisung verwenden. – jeroen

+0

'$ con' ist undefiniert, oder? – Michael

Antwort

0

Wenn Sie INSERT in MySQL verwenden, müssen Sie alle Spalten und Werte einfügen, die eingefügt werden sollen. Versuche dies;

$query = "INSERT INTO quote(quote_id, quote_description, quote_points, user_id, Quote_of_day_id) VALUES(NULL, '".$quote."', '".$points."', '".$user_id."', '".$qod_id."');"; 

Wenn Sie nicht alle Werte zur Zeit für diese Abfrage eingefügt haben, setzen Sie sie einfach auf nichts. So fügen Sie später Werte UPDATE verwenden:

$query = "UPDATE quote SET user_id = 8 WHERE quote_id = 6"; 

Obwohl dies eine Lösung für das Einfügen ist, ist es unsicher und anfällig für sql injection. Hier ist die bessere objektorientierte Lösung, die sicherer ist, und ich schlage vor, es vor allen anderen unsicheren einschleifen:

$db = new mysqli($host, $user, $pass, $database); 
$stmt = $db->prepare('INSERT INTO quote(quote_id, quote_description, quote_points, user_id, Quote_of_day_id) VALUES(?, ?, ?, ?, ?);'); 
$stmt->bind_param('isiii', $quote_id, $quote, $points, $user_id, $qod_id); 

$stmt->execute(); 

Auch ist es eine gute Idee, dies fügen Sie Ihre POST-Daten zu handhaben:

if(!isset($_POST["quote"])) { 
    echo "Data not received correctly"; 
    exit(); 
} 

Hoffe, diese Beispiele helfen Ihnen. Wünsche Ihnen das Beste.

+0

Ich werde mich weiter mit deinen Beispielen befassen, in der Tat ist das wirklich eine große Hilfe. Danke :) –

+0

Froh, zu helfen. Danke @BowieChang –

+1

geschafft, es zu tun. Danke Kumpel und der Rest von euch auch. Entschuldigung, wenn ich ein bisschen Anfänger schien, bin ich. Neu im Coding sowie im Stack-Overflow. Hoffe, weiterhin mit euch allen zu arbeiten! Prost. –