用于照片上传的PHP-Mysql表单问题

时间:2011-09-01 07:39:41

标签: php mysql forms photo-upload

我是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}"; 
        }
 }  

2 个答案:

答案 0 :(得分:0)

看,问题在于代码:

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

如果您的表单具有enctype="multipart/form-data"属性,则您的文件将不是$ _POST数组,而是$ _FILES数组。因此,每次通过表单将新文件发送到更新脚本文件时,都会转到$ _FILES ['photo']并且$ _POST ['photo']始终为空。这就是你的脚本只更新表格的原因。

答案 1 :(得分:0)

您缺少INSERT INTO个新项目查询。如果您要提交新照片,那么您的第二个查询将无法执行任何操作。