0

さて、私にはジレンマがあります。最大6つの画像と2つのテキストフィールド(タイトルと説明)をデータベースにアップロードできるようにしたい...実際に自分で修正させてください。画像の名前をデータベースに保存して、取得できるようにします。後で写真。複数の写真をフォルダにアップロードする方法と、行をデータベースに挿入する方法を知っていますが、2つを組み合わせる方法がわかりません。これを画像と組み合わせるにはどうすればよいですか?ファイルの1つに問題がある場合は、プロセス全体をキャンセルしますか?

私のdbセットアップは単にidです| タイトル| 説明| img1 | img2 | img3 | img4 | img5 | img6

私がこれまでに書いたコードは次のとおりです。

if (isset($_POST['formsubmitted'])) { //if form was submitted
$error = array();//Declare An Array to store any error message  

if (empty($_POST['title'])) {//if no name has been supplied 
    $error[] = 'Please enter a title for your post.';//add to array "error"
    $show_errors = 'show';
} else {
    $title = $_POST['title'];//else assign it a variable
}



if (empty($_POST['desc'])) {
    $error[] = 'Please enter a short desc of your post.';//add to array "error"
    $show_errors = 'show';
} else {
    $desc = $_POST['desc'];//else assign it a variable
}



    if (empty($error)){ //if no error, insert into db

$new_post = "INSERT INTO `posts` ( `title`, `desc`) VALUES ( '$title', '$desc')";
    $result = mysql_query($new_post ) or die(mysql_error('error inserting post'));

}


}

次に、htmlは次のとおりです。

<!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>Untitled Document</title>
</head>

<body>
<?php if (isset($show_errors)) { 
    //show user the errors if form cant be submitted
    echo '<div> <ol>';
        foreach ($error as $key => $values) { echo '    <li>'.$values.'</li>'; }
        echo '</ol></div><br />'; }?>

<br />
<form method="post" id="newpost" action="" enctype="multipart/form-data">
<div><input name="title" type="text" value="" class="title_input"></div>
<div><textarea id="area4" cols="40" rows="5" name="desc" class="desc_texbox"></textarea></div>
<div><input type="file" name="images1"></div>
<div><input type="file" name="images2"></div>
<div><input type="file" name="images3"></div>
<div><input type="file" name="images4"></div>
<div><input type="file" name="images5"></div>
<div><input type="file" name="images6"></div>
<input type="hidden" name="formsubmitted" value="TRUE" />
<input type="submit" id="upload" value="Upload">
</form>
</body>
</html>
4

2 に答える 2

1

これは決して終わったわけではありませんが、正しい方向に向かっているはずです。<input type="file" name="images[1]" />これは、ファイルフィールドの名前を、配列として処理されるように変更することに基づいて行ったことに注意してください。

<?php

error_reporting(E_ALL);
ini_set('display_errors', true);

$db = new PDO('mysql:dbname=test;host=127.0.0.1', 'user', 'pass');


if (isset($_POST['formsubmitted'])) { //if form was submitted

    $error_array = array();//Declare An Array to store any error message

    // check all images for upload errors
    // you should probably add extra file validation here - check image type etc
    $upload_error = false;
    foreach($_FILES['images']['error'] as $error) {
        if ($error != 0 && $error != 4) {
            $upload_error = true;
        }
    }

    if ($upload_error) {
        $error_array[] = 'One of the image uploads failed!';
    }


    if (empty($_POST['title'])) {//if no name has been supplied
        $error_array[] = 'Please enter a title for your post.';//add to array "error"
    } else {
        $title = $_POST['title'];//else assign it a variable
    }

    if (empty($_POST['desc'])) {
        $error_array[] = 'Please enter a short desc of your post.';//add to array "error"
    } else {
        $desc = $_POST['desc'];//else assign it a variable
    }

    if (empty($error_array)){ //if no error, insert into db

        $new_post = "INSERT INTO `posts` ( `title`, `desc`) VALUES (?, ?)";
        $stmt = $db->prepare($new_post);
        $stmt->execute(array($title, $desc));

        $new_post_id = $db->lastInsertId();

        // now start processing the images
        $image_sql = "INSERT INTO `post_images` (`post_id`, `img_name`) VALUES (?, ?)";
        $stmt = $db->prepare($image_sql);

        for ($i = 1; $i <= 6; $i++) {

            // you need to add some code to vlaidate, move and rename the files

            // add the files to the db
            $file_name = $_FILES['images']['name'][$i];
            $stmt->execute(array($new_post_id, $file_name));

        }

    } else {
        print_r($error_array);
    }

}
?>
于 2012-04-14T16:49:03.723 に答える
0

最初にサーバーに画像をアップロードする方が良いと思います。move_uploaded_file()関数がエラーを返した場合は、$error配列に値を追加します。このように、アップロードが正常に完了した場合にのみ、データがデータベースに挿入されます。

于 2012-04-14T16:10:49.687 に答える