2017-10-16 7 views
-1

error snapshot 私はこのエラーを何度も受けています。このコードはあなたが送信したもので、私はそれをテストしました。
DBにおいて 、Iはproperty_idInteger型で採取しProperty_imgここ----------- varcharphpのimplode関数を使って画像を動的にアップロードするには?

<?php 
if(isset($_POST['submit'],$_POST['property_id'],$_FILES['files'])){ // check that needed superglobals are set 
    $query="INSERT INTO img_tbl(`property_id`,`property_img`) VALUES(?,?)"; //'$property_id','$join_string')"; 
    if($stmt=$conn->prepare($query)){ 
     foreach($_FILES['files']['tmp_name'] as $key=>$tmp_name){ 
      $property_img[]=$_FILES['files']['name'][$key]; 
      $join_string=implode(' ',array_slice($_FILES['files']['name'][$key],0,5)); 
      copy($tmp_name,'uploads/'.$join_string); 
     } 
// I don't know the value type of $property_id. If integer, use i instead of s. 
     if(!$stmt->bind_param('is',$property_id,$join_string)){ 
      echo "bind failed"; // $stmt->error; // do not echo when public 
     }elseif(!$stmt->execute()){ 
      echo "execute failed"; // $stmt->error; // do not echo when public 
     }else{ 
      header('location:listpro_img.php'); 
     } 
     $stmt->close(); 
    }else{ 
     echo "prepare failed"; // $mysqli->error; // do not echo when public 
    } 
    $conn->close(); 
}else{ 
    echo "insufficient data submitted"; 
} 
?> 

ある時に画像のn個をアップロードするためのHTMLコードであります--- ---

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> 
    <link rel="shortcut icon" href="img/favicon.png"> 
    </head> 
<script> 
</script> 
    <body id="top"> 



    <!-- begin:content --> 
    <div id="content"> 
     <div class="container"> 
     <div class="row"> 

        <!-- Add form Code from Here --> 

          <form method="post" enctype="multipart/form-data"> 
          <div class="col-sm-12"> 

          <div class="col-sm-6"><label>Property Id:</label></div> 

          <div class="col-sm-6 btn btn-info">  
            <input type="text" name="property_id"/></div>  
           <div class="col-sm-6"><label>Property Image:</label></div>        
            <input id="fileupload" type="file" name="files[]" multiple /><br>  

           <div class="col-sm-12"> 
           <input type="submit" name="submit"> 
          </div> 
          </div>         
         </form> 

        <!--Form code Ends Here --> 
        </div> 
       </div>   
      </div> 


    </body> 
</html> 
+0

ユーザーprint_rまたはvar_dump関数は、コードをデバッグして、渡されている$ _POSTの値が何であるかを確認します。 –

+0

質問に元のコードを残しても問題はありません。これは私の答えを意味のあるものにしてくれます。私の新しいコードは 'array_slice()'をもう使用しません。私があなたの質問に自信を持って答えることができるように、私が要求したスーパーグローバルデータを示してください。私はあなたの時間を費やした後、別のボランティアによって「賞賛される」ことはありません。 – mickmackusa

答えて

0

さて、私は私が扱った$_POST & $_FILESデータの種類を確認するために私のサーバーのいずれかであなたのhtmlを走りました。私は三つの小さなJPGのみをアップロードし、これを得た:

$_POST=['property_id'=>'test','submit'=>'Submit']; 
$_FILES=['files'=>[ 
      'name'=>['4x4.jpg','catfish.jpg','calc.jpg'], 
      'type'=>['image/jpeg','image/jpeg','image/jpeg'], 
      'tmp_name'=>['/tmp/phps6I8zU','/tmp/phpgbmn2z','/tmp/phpo9wSgg'], 
      'error'=>[0,0,0], 
      'size'=>[14243,43314,36173] 
     ] 
    ]; 

*あなたは、私が実際にテキストフィールドにアクセスできるようにbtn btn-infoクラスを削除するために必要なマインド。このことから


私はあなたのforeach()ループ内からimplode()を呼んでいたし、それは物事を汚れたことに気づきました。 $join_stringが各繰り返しで呼び出されていました(アップロードされたファイルごとに1つ)。 implode()が配列を受け取っていても(それはなかった)、毎回$join_stringを上書きしていました。私は、単一のisset()呼び出しにスーパーグローバルチェックのすべてを書いた

if(isset($_POST['submit'],$_POST['property_id'],$_FILES['files'])){ // check that needed superglobals are set 
    $query="INSERT INTO img_tbl(`property_id`,`property_img`) VALUES (?,?)"; 
    if($stmt=$conn->prepare($query)){ 
     foreach($_FILES['files']['tmp_name'] as $key=>$tmp_name){ 
      if(!copy($tmp_name,"uploads/{$_FILES['files']['name'][$key]}")){ // // not move_uploaded_file() ? 
       echo "<div>copy error @ $tmp_name & uploads/{$_FILES['files']['name'][$key]}</div>"; 
      } 
     } 
     if(!$stmt->bind_param('ss',$_POST['property_id'],implode(' ',$_FILES['files']['name']))){ 
      echo "bind failed"; // $stmt->error; // do not echo when public 
     }elseif(!$stmt->execute()){ 
      echo "execute failed"; // $stmt->error; // do not echo when public 
     }else{ 
      header('location:listpro_img.php'); 
     } 
     $stmt->close(); 
    }else{ 
     echo "prepare failed"; // $conn->error; // do not echo when public 
    } 
    $conn->close(); 
}else{ 
    echo "insufficient data submitted"; 
} 

:問題の上に任意の左を分離し、掃討するためにあなたを助けるためにエラーチェックをロード -

これは私の更新されたコードです。この構文は有効です。好奇心が強い場合はthe manualを参照してください。

元のプロセスでは、照会で安全ではない非初期化データが使用されていました。私はmysqli prepared statementをプレースホルダーで実装しました。私は$property_idの予想データ型を知らないので、文字列(s)として割り当てましたが、おそらく整数(i)かもしれません - 正しい宣言を決定する必要があります。

property_imgテーブルの列には、空白で区切られたイメージファイル名の全長を受け取るのに十分な長さがあることを確認してください。アップロードされたファイルの数が多く、ファイル名が比較的長い場合は、VARCHAR(255)フィールドに切り捨てられます。

編集:$propert_idを整数にする場合は、入力フィールドを数値のみに制限する必要があります(これを行うにはいくつかの方法があります)。次に、受信したコードで、送信された値が安全であることを検証します。前に述べたように、bind呼び出しでsiに置き換えます。

+0

整数として 'property_id'をとり、varcharとして' property_img'を取っています – sudha

+0

私は$ _POSTと$ _FILESだけを使用しています。もし間違っていたら、私に修正をさせてください。 – sudha

+0

@sudha私はいくつかの実際のテストを実行しました。そして今、私はコードが主にあなたのために用意されていると思います。このスニペットを実行し、何かが壊れているかどうか教えてください。私はそれに何かエラーがある場合、私の答えを修正します。ページを整理するために前のコメントを削除してください。 – mickmackusa

関連する問題