2016-03-30 7 views
0

Ich habe zwei Schaltflächen zum Senden von Formularen in einem Formular, und ich möchte $uploaded Array in elseif() {...} wie diese $data ['pic_path'] = $uploaded; verwenden, aber es tut nicht t arbeiten. Ich kann $uploaded innerhalb von if() {...} oder innerhalb des HTML-Körpers nur ausdrucken. Was soll ich tun, um das $uploaded in $data Array zu speichern? Vielen Dank!Zugriff auf Array-Daten in elseif() {..} Bedingung von if() {...} Bedingung

Hier ist der Code:.


<?php 
if (isset($_POST[submit_image])) { 
    if (!empty($_FILES["files"]["name"][0])) { 
     $files = $_FILES["files"]; 
     //arrarys to include files uploaded successfully and failed 
     $uploaded = array(); 
     $failed = array(); 
     //access tmp_name arrary 
     foreach ($files['name'] as $position => $file_name) { 
      $file_tmp = $files["tmp_name"][$position]; 

      $file_ext = explode(".", $file_name); 
      $file_ext = strtolower(end($file_ext)); 

      $file_name_new = uniqid("", true) . "." . $file_ext; 
      $file_destination = "uploads/" . $file_name_new; 
      if (move_uploaded_file($file_tmp, $file_destination)) { 
       $uploaded[$position] = $file_destination; 
      } else { 
       $failed[$position] = "error"; 
      } 
     } 
     print_r($uploaded); 
    } 
} elseif (isset($_POST[submit_post])) { 
     $data = array(); 
     $data['comments'] = $_POST['comments']; 
     //$data ['pic_path'] = $uploaded; 
     //print_r($uploaded); 
} 
?> 

<!DOCTYPE html> 
    <head>   
    </head> 
    <body> 
     <form method="post" enctype="multipart/form-data"> 
      <input type="file" name="files[]" multiple /> 
      <input type="submit" name="submit_image"/> 
      <textarea name="comments"></textarea>   
      <button type="submit" name="submit_post">Submit Your Post</button>     
     </form>   
    </body> 
</html> 

Antwort

0

Das ist, weil $uploaded existiert nur in der if-Anweisung Sie es in deklariert Sie wieder eine Schleife über Dateien benötigen in der elseif oder Ihre Erklärung $uploaded bewegen und $failed sowie die for-Schleife, die sie aus diesem Block ausfüllt, damit die Variablen in beiden Pfaden verfügbar sind.

Bearbeiten - Versuchen Sie folgendes:

if (!empty($_FILES["files"]["name"][0])) { 
     $files = $_FILES["files"]; 
     //arrarys to include files uploaded successfully and failed 
     $uploaded = array(); 
     $failed = array(); 
     //access tmp_name arrary 
     foreach ($files['name'] as $position => $file_name) { 
      $file_tmp = $files["tmp_name"][$position]; 

      $file_ext = explode(".", $file_name); 
      $file_ext = strtolower(end($file_ext)); 

      $file_name_new = uniqid("", true) . "." . $file_ext; 
      $file_destination = "uploads/" . $file_name_new; 
      if (move_uploaded_file($file_tmp, $file_destination)) { 
       $uploaded[$position] = $file_destination; 
      } else { 
       $failed[$position] = "error"; 
      } 
     } 
     print_r($uploaded); 
    } 

if (isset($_POST[submit_post])) { 
     $data = array(); 
     $data['comments'] = $_POST['comments']; 
     $data ['pic_path'] = $uploaded; 
} 
+0

Ich habe setzen 'hochgeladen $ = array();' außerhalb des 'if() {...} elseif() {...}'. Aber 'print_r ($ uploaded)' funktioniert nur in 'if() {...}' nicht in 'elseif() {...}'. – fortrustit

+0

Ich habe meine Antwort mit Code bearbeitet, der funktionieren sollte. Probieren Sie das aus. –

+0

Vielen Dank für Ihre Bearbeitung, ich habe versucht, aber '$ data ['pic_path'] = $ hochgeladen;' Wert ist immer noch leer. Und es scheint, dass das Loswerden von 'if (iset ($ _ POST [submit_post])) {...} auch funktionieren wird. Ich weiß jedoch nicht, inwieweit dies die Formularvalidierung beeinflussen wird. Aber ich werde es in meinem vollständigen Code ausprobieren :) – fortrustit