2016-05-08 12 views
0

Ich habe ein Formular für einen Administrator erstellt, um Produktdetails hochzuladen. Alle Felder sind bis auf den Bilddateipfad korrekt gespeichert. Kann mir jemand sagen, wo ich falsch liege?PHP, hochgeladene Bild-URL wird nicht in der Datenbank gespeichert. Wo gehe ich falsch?

Das Bild wird im Bilderordner gespeichert, aber der Pfad wird nicht in der Datenbank gespeichert.

Form:

<form action="form.php" method="post" enctype="multipart/form-data" id="inventoryList" name="inventoryList"> 
<table width="90%" border="0" cellspacing="0" cellpadding="6"> 
    <tr><td width="20%" align="right"><h3>Products Table</h3></td></tr> 
    <!-- item_code --> 
    <tr> 
    <td width="20%" align="right">Item Code</td> 
    <td width="80%"><label> 
     <input name="item_code" type="text" id="item_code" size="20" /> 
    </label></td> 
    </tr> 
    <!-- item_name --> 
    <tr> 
    <td width="20%" align="right">Product Name</td> 
    <td width="80%"><label> 
     <input name="item_name" type="text" id="item_name" size="64" /> 
    </label></td> 
    </tr> 
    <!-- brand_name --> 
    <tr> 
    <td width="20%" align="right">Brand Name</td> 
    <td width="80%"><label> 
     <input name="brand_name" type="text" id="brand_name" size="20" /> 
    </label></td> 
    </tr> 
    <!-- model_number --> 
    <tr> 
    <td width="20%" align="right">Model Number</td> 
    <td width="80%"><label> 
     <input name="model_number" type="text" id="model_number" size="20" /> 
    </label></td> 
    </tr> 
    <!-- weight --> 
    <tr> 
    <td width="20%" align="right">Weight</td> 
    <td width="80%"><label> 
     <input name="weight" type="text" id="weight" size="20" /> 
    </label></td> 
    </tr> 
    <!-- dimension --> 
    <tr> 
    <td width="20%" align="right">Dimension</td> 
    <td width="80%"><label> 
     <input name="dimension" type="text" id="dimension" size="20" /> 
    </label></td> 
    </tr> 
    <!-- description --> 
    <tr> 
    <td align="right">Product Description</td> 
    <td><label> 
     <textarea name="description" id="description" cols="64" rows="5"></textarea> 
    </label></td> 
    </tr> 
    <tr> 
    <!-- category --> 
    <td align="right">Category</td> 
    <td><label> 
     <select name="category" id="category"> 
     <option value="CellPhone">Smart Phone</option> 
     <option value="Laptop">Laptop</option> 
     </select> 
    </label></td> 
    </tr> 
    <!-- quantity --> 
    <tr> 
    <td width="20%" align="right">Quantity</td> 
    <td width="80%"><label> 
     <input name="quantity" type="text" id="quantity" size="20" /> 
    </label></td> 
    </tr> 
    <tr> 
    <!-- price --> 
    <td align="right">Product Price &euro;</td> 
    <td><label> 
     <input name="price" type="text" id="price" size="12" /> 
    </label></td> 
    </tr> 
    <!-- image --> 
    <tr> 
    <td align="right">Product Image</td> 
    <td><label> 
     <input type="file" name="imagename" id="imagename" /> 
    </label></td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td><label> 
     <input type="submit" name="submit" id="submit" value="Add This Item Now" /> 
    </label></td> 
    </tr> 
</table> 

PHP Script:

if(isset($_POST['submit'])){ 
    $random_name = rand(); 
    $sql1="INSERT INTO products 
    (item_code, item_name, brand_name, model_number, weight, dimension, description, category, quantity, price, imagename) 
    VALUES 
    ('$_POST[item_code]','$_POST[item_name]','$_POST[brand_name]', 
    '$_POST[model_number]', '$_POST[weight]', '$_POST[dimension]', '$_POST[description]','$_POST[category]', 
    '$_POST[quantity]','$_POST[price]', '$_POST[imagename]')"; 

    mysqli_query($connect,$sql1); 

    move_uploaded_file($_FILES['imagename']['tmp_name'], "../images/$random_name.jpg"); 
    header("location: inventory.php"); 
    exit(); 
} 

Bild zeigt fehlende Dateipfad:

enter image description here

+2

