Проблема формы PHP-Mysql для загрузки фотографий - PullRequest
0 голосов
/ 01 сентября 2011

Я новичок в php и пытаюсь создать систему, в которой мне нужно загрузить фотографию, удалить из нее фотографию и отредактировать фотографии.я использовал move_uploaded_file ();загружать фотографии.и отсоединить ();удалить фото. Я успешно загрузил и удалил фото по форме.Но не могу найти, где я ошибся с правкой edit.my, когда в форме редактирования я не даю новые фотографии для редактирования, таблица 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 голосов
/ 01 сентября 2011

Вы пропускаете запрос INSERT INTO для новых предметов. Ваш второй запрос ничего не изменит, если вы отправите новую фотографию.

0 голосов
/ 01 сентября 2011

Посмотрите, проблема в коде:

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'] всегда пусто.Вот почему ваш скрипт просто обновляет таблицу.

...