-1

データベースに複数の行を挿入しようとしましたが、その画像はフォルダーに保存されず、
このエラーが発生しました

Blockquote ArrayArraySQL 構文にエラーがあります。'Chrysanthemum.jpg'), ('Hydrangeas.jpg')', '('Chrysanthemum.jpg'), ('Hydrangeas.j' 行の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 1

これは私のコードです:

$hopid = $_POST[photo_hop_id];
$title = $_POST['photo_name_id'];

if(!is_array($title)) {
    $title = array();
}

$titleds = "('" . implode("'), ('", $title) . "')";

$tmp_file = $_FILES['ne_photo_image']['tmp_name'];
$file = $_FILES['ne_photo_image']['name'];  

if(!is_array($tmp_file)) {
    $tmp_file = array();
}
if(!is_array($file)) {
    $file = array();
}

$sementara = "('" . implode("'), ('", $tmp_file) . "')";
$filed = "('" . implode("'), ('", $file) . "')";    

$tmp_file1 = $_FILES['fe_photo_image']['tmp_name'];
$file1 = $_FILES['fe_photo_image']['name']; 

if(!is_array($tmp_file1)) {
    $tmp_file = array();
}
if(!is_array($file1)) {
    $file = array();
}

$sementara1 = "('" . implode("'), ('", $tmp_file) . "')";
$filed1 = "('" . implode("'), ('", $file) . "')";   

if(!move_uploaded_file($sementara, 'image/' . $filed)) {
    echo $_FILES["ne_photo_image"]["error"];
}

if(!move_uploaded_file($sementara1, 'image/' . $filed1)) {
    echo $_FILES["fe_photo_image"]["error"];
}

$y = "INSERT INTO photo VALUES (null, '".$filed."', '".$filed1."', '".$hopid."', '".$titleds."')";
$z = mysql_query($y) or die (mysql_error());
if($z) {
    $msg = "Data sudah ditambahkan";
}
else {
    $msg = "Data tidak bisa dimasukkan";
}

echo print_r($y);

これが私のフォームです:

<form method="post" enctype="multipart/form-data">
    <table border="0"cellpadding="0" cellspacing="0" width= "100%">
        <tr>
            <td>Hop Name :<?echo "$data[hop_name]"?>
                <input type='hidden' name='photo_hop_id' value='<?echo"$data[hop_id]"?>'>
            </td>
        </tr>
        <table border="0"cellpadding="0" cellspacing="0" width= "100%">
            <tr>
                <td cellpadding="0" cellspacing="0" width= "50%"> 
                    Near End Site Name : <?echo "$data[ne_site_name]" ?>
                    </br>
                    Near End Site Id : <?echo "$data[ne_site_code]" ?>
                </td>
                <td cellpadding="0" cellspacing="0" width= "50%"> 
                    Far End Site Name : <?echo "$data[fe_site_name]" ?>
                    </br>
                    Far End Site Id : <?echo "$data[fe_site_code]"?>
                </td>
            </tr>   
            <tr>
                <td cellpadding="0" cellspacing="0" width= "50%"> 
                    <?  $pm1= mysql_query("SELECT photo_name FROM photo_name WHERE photo_name_id = 1");
                    $dpm1 = mysql_fetch_array ($pm1);echo"$dpm1[0]" ?> 
                    <input type='hidden' name='photo_name_id[]' value='<?echo"$dpm1[0]"?>'> :  
                    <input type="file" name="ne_photo_image[]">
                </td>
                <td cellpadding="0" cellspacing="0" width= "50%"> 
                    <?echo "$dpm1[0]"?> : <input type="file" name="fe_photo_image[]">
                </td>
            </tr>   
            <tr>
                <td cellpadding="0" cellspacing="0" width= "50%"> 
                    <? $pm1= mysql_query("SELECT photo_name FROM photo_name WHERE photo_name_id = 2");
                    $dpm1 = mysql_fetch_array ($pm1);echo"$dpm1[0]" ?> 
                    <input type='hidden' name='photo_name_id[]' value='<?echo"$dpm1[0]"?>'> :  
                    <input type="file" name="ne_photo_image[]">
                </td>
                <td cellpadding="0" cellspacing="0" width= "50%"> 
                    <?echo "$dpm1[0]"?> : <input type="file" name="fe_photo_image[]">
                </td>
            </tr>   
        </table>
    </table>

    <input type="submit" value="insert" />
</form>

助けてくれてありがとう

4

3 に答える 3

1

あなたのエラーは明らかにこの行から来ています:

$y = "INSERT INTO photo VALUES (null, '".$filed."', '".$filed1."', '".$hopid."', '".$titleds."')";

たとえば、var$filedは、のように見える暗黙の配列('foo'), ('bar')です。最後に、リクエストはのようになりますINSERT INTO photo VALUE (null, '('foo'), ('bar')', [...]);

、、、の単純な引用符はエスケープする必要がありますが$filed、要求が完全に間違っていると確信しています。$filed1$hopid$titleds

photoテーブルスキーマ構造を教えてください。

編集 :

与えられた構造:(photo_id,ne_photo_image,fe_photo_image,hop_id,title)

テーブルに複数の行を挿入するには、次のような構文を使用する必要があります。

INSERT INTO photo(`photo_id`, `ne_photo_image`, `fe_photo_image`, `hop_id`, `title`)
VALUES
    (null, 'foo', 'bar', 'baz', 'qux'),
    (null, 'foo', 'bar', 'baz', 'qux'),
    (null, 'foo', 'bar', 'baz', 'qux');

別名、列ごとではなく、行ごとにデータを挿入する必要があります(現在試行しているもの)。

あなたのコードはこのように見えるはずです(これは間違いなく完全なコードではありません、私はあなたのすべてのコードを理解するかどうかわかりません、そして私はあなたにいくつかのトラックを与えます):

<?php 
   $hopid = $_POST['photo_hop_id'];

   $titles = $_POST['photo_name_id'];
   $ne_photo_images = $_FILES['ne_photo_image']['tmp_name'];
   $fe_photo_images = $_FILES['fe_photo_image']['tmp_name'];

   /*
   I assume $titles, $ne_photo_images and $fe_photo_images 
   have the same number of elements, in the right order.
   */

   $sql = "INSERT INTO photo(`photo_id`, `ne_photo_image`, `fe_photo_image`, `hop_id`,    `title`) VALUES";
   for($i = 0, $l = sizeof($titles) ; $i < $l ; $i++)
   {
      //adding row datas
      $sql .= " (null, 
                 '".$ne_photo_images [$i]."', 
                 '".$fe_photo_images [$i]."', 
                 '".$hopid."', 
                 '".$titles[$i]."')";
      if($i < $l - 1)
         $sql .= ",";
   }

   if(mysql_query($sql))
      //get happy
   else
      //take a coffee
