0

私はphpが初めてで、写真をアップロードし、そこから写真を削除し、写真を編集する必要があるシステムを設計しようとしています。私は move_uploaded_file(); を使用しました。写真をアップロードします。そして unlink(); 写真を削除するには、フォームによる写真のアップロードと削除が正常に行われました。しかし、編集のどこが間違っていたのかわかりません.私の問題は、編集フォームで、編集する新しい写真を提供していないことです.mysqlテーブルが更新されています.しかし、新しい写真が提供されると、フォームが機能しません.. . これが私がやったことです.. 送信部分で:

<?php
            $product=get_product_by_id($_GET['pid']);/*is a function to get product  from database*/         

        ?>
         <form enctype="multipart/form-data" action="edit_product.php?pid=<?php echo urlencode($_GET['pid']); ?>" method="post">
            <p>Product name: 
                <input type="text" name="name" value="<?php echo $product['name']?>" id="name" />
            </p>
            <p>Actual Photo:
                <input type="file" name="photo" > 
            </p>
            <p>Thumbnail Photo:
                <input type="file" name="thumb" > 
            </p>
            <p>Visible: 
                <input type="radio" name="visible" value="0" /> No
                &nbsp;
                <input type="radio" name="visible" value="1" /> Yes
            </p>
            <input type="submit" name="submit" value="Edit Product" />
        </form>

受信部分:

if (isset($_POST['submit'])) {
        $id = mysql_prep($_GET['pid']);
        $name = mysql_prep($_POST['name']);
        $visible = mysql_prep($_POST['visible']);

        if(empty($_POST['photo'])){
            $query = "UPDATE products SET 
                    name = '{$name}', 
                    visible = {$visible} 
                    WHERE id = {$id}"; 
        }
        else{

            $product=get_product_by_id($id);
            //echo $product['photo'];
            $target = "images/products/";
            $target=$target . $product['photo'];
            $target2 = "images/product_thumbs/";
            $target2=$target2 . $product['thumb'];
            unlink($target);
            unlink($target2);

            $photo=$_POST['name'].".jpg";
            $photo = mysql_prep($photo);
            $thumb=$_POST['name']."_thumb.jpg";
            $thumb = mysql_prep($thumb);


            $target = "images/products/"; 
            $target = $target .$name.".jpg";
            $target2 = "images/product_thumbs/"; 
            $target2 = $target2 .$name."_thumb.jpg";

            move_uploaded_file($_FILES['photo']['tmp_name'], $target);
            move_uploaded_file($_FILES['thumb']['tmp_name'], $target2);

           $query = "UPDATE products SET 
                        name = '{$name}', 
                        photo = '{$photo}',
                        thumb = '{$thumb}', 
                        visible = {$visible} 
                        WHERE id = {$id}"; 
        }
 }  
4

2 に答える 2

0

ほら、問題はコードにあります:

if(empty($_POST['photo'])){
        $query = "UPDATE products SET 
                name = '{$name}', 
                visible = {$visible} 
                WHERE id = {$id}"; 
    }

フォームにenctype="multipart/form-data"属性がある場合、ファイルは $_POST 配列ではなく $_FILES 配列に移動します。したがって、フォームから新しいファイルを Update スクリプトに送信するたびに、ファイルは $_FILES['photo'] に移動し、$_POST['photo'] は常に空になります。そのため、スクリプトはテーブルを更新するだけです。

于 2011-09-01T07:59:40.963 に答える
0

INSERT INTO新しいアイテムのクエリがありません。新しい写真を送信する場合、2 番目のクエリは何も実行しません。

于 2011-09-01T08:06:19.477 に答える