Как проверить все поля формы вместе?

Я создаю программу, в которую человек может вставить любой товар с его изображением. Проблема, с которой я столкнулся, заключается в том, что если я ввожу сведения о продукте и не загружаю изображение, если я нажимаю кнопку «Отправить», он вставляет записи.
Я хочу, чтобы он не вставлял запись, если пользователь не загрузил изображение. Короче говоря Я также хочу использовать проверку изображений. Я использовал (isset) с полями продукта, но когда я использую (isset) с изображением, он выдает мне следующие сообщения об ошибках, и если я просто удалю isset($_POST['files[]']), он отлично работает, но перестает проверять Поля изображения.

Здесь я делюсь кодом. Кодекс довольно длинный. Любая помощь будет оценена по достоинству.

Пожалуйста, заполните все поля
silverbrooches.jpg
У вас ошибка в синтаксисе SQL; обратитесь к руководству, которое соответствует версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с ''silverbrooches.jpg', 'upload/products/32046silverbrooches.jpg')' в строке 2
Gold_Ring2.png

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с ''Gold_Ring2.png', 'upload/products/207Gold_Ring2.png')' в строке 2
Necklaces_Diamond.png

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с «Necklaces_Diamond.png», «upload/products/6748Necklaces_Diamond.png») в строке 2.

    <?php 

    //Use Category_id insted of Sub_category_id
    session_start();
    if (isset ($_SESSION['username']) )
    {

        //echo "<div id='nav'";
        echo "<ul><hr>
         <li><a href='insert_product.php' >Add Product  </a></li>   
         <li><a href='add_category.php'> Add Category </a></li> 
          <li><a href='add_sub_category.php'> Add Sub-Category </a></li>    
         <li><a href = 'view_products.php'  >View All Products</a>  </li>
         <li><a href = 'all_categories.php'  >View All Categories</a>  </li>
           <li><a href='view_all_sub_categories.php'>View All Sub Categories</a></li>

         </ul></hr>";





    error_reporting(E_PARSE);  //To Remove Notices!!
    global $current_id;
    //$GLOBALS $current_id;


    if(isset($_SESSION['username']))
    {


        include 'connect.php';

        //      $select_query=          'Select * from category';
        //      $select_query_run =     mysql_query($select_query);

                echo "<div id='line' >
                       <div id='form'>";

        echo "  
            <form action='insert_product.php' method='POST' enctype='multipart/form-data' >
            <table border=1>
            <tr>
            <td>
            <label>Product Name:</label> </td>  <td><input type='text' name='product_name'  />*Required</td></tr>

            <tr><td><label>Item No:</label></td> <td><input type='text' name='item_no' ></td></tr>

            <tr><td>Recipient   </td>   <td> <input type='text' name='recipient' ></td></tr> 

        <tr><td>    Total Carat Weight</td> <td><input type='text' name= 'total_carat_weight' ></td></tr>

        <tr><td>    Metal </td><td><input type='text' name='metal' ></td></tr>

        <tr><td>    Stone Shape </td><td><input type='text' name='stone_shape' ></td></tr>

        <tr><td>    Stone Type</td><td> <input type='text' name='stone_type'></td></tr> 

        <tr><td>    Stone Setting</td><td> <input type='text' name='stone_setting'></td></tr> 

        <tr><td>    Wastage </td><td><input type='text' name='wastage'></td></tr></br></br>

        <tr><td>    Retail_price </td><td><input type='text' name='retail_price' ></td></tr>

        <tr><td>    Actual Price: </td><td> <input type= 'text' name= 'price'  /></td></tr>*Required

        <tr><td>    Description:</td><td><input type='text' name='description'  /></td></tr>

        <tr><td>    Image1:</td><td> <input type='file' name= 'files[]' ></td></tr> *Required

        <tr><td>    Image2:</td><td> <input type='file' name= 'files[]' ></td></tr>

        <tr><td>    Image3:</td><td> <input type='file' name= 'files[]' ></td></tr></table> ";




        /*------------------
        Drop Down List Start
        ------------------  */      

                        /*----------------
                        Drop Down List
                        ---------------*/



                    echo "<select name='category'>";

                    $select_query=          'Select * from category';
                    $select_query_run =     mysql_query($select_query);

                    $sub_category_query="Select * from sub_categories 
                            where category_id='".$select_query_array['category_id']."'";

                //   $sub_category_query="Select * from sub_categories ";
                //   $sub_query_run=         mysql_query($sub_category_query);


                            while ($select_query_array=   mysql_fetch_array($select_query_run) ) {

                                     echo "<optgroup label='".$select_query_array['name']."' >".

                                            //$sub_category_query="Select * from sub_categories";
                                            $sub_category_query="Select * from sub_categories 
                            where category_id='".$select_query_array['category_id']."'";                                        

                                            $sub_query_run=         mysql_query($sub_category_query);

                                    while   ($sub_query_run_fetch=   mysql_fetch_array($sub_query_run) ) {
                                        echo "<option value='".$sub_query_run_fetch['sub_category_id'] . "' >" .
                                        htmlspecialchars($sub_query_run_fetch['sub_category_name']) . "</option>";
                                                     }
                                            echo "</optgroup>";
                         }
                     echo "</br>";

                     $selectTag= "</br><input type='submit' value='Insert Product'  /></select></form>";

                     echo "</div></div>";

                     echo $selectTag;

    /*----------------
    Drop Down List
    ---------------*/


        /*-----------------
        Drop Down List End
        ------------------*/    









if(isset($_POST['product_name']) && isset($_POST['price']) &&  isset($_POST['description'] )
        && isset($_POST['files[]'])
             )
        {
             $product_name  =       $_POST['product_name'];
             $price         =       $_POST['price'];
             $description   =       $_POST['description'];
             $category      =       $_POST['category'];









        $query= "insert into products (name, sub_category_id ) 
                    VALUES( '$product_name', $category )";


        if($query_run=      mysql_query($query) )
        {

            echo 'Data Inserted';
            $current_id=     mysql_insert_id();
            //$_SESSION['current_id']= mysql_insert_id();



            }   
            else
            {
                'Error In SQL'.mysql_error();
                }



        /*-----------------
        INSERT Description!!
        -------------------*/
        $item_no=               $_POST['item_no'];
        $recipient=             $_POST['recipient'];
        $total_carat_weight=    $_POST['total_carat_weight'];
        $metal=                 $_POST['metal'];
        $stone_shape=           $_POST['stone_shape'];
        $stone_type =           $_POST['stone_type'];
        $stone_setting  =       $_POST['stone_setting'];
        $wastage        =       $_POST['wastage'];
        $retail_price   =       $_POST['retail_price'];






        $query_description= "insert into product_description VALUES($current_id,'$item_no','$recipient',
                            '$total_carat_weight','$metal','$stone_shape','$stone_type','$stone_setting',
                                     '$wastage','$retail_price','$price' ,'$description'    ) ";

                                    if(mysql_query($query_description))
                                    {
                                        echo 'Insert descrition successfull';
                                        }
                                        else
                                        {
                                            echo mysql_error();
                                            }





        }


        else
        {
            echo '</br>Plesae fill all the Fields';
            }



                /*-----------------
                IMAGE QUERY 2
                ------------------*/


        if (isset($_FILES['files'])
    ||  ($_FILES["files"]["type"]   == "image/jpeg"))
    {

    foreach($_FILES['files']['tmp_name'] as $key=> $tmp_name)
        {
            //echo $tmp_name."<br>";

        echo    $image_name=        $_FILES["files"]["name"][$key];  

            $random_name=       rand().$_FILES["files"]["name"][$key];

            $folder="upload/products/" .$random_name;                       

            move_uploaded_file($_FILES["files"]["tmp_name"][$key],
                        "upload/products/" . $random_name);


        //  print_r($_FILES);


            $sql = "Insert into product_images (product_id,name,images) 
                            VALUES ($current_id,'$image_name', '$folder')";

                            if (mysql_query($sql))
                            {
                                echo 'Done';
                                }

                                else
                                {
                                    echo mysql_error();
                                    }


        }

    }





                /*-----------------
                IMAGE QUERY 2- END
                ------------------*/




}


