2

複数のファイルとタイトルを送信するこのコードがあり、結果を結合してDBにアップロードし、タイトル[]が空かどうかを確認してカスタム値を出力しようとしていますが、タイトル[]に問題があり、s_uploadと結合する必要があります[] 配列:

<?php
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ){

foreach ($_FILES["s_upload"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["s_upload"]["tmp_name"][$key];
        $name = $_FILES["s_upload"]["name"][$key];
       // move_uploaded_file($tmp_name, "data/$name");

       if ($_POST['title']==''){
       echo 'Title';
       }else{
       print_r ($_POST['title']);
       echo $name;
       }
    }
}   
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>

</head>
    <body>


<form method="post" enctype="multipart/form-data">
<div class='file_upload' id='f1'>
<input type="text" name="title[]" id="t1">
<input size="14" name='s_upload[]' id="i1" type='file'/>
</div>
<div class='file_upload' id='f2'>
<input type="text" name="title[]" id="t2">
<input size="14" name='s_upload[]' id="i2" type='file'/>
</div>
<input type="submit"/>
</form>


    </body>
</html>

私が提出すると、これは結果です:

Array ( [0] => 11111 [1] => 22222 ) 1.jpgArray ( [0] => 11111 [1] => 22222 ) 2.jpg

タイトルが存在する場合、この結果が必要です:

1111 1.jpg 
2222 2.jpg

タイトルが空の場合は次のようになります。

Title 1.jpg 
2222 2.jpg
4

3 に答える 3

3
<?php
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ){
$i = 0;
foreach ($_FILES["s_upload"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["s_upload"]["tmp_name"][$key];
        $name = $_FILES["s_upload"]["name"][$key];
       // move_uploaded_file($tmp_name, "data/$name");

       if ($_POST['title'][$i]==''){
       echo 'Title '.$name;
       }else{
       echo $_POST['title'][$i] . ' ' . $name."\n";
       }
    }
    $i++;
}   
}
?>

このコードは悪いですが、動作させるだけです。少なくとも読みやすくしてください。


PsyK 編集: コードを更新して $i の必要性を削除しました。その番号は既に $key に格納されていたからです。欠けていたのは、アップロードされたファイルの場合と同じように、タイトルを配列として参照することだけでした。

<?php
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ){
foreach ($_FILES["s_upload"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["s_upload"]["tmp_name"][$key];
        $name = $_FILES["s_upload"]["name"][$key];
       // move_uploaded_file($tmp_name, "data/$name");

       if ($_POST['title'][$key]==''){
       echo 'Title '.$name;
       }else{
       echo $_POST['title'][$key] . ' ' . $name."\n";
       }
    }
}   
}
?>
于 2012-09-12T01:10:52.937 に答える
2

がどこから来たのかを特定しなかったので1111、いくつかのオプションを示します。

<?
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ){
    foreach ($_FILES["s_upload"]["name"] as $key => $name) {
        if ($_FILES["s_upload"]["error"][$key] == UPLOAD_ERR_OK) {
            $tmp_name = $_FILES["s_upload"]["tmp_name"][$key];

            if ($_POST['title'][$key]==''){
                // No title was specified: construct default title
                // This defaults the title to the filename of the file that was uploaded
                $title = $name;
                // This defaults the title to some random 32-character hex string
                $title = md5(time()+rand()); 
            }
            else{
                // A title was specified in the input box: use it
                $title = $_POST['title'][$key];
            }
            echo "$title $name<br />";
        }
    }
}
?>

ここに私が変更したものがあります:

  1. エラーの代わりに名前をループしています。このようにするほうがはるかに理にかなっています。エラーのループは混乱の元でした。
  2. 入力名に配列 ( []) を使用して入力に名前を付けたため、コードでどの配列を参照しているかを指定する必要があります。$keyこれは、一貫して使用する必要があることを意味します。
  3. タイトルが指定されていないときにデフォルトのタイトルが欲しいと言いましたが、どのように構築したいかについては説明しませんでした。そこに2つのランダムなアイデアを投げ込みました。最初のデフォルトは、アップロードされたファイルのファイル名です。2 番目は単なるランダムな文字列です。これは、現在の時刻、アップローダーの IP などに基づいたものに変更できます。いずれにせよ、そこで行うことになります。
于 2012-09-12T01:33:49.233 に答える
1

コードを見るだけでこれを試してください...

うまくいくかもしれませんし、うまくいかないかもしれません。私は自分でテストしていません。

  if (is_array($_FILES) && !empty($_FILES)) {
     foreach ($_FILES['s_upload'] as $key => $file) {
        if ($file['error']!=UPLOAD_ERR_OK)
           continue;

        $tmp_name = $file['tmp_name'];
        $name = $file['name'];

        if (isset($_POST['title'][$key])) { # Standard method.
           $title = $_POST['title'][$key];
        } else {
           $title = "Default title";
        } 

        // Do what you need to do with the stuff.

     }
  }
于 2012-09-12T01:16:53.103 に答える