Haben Sie den Wert von $ _POST überprüft [ 'imagename'] vor dem Einsetzen? Sie verwenden $ _FILES ['ImageName'] danach! Übrigens sollten Sie vorsichtig sein, da Ihre INSERT-Anweisung ziemlich anfällig für SQL-Injektionen ist. Ich nehme an, dass Sie nur testen, aber versuchen, die Verwendung eines Poster-Werts direkt in einer Abfrage zu vermeiden. – zoubida13

Antwort

1

$ _POST [Bildname] existiert überhaupt nicht, weil das Bild nicht in der $ _POST Variable aber im $ _FILES Variable ist.

So haben Sie anders diese ein wenig zu tun, wie so:

<?php 
     if(isset($_POST['submit'])) { 
      $random_name = rand(); 
      $sql1  = "INSERT INTO products 
         (item_code, item_name, brand_name, model_number, weight, dimension, description, category, quantity, price, imagename) 
         VALUES 
         ('$_POST[item_code]','$_POST[item_name]','$_POST[brand_name]', 
         '$_POST[model_number]', '$_POST[weight]', '$_POST[dimension]', '$_POST[description]','$_POST[category]', 
         '$_POST[quantity]','$_POST[price]', "; //'$_POST[imagename]') 

      //FIRST UPLOAD THE IMAGE AND IF THAT WORKS; THEN ADD THE IMAGE URL TO YOUR QUERY: 
      if(move_uploaded_file($_FILES['imagename']['tmp_name'], "../images/$random_name.jpg")){ 
       // APPEND THE IMAGE URL TO THE QUERY & EXECUTE IT 
       $sql1 .= "../images/{$random_name}.jpg" . ")"; 
       mysqli_query($connect, $sql1);   
      } 
      header("location: inventory.php"); 
      exit(); 
     } 
+0

Dieser Beitrag klingt wie das OP sollte nur '$ _FILES' statt' $ _POST' verwenden (nur in der Beschreibung des Codes, nicht das eigentliche Snippet). Dies ist nicht der Fall, da das OP den neuen Dateinamen mit der Variable $ zufällige_Name erstellt. – Toastrackenigma

+0

@ Toastrackenigma Hätten Sie etwas dagegen, mehr Licht zu verlieren? Sein Code ist relativ in Ordnung (wie Sie sehen können) Ich habe gerade gesehen, dass er $ _POST ['Bildname'] gemacht hat, während das Bild von $ _FILES Global kommt. Vielleicht hätte ich es anders umformulieren sollen; Ich würde mich freuen, wenn Sie mich aufklären könnten, was ich geschrieben, gesagt oder falsch gemacht habe. Danke im Voraus. – Poiz

0

Das Problem ist, mit dem Wert, den Sie versuchen, in die Datenbank einzufügen.

Sie können nicht $_POST["imagename"] einfügen, wie es nicht existieren. Sie haben den Image-Namen nicht zusammen mit dem Rest des Formulars mit dem Superglobal $_POST gepostet, sondern stattdessen mit dem Code oben im Snippet, $random_name = rand().

Sie müssen also das Ergebnis von , dass in Ihre Datenbank einfügen, nicht $_POST["imagename"].

Hier ist Ihre neue INSERT INTO Aussage:

$random_name = rand(); 
$sql1="INSERT INTO products 
(item_code, item_name, brand_name, model_number, weight, dimension, description, category, quantity, price, imagename) 
VALUES 
('$_POST[item_code]','$_POST[item_name]','$_POST[brand_name]', 
'$_POST[model_number]', '$_POST[weight]', '$_POST[dimension]', '$_POST[description]','$_POST[category]', 
'$_POST[quantity]','$_POST[price]', '$random_name')"; 
0

Sie haben nicht den „Bildnamen Punkt“ in dem post Array, weil Sie es wie eine Datei gesendet.

Try this:

if(isset($_POST['submit'])){ 

    $random_name = rand(); 
    $file_name = "../images/$random_name.jpg"; 

    $sql1="INSERT INTO products 
(item_code, item_name, brand_name, model_number, weight, dimension, description, category, quantity, price, imagename) 
VALUES 
('$_POST[item_code]','$_POST[item_name]','$_POST[brand_name]', 
'$_POST[model_number]', '$_POST[weight]', '$_POST[dimension]', '$_POST[description]','$_POST[category]', 
'$_POST[quantity]','$_POST[price]', '$file_name')"; 

    mysqli_query($connect,$sql1); 

    move_uploaded_file($_FILES['imagename']['tmp_name'], $file_name); 

    header("location: inventory.php"); 
    exit(); 
} 
Verwandte Themen