else
{
    echo 'You Must Log in To View this Page!';
    }
}

else
{
    echo "You Must need to login to View this Page";

    }
?>

person Taha Kirmani    schedule 15.08.2013    source источник
comment
$_POST приносит все входные данные, где для файлов вам нужно использовать $_FILES php.net/manual /en/reserved.variables.files.php   -  person zzlalani    schedule 15.08.2013
comment
также не используйте isset(), а проверьте if ($_FILES['name'] != "")   -  person zzlalani    schedule 15.08.2013
comment
Спасибо за ответ. Я обновил свой код, теперь он не дает мне никакого сообщения об ошибке, но все же, если я вставляю данные без загрузки изображения, он вставляет данные. ` if(isset($_POST['product_name']) && isset($_POST['price']) && isset($_POST['описание']) && $_FILES['files'] != `   -  person Taha Kirmani    schedule 15.08.2013
comment
либо используйте $_FILES['files']['name'], либо $_FILES['files']['tmp_name'],   -  person zzlalani    schedule 15.08.2013
comment
$_FILES['files'] на самом деле является массивом   -  person zzlalani    schedule 15.08.2013
comment
Я только что заметил новую проблему. Если я просто нажму кнопку «Вставить» без вставки какой-либо записи, она вставит запись в базу данных и выдаст мне сообщение «Записи вставлены».   -  person Taha Kirmani    schedule 15.08.2013
comment
Да, потому что вы проверяете isset().. isset всегда будет возвращать true, если у вас уже есть поле формы для него, например. <input type='text' name='fname'> и вы проверяете isset($_POST['fname']), так как он установлен, он не будет проверять, пусто ли ваше текстовое поле или нет.   -  person zzlalani    schedule 15.08.2013
comment
Вам нужно проверить это так же, как и для файла, т.е. if (trim($_POST['fname']) != ""), поэтому, если пользователь оставил поле пустым, ваш код остановится на этом и перейдет к другому.   -  person zzlalani    schedule 15.08.2013
comment
PS: trim() на самом деле обрежет пробелы с обеих сторон... с начала и с конца...   -  person zzlalani    schedule 15.08.2013
comment
Большое спасибо, Зишан!! Теперь работает.   -  person Taha Kirmani    schedule 15.08.2013
comment
Я рад, что это работает для вас, теперь вы можете выбрать ответ как правильный :)   -  person zzlalani    schedule 15.08.2013


