2017-05-06 1 views
-2

Entschuldigung für vagen Titel. Ich habe derzeit ein Bearbeitungsformular, in dem ein Produkt ausgewählt werden kann und die Details in einer Form angezeigt werden, in der sie bearbeitet werden können. Leider wird bei der Bearbeitung jedes Produkt in der Produkttabelle bearbeitet und nicht nur das ausgewählte Produkt. So wählen Sie das Produkt, das ich bin mit dem Produktnamen = productnameinput etc etc (Code unten)Abfrage aktualisieren alle Datensätze, anstatt aufzeichnen, welche Eingabe übereinstimmt?

Datenbank: http://prnt.sc/f4tf5g (Vor einem edit)

folgendes versuchte das Hinzufügen WHERE-Anweisungen am Ende der Update-Abfrage:

UPDATE product SET CategoryID = :newCatId, ProductName = :newProdName, ProductDescription = :newProdDesc, stockCount = :newStock WHERE product.ProductName = :prodname 

UPDATE product SET CategoryID = :newCatId, ProductName = :newProdName, ProductDescription = :newProdDesc, stockCount = :newStock WHERE ProductName = :prodname 

PHP:

// edit product in database 
$query=" 
    SELECT * FROM category 
"; 
$result = $DBH->prepare($query); 
$result->execute(); 
$categories = $result->fetchAll(); 
//we need to select all products frist 
$query3 = " 
    SELECT * FROM product 
"; 
$result3 = $DBH->prepare($query3); 
$result3->execute(); 
$allProducts = $result3->fetchAll(); 

//When the Product is selected this function is run 
    if (isset($_POST['choose'])) { 
    $query2 = " 
     SELECT product.*, category.* FROM product LEFT JOIN category ON category.CategoryID = product.CategoryID WHERE product.ProductName = :prodname 
    "; 
    $result2 = $DBH->prepare($query2); 
    $result2->bindParam(':prodname', $_POST['product_name']); 
    $result2->execute(); 
    $product = $result2->fetch(); 
    } 
    //When the Update button is Pressed 
    if (isset($_POST['update'])) { 
     $query4 = " 
     UPDATE product SET CategoryID = :newCatId, ProductName = :newProdName, ProductDescription = :newProdDesc, stockCount = :newStock WHERE product.ProductName = :prodname 
     "; 
     $result4 = $DBH->prepare($query4); 
     $result4->bindParam(':newCatId', $_POST['newcategory']); 
     $result4->bindParam(':newProdName', $_POST['productName']); 
     $result4->bindParam(':newProdDesc', $_POST['productDescription']); 
     $result4->bindParam(':newStock', $_POST['stockCount']); 
     $result4->bindParam(':prodname', $_POST['product_name']); 

     $result4->execute(); 

    } 
+2

Sie benötigen eine 'where' Klausel über die' update'. – chris85

+0

Versuchen Sie das jetzt, danke. Wird die Frage aktualisieren, wenn es nicht erfolgreich ist, aber ich denke, Sie haben Recht – Xander

+0

@ chris85 Ziemlich sicher, dass Sie Recht haben, aber ich bekomme immer noch Fehler, ich habe meine Frage aktualisiert. Sollte ich $ post Produktname usw. einschließen? – Xander

Antwort

-1

Ihre Aktualisierungsabfrage muss implizit WHERE für die Aktualisierung definieren.

Derzeit aktualisieren Sie nur die Spalten für jeden Eintrag, da ein bestimmter Eintrag nicht definiert ist.

Etwas wie folgt aus:

UPDATE product 
SET categoryid = :newCatId, 
     productname = :newProdName, 
     productdescription = :newProdDesc, 
     stockcount = :newStock 
WHERE id = :product_id_to_edit; 
-1

Sie gesamte Tabelle aktualisieren, wird es nicht in Ihrem Update filtern

$query4 = " 
    UPDATE product SET CategoryID = :newCatId, ProductName = :newProdName, ProductDescription = :newProdDesc, stockCount = :newStock 
    "; 
Verwandte Themen