2017-07-18 7 views
0

Ich habe versucht, Daten in die Datenbank mit Ajax und PHP einfügen. Ich habe jedoch keine Ahnung, warum es nicht funktioniert. Ich habe die HTML-Datei getestet, alle Artikel, Kategorie, Preis sind gültig und die PHP-Datei gibt mir "Erfolg" nur die Daten in die Datenbank eingefügt ist leer.AJAX-Anfrage funktioniert, aber keine Daten in die Datenbank eingefügt

$(document).ready(function(){ 
    var url = "http://domain/addProduct.php?callback=?"; 

    $("#addProduct").click(function() { 
    var itemName = $("#itemName").val(); 
    var category = $("#select_category").val(); 
    var price = $("#price").val(); 
    var dataString = "$itemName=" + itemName + "&category=" + category + "&price=" + price + "&addProduct="; 

    if ($.trim(itemName).length > 0 & $.trim(category).length > 0 & $.trim(price).length > 0) { 
     $.ajax({ 
     type: "POST", 
     url: url, 
     data: dataString, 
     crossDomain: true, 
     cache: false, 
     beforeSend: function() { 
      $("#addProduct").val('Connecting...'); 
     }, 
     success: function(data) { 
      console.log(data); 
      if (data == "success") { 
      alert("Successfully add item"); 
      } else if(data="failed") { 
      alert("Something Went wrong"); 
      } 
     } 
     }); 
    } 
    return false; 
    }); 
}); 
<?php 
    header("Access-Control-Allow-Origin: *"); 

    require("config.inc.php"); 

    $name = mysql_real_escape_string(htmlspecialchars(trim($_POST['itemName']))); 
    $category = mysql_real_escape_string(htmlspecialchars(trim($_POST['category']))); 
    $price = mysql_real_escape_string(htmlspecialchars(trim($_POST['price']))); 
    $date = date("d-m-y h:i:s"); 

    $statement = $pdo->prepare("INSERT INTO product(name, category, price, date) VALUES(:name, :category, :price, :date)"); 
    $statement->execute(array(
    "name" => $name, 
    "category" => $category, 
    "price" => $price, 
    "date"=>$date 
)); 

    if($statement) 
    { 
    echo "success"; 
    } 
    else 
    { 
    echo "failed"; 
    } 
?> 
+0

erhalten Sie einen Fehler? –

+0

Sie müssen die Variablen nicht ausschließen, wenn Sie eine vorbereitete Anweisung verwenden. Und Sie können 'mysql_XXX'-Funktionen nicht verwenden, wenn Sie PDO verwenden. – Barmar

+0

Es gibt auch keinen Grund, 'htmlspecialchars()' beim Einfügen in die DB zu verwenden. Das sollte nur bei der Anzeige auf einer Webseite verwendet werden, um XSS zu verhindern. – Barmar

Antwort

0

ersetzen diesen Code:

dataString="$itemName="+itemName+"&category="+category+"&price="+price+"&addProduct="; 

zu:

dataString="itemName="+itemName+"&category="+category+"&price="+price+"&addProduct="; 

und diesen Code ersetzen zu:

if($.trim(itemName).length>0 & $.trim(category).length>0 & $.trim(price).length>0) 

zu:

if($.trim(itemName).length>0 && $.trim(category).length>0 && $.trim(price).length>0) 

Da & ein bitweiser Operator ist Aber & & ist Logischer Operator, also in diesem Zustand verwenden wir immer logischen Operator.

0

Sie nicht date als Tabellenspalte verwenden können. date ist ein vordefiniertes/reserviertes Schlüsselwort. Ändern Sie den Namen Ihrer Datumsspalte in Ihre Datenbank und ändern Sie Ihre sql query und versuchen Sie es erneut.

+0

tatsächlich ist mein Datumsformat String, so dass es jetzt funktioniert, die Lösung ist ersetzen "$ itemName =" in der Datenfolge zu "itemName =", aber ich weiß nicht warum –

+0

Weil Sie Ihren 'itemname' bekommen in Ihrer PHP-Datei mit '$ _POST ['itemname'];' und in Ihrer Ajax-Anfrage deklarieren Sie '$ itemname'. –

+0

ok, danke aber für die" & addProduct = "in der Datenkette, ist es auch notwendig? Ich bin nicht vertraut mit diesem –

Verwandte Themen