Ответы (2)


$_POST содержит все входные данные, а для файлов, которые вам нужно использовать $_FILES
проверьте этот php.net/manual/en/reserved.variables.files.php

Также не используйте isset(), а отметьте if ($_FILES['file']['name'] != ""), потому что isset всегда будет возвращать значение true, если у вас есть поле с именем в вашей html-форме
например, <input type='text' name='fname'>, а если вы отметите isset($_POST['fname']), оно вернет значение true, поскольку он уже установлен на name='fname'

isset не будет проверять, пусто ваше текстовое поле или нет. вы можете использовать

if (trim($_POST['fname']) != "") {

} else {

}

поэтому, если пользователь оставил поле пустым, ваш код остановится на этом и перейдет в блок else.

PS: trim() будет обрезать пробелы с самого начала и конец строки..

person zzlalani    schedule 15.08.2013

$_FILES['fileFormName'] имеет индекс под названием «ошибка», который помогает.

if($_FILES['files']['error'][0] == 4){
     echo you didn't upload an image
}

Это проверит, загрузил ли пользователь изображение.

[0] - это Imagen 1 в массиве файлов, это массив, потому что вы используете файлы [] в форме.

Вы можете использовать if с оператором или или и для воспроизведения, если вы хотите, чтобы пользователь «должен» загружать ВСЕ изображения, используйте это

if($_FILES['files']['error'][0] == 4 or $_FILES['files']['error'][1] == 4 or $_FILES['files']['error'][2] == 4){ echo "You must upload ALL images";}

просто измените или на и, чтобы требовалось хотя бы одно изображение

person Kevin Guanche Darias    schedule 15.08.2013