?>

繰り返しになりますが、このコードは完璧にはほど遠いので、問題への取り組み方を説明しようとしています。

于 2012-08-01T10:20:17.177 に答える
0

、、の周り$filedのアポストロフィを削除します$filed1$titleds

$y = "INSERT INTO photo VALUES (null, ".$filed.", ".$filed1.", '".$hopid."', ".$titleds.")";

mysql_*非推奨になっているため、関数は使用しないでください。

于 2012-08-01T10:16:33.870 に答える
0

コードでは、送信されたデータをそれぞれの変数に割り当てています。そして、これらの変数が配列であるかどうかを確認しています。そうでない場合は、その変数を で割り当てていますarray()。したがって、要素のない配列変数に変換しようとしています。その割り当てを行うと、既存の値が上書きされるためです。

したがって、送信されたデータが配列でない場合、最後に、挿入する配列に要素がない可能性があります。

テスト用:

$abc = 'hi';
if(!is_array($abc))
{
    $abc = array();
}
print_r($abc); // $abc will be an empty array

また、一重引用符について samsam と Alexander が指摘したことを読んでください。

もう1つ$_POSTは、連想配列です。そして、keyas 文字列を渡す必要があります。最初の行 :$hopid = $_POST[photo_hop_id];では、次のようになります。$hopid = $_POST['photo_hop_id'];

変数の値をエコーし​​たい場合は、次のように簡単に実行できますecho $variblename;。あなたのコード<?echo "$dpm1[0]"?>では: 、次のように使用することをお勧めします: <?echo $dpm1[0]?>(つまり、二重引用符なしで、その中に他の文字列がないため)。

于 2012-08-01T10:26:44.703 に答える