0

これが意味をなすことを願っています。私はこのコードを数日間使用してきましたが、現在、少し気まずい思いをしています!

大量の情報を DB に渡す大規模なフォームがあります。フォームの不可欠な部分は、ファイルのアップロードに関係しています。

uploads という配列を作成し、データベースから列名を渡して、それらを使用して、受信した情報を対応する列に自動的に入力するクエリを生成できるようにしています。

私のフィールドのコードの例を次に示します。

<label>Upload copy front page of contract and relevant special condition(s)</label>
    <input type="file" name="upload[UploadCopyContr]" value="<?php echo $out['UploadCopyContr']?>" />

配列は受信側で処理され、ファイルは問題なく必要なフォルダーにアップロードされます。問題があるのは、クエリ文字列を生成できるように列文字列を動的にターゲットにする方法です。

これは、私が最終的に望んでいる種類のクエリになります。

UPDATE $table SET $column = $value WHERE

では、配列から列名を抽出して変数に入れるにはどうすればよいでしょうか? もし var_dump ($_FILES["upload"]); 次の応答が得られます

["name"]=> array(4) { ["UploadCopyExtr"]=> string(9) "test2.pdf" ["UploadCopyContr"]=> string(9) "test1.pdf" ["UploadCopyTaxDesigLttr"]=> string(0) "" ["UploadOthTaxDesigDoc"]=> string(0) ""

したがって、値が配列にあることはわかっていますが、それらをターゲットにする方法がわかりません!

$_FILES["uploads"]["UploadCopyExtr"] を使用できますが、動的に生成されたクエリには適していません。

これは私のファイル アップロード コードです。これは完全に機能しています。

$path = 'uploads/'; 
foreach ($_FILES["upload"]["error"] as $key => $error)
{                                                          
   $tmp_name = $_FILES["upload"]["tmp_name"][$key];
        {
           if (!$tmp_name) continue; 
        }    
   $name = $_FILES["upload"]["name"][$key];

if ($error == UPLOAD_ERR_OK)
{
    // Check if directory exists and create it if not.
    if(!is_dir($path . $_POST["AccountID"] ."/". $_POST["PropertyID"])) {
        mkdir($path . $_POST["AccountID"] ."/");
        mkdir($path . $_POST["AccountID"] ."/" . $_POST["PropertyID"] ."/");
    }
    if (move_uploaded_file($tmp_name, $path . $_POST["AccountID"] ."/". $_POST["PropertyID"] ."/".$name))

        $uploaded_array[] .= "Uploaded file '".$name."'.<br/>\n";

    else
        $errormsg .= "Could not move uploaded file '".$tmp_name."' to '".$name."'<br/>\n";

}
else $errormsg .= "Upload error. [".$error."] on file '".$name."'<br/>\n";
}

問題のその側面に問題がないため、クエリの例を含めていません。これらの列名を動的にターゲットにする方法を知りたいだけです。2つが本質的にリンクされている場合は許してください。喜んで提供しますどんな情報も必要です。

4

1 に答える 1

1

配列のキーを取得するには、array_keys を使用します。implode を使用して、キーをクエリの一部に結合することもできます。基本的:

$columns = implode( ', ', array_keys( $array ) );
// This nets you 'ColumnName1, ColumnName2, Etc, Etc2'

そして、値についても同じです。次に、これらの文字列をクエリに挿入します。

ただし、DB がスローするエラーと、DB に挿入するスクリーン値を必ず処理してください。

エンドユーザーはフォーム HTML を操作できるため、クエリに挿入される列名を変更できます。

于 2013-05-15T17:15:46.907 に答える