2016-08-09 2 views
-3

Ich habe ein paar Probleme und es sieht so aus, als ob ich keinen Weg finden kann, um es zu umgehen. Ich habe versucht, Isset für jede POST-Daten zu verwenden, aber während es alle Probleme lösen würde, werden die Daten nicht hinzugefügt. Ich überlasse Ihnen den HTML-Code und PHP, vielleicht können Sie mir helfen, diesen Code zu debuggen.undefined Index beim Senden von POST-Daten

adm_prod.php (die HTML-Seite, die die Form Griffe)

  <form method="POST" action="includes/prod-add.php"> 
    Product Name<br> 
    <input type="text" name="Name"><br> 
    Price:<br> 
    <input type="number" name="Price"><br> 
      Product Description<br> 
      <input type="text" name="Description"><br> 
      Photo<br> 
      <input type="file" name="Photo"><br> 
      </br> 
      <button name="submit">Add Product</button> 

</form> 

prod-add.php (php-Datei, die das Einfügen Griffe/Validierung info)

<?php 
include 'databaseConnection.php'; 

$name = $_POST['Name']; 
$price = $_POST['Price']; 
$description = $_POST['Description']; 
$target_dir = "images-uploads/"; 
$target_file = $target_dir . basename($_FILES['Photo']['name']); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 

if(isset($_POST['submit'])) { 
    $check = getimagesize($_FILES['Photo']['tmp_name']); 
    if($check !== false) { 
     $uploadOk = 1; 
    }  else { 
     echo "The File Is not an image"; 
     $uploadOk = 0; 
    } 
} 

if(file_exists($target_file)) { 
    $filename = $_FILES['Photo']['name']; 
    $extension = end(explode(".",$filename)); 
    $name = rand(pow(10, 7), pow(10, 8)-1); 
    $newfilename = $name . "." .$extension; 
    $uploadOk = 1; 
    echo "Image already exists. Image Name changed to " . $newfilename; 
} 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") { 
$uploadOk = 0;  
echo "Sorry, only JPG, PNG and JPEG are accepted"; 
} 



if ($uploadOk == 0) { 
    echo " Sorry, your product was not added, please check the error"; 
    $fileupload = 0; 

} else { 
    if (move_upload_file($_FILES['Photo']['tmp_name'], $target_file)) { 
     $fileupload = 1; 
     $imagePath = basename($_FILES['Photo']['name']) . "." . $imageFIleType; 
     } 
} 

if($fileupload == 1) { 

    $addProd = "INSERT INTO meniu (name, price, description, path) VALUES ('$name','$price','$description','$imagePath')"; 


    if ($conn->connect_error) { 
     die("Connection Failed: " . $conn->connect_error); 
    } 

    if ($conn->query($addProd) == TRUE) { ?> 
<script> 
    window.alert("Product: <?php echo $name; ?> has been added successfully "); 
    </script> 


    <?php } else { ?> 
     <script> 
      window.alert("Error: <?php echo $conn->error; ?>"); 
     </script> 
    <?php } 

} 

?> 

Es tut mir leid, wenn der Code nicht sehr klar ist, lerne ich immer noch PHP. Normalerweise habe ich kein Problem, aber es ist das erste Mal, dass ich Bildupload verwende. Grundsätzlich, in der Datenbank möchte ich Name, Beschreibung, Preis, Foto Pfad vorstellen. Der Pfad sollte etwas wie ../uploads/photoname.extension sein. Danke für Hilfe.

+0

Was ist der Fehler wieder? –

+0

Entschuldigung, vergessen, den Fehler zu verknüpfen. Hier ist es: http://vvcap.com/E5eeEQAlvEO –

+1

** WARNUNG **: Die Verwendung von manueller Escaping ist extrem fehleranfällig und ein einzelner Fehler kann zu einem lähmenden [SQL injection bug] führen (http: // bobby-tables. com /). Wann immer möglich, verwenden Sie ** vorbereitete Aussagen **. Diese sind ziemlich einfach in [mysqli'] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [PDO] (http://php.net/manual/ en/pdo.prepared-statements.php) wo alle vom Benutzer angegebenen Daten mit einem '?' oder ': name'-Indikator angegeben werden, der später mit' bind_param' oder 'execute' gefüllt wird, je nachdem, welchen du verwendest. – tadman

Antwort

0

Der Fehler wird verursacht, wenn das Formular übermittelt wird, ohne zuerst alle Felder zu füllen. Sie müssen also überprüfen, ob die $_POST Variablen gesetzt sind, indem Sie zuerst prüfen, ob das Formular übergeben wurde.

Fügen Sie diese auch zu Ihrem form Tag in htmlenctype="multipart/form-data" hinzu.

$name=$price=$description=""; 
if($_SERVER['REQUEST_METHOD']=="POST") { 
//if the form has been submitted, initialize the values. 

$name = $_POST['Name']; 
$price = $_POST['Price']; 
$description = $_POST['Description']; 
$target_dir = "images-uploads/"; 
$target_file = $target_dir . basename($_FILES['Photo']['name']); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 
: 
//rest of the code 
: 
} 

Innerhalb dieser Kontrolle, ob die Datei wurde mit ihm hochgeladen:

if(isset($_POST['submit']) && isset($_FILES['Photo'])) { 
$check = getimagesize($_FILES['Photo']['tmp_name']); 
} 

den gesamten Prozess innerhalb der if Anweisung kapseln.

auch, wie Tadman gesagt, verwenden Sie parametrisierte Abfragen Prepared Statements oder PDO in Ihrer MySQL-Abfragen mit.

+0

immer noch undefined index Foto und Warnung: getimagesize(): Dateiname darf nicht leer sein –

+0

@CojocariCristian Ich habe meine Antwort aktualisiert, überprüfe sie jetzt. –

+0

http://vvcap.com/EDOitICgbWT eine weitere Reihe von Fehlern, auch ich aktualisiert von move_upload_file() zu move_uploaded_file() als zweite die richtige Syntax ist. Der Grund, warum ich es verwendet habe, ist zu überprüfen, ob die Datei erfolgreich hochgeladen wurde und wenn ja, fange an, Daten einzufügen. –