2015-08-17 3 views
0

Я добавляю имя и изображение документа в базу данных через PHP.
Имя вставлено, но загруженное изображение не вставлено после третьего, а не следующего цикла или массива.PHP цикл после третьего ввода файла не добавлен в массив?

Пожалуйста, скажите мне, если это петля или массив или запрос, который является неправильным.

Вот мой код:

$stock_no = $_POST["txt_stock_no"]; //hidden input 
$doc_name = $_POST["chk"]; 
$doc_file = $_FILES["doc_file"]["name"]; 
$doc_tmp_name = $_FILES["doc_file"]["tmp_name"]; 
$add_by=charEsc($_SESSION["User_ID"]); 

foreach ($doc_name as $value => $b) { 
    $image_new = md5(uniqid(mt_rand(), true)); 
    $ext = end(explode(".", $doc_file[$value])); //gets extension 

    move_uploaded_file($doc_tmp_name[$value],"assets/documents/" .$image_new."-".$stock_no.".".$ext); 

    $rep = query("INSERT INTO documents (`stock_no`, `Document_Name`, `Document_Upload`) Values ('$stock_no','$doc_name[$value]','assets/documents/" .$image_new."-".$stock_no.".".$ext."')"); 
} 
+1

Пожалуйста переформулировать ваш вопрос. Неясно, что работает и что не работает. Я могу обнаружить по крайней мере две вещи в коде: 1) отсутствует '}' и 2) '$ doc_name' получается из' $ _POST' и является строкой. Вы не можете использовать строку в 'foreach' так, как вы ее здесь представляете. –

+0

после вашего редактирования: это полный код? Поскольку часть 'foreach ($ doc_name as $ value => $ b)' действительно должна давать предупреждение PHP и (особенно, если не знать значение wat '$ doc_name'), вероятно, никогда не запустит цикл. Что вы ожидаете от типа и значения '$ doc_name'? –

+0

еще одна вещь для проверки: какой максимальный размер выгрузки? Это зависит не только от скрытого поля MAX_FILE_SIZE в форме (я полагаю, вы используете это? На самом деле это необходимо), но также и в настройках параметров php.ini и, возможно, на сервере. Часто это всего лишь 2 МБ. Каков общий размер загружаемых файлов? Возможно, цикл начинает сбой после превышения максимального размера? Также проверьте значения в '$ _FILES [" doc_file "] [" error "]'! –

ответ

0

Я попробовал это один и он работает для меня:

<?php 
if(isset($_POST['form_submit'])) 
{ 
     $stock_no=$_POST["txt_stock_no"]; //hidden input 
     $doc_name = $_POST["chk"]; 
     $doc_file = $_FILES["doc_file"]["name"]; 
     $doc_tmp_name = $_FILES["doc_file"]["tmp_name"]; 
     #$add_by=charEsc($_SESSION["User_ID"]); 


     for($i=0; $i<count($stock_no); $i++) 
     { 
      $image_new= md5(uniqid(mt_rand(), true)); 
      $ext=explode(".", $doc_file[$i]);//gets extension 
      $ext=end($ext); 
      move_uploaded_file($doc_tmp_name[$i],"images/".$image_new."-".$stock_no[$i].".".$ext); 
      #echo "image path=".$doc_tmp_name[$i]." ///"."images/".$image_new."-".$stock_no[$i].".".$ext."<br>"; 
      $stock_no=$stock_no[$i]; 
      $doc_name=$doc_file[$i]; 
      $document_path="images/".$image_new."-".$stock_no[$i].".".$ext; 
      $rep = query("INSERT INTO documents (`stock_no`, `Document_Name`, `Document_Upload`) values ('$stock_no','$doc_name','$document_path')"); 
     } 
} 
?> 

<form method="post" enctype="multipart/form-data"> 
<?php 
for($i=0; $i<=3; $i++) 
{ 
    ?> 
     <input type="text" name="chk[]" /> 
     <input type="text" name="txt_stock_no[]" /> 
     <input type="file" name="doc_file[]" /> 
     <br /> 
    <?php 
} 
?> 
<input type="submit" name="form_submit" /> 
</form> 
Смежные вопросы