2016-03-01 4 views
0

Я пытаюсь создать форму вставки, в которой пользователь может вставить информацию о новом продукте (сладком) в базу данных MYSQL.Недопустимый номер параметра: параметр не определен error

Изображение продукта вставляется в указанный каталог item_images/$product_image.

Однако этот элемент не вставлен в базу данных и получают следующее сообщение об ошибке:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: 
Invalid parameter number: parameter was not defined' in /home/k1335948/www/loginregister-master/insert_product.php:168 
Stack trace: #0 /home/k1335948/www/loginregister-master/insert_product.php(168): PDOStatement->execute(Array) #1 {main} 
thrown in /home/k1335948/www/loginregister-master/insert_product.php on line 168 

Подключение к базе данных в порядке, как другие мои заявления работать для других элементов.

У меня нет большого опыта работы с PDO, и я искал решения как здесь, так и в Интернете.

if(isset($_POST['insert_post'])) { 

    $product_title = $_POST['title']; 
    $product_cat = $_POST['item_cat']; 
    $product_brand = $_POST['item_brand']; 
    $product_price = $_POST['price']; 
    $product_desc = $_POST['description']; 
    $product_keywords = $_POST['keyword']; 

    // retrieving image 
    $product_image = $_FILES['product_image']['name']; 
    $product_image_tmp = $_FILES['product_image']['tmp_name']; 

    move_uploaded_file($product_image_tmp,"item_images/$product_image"); 

    $insert_product = "INSERT INTO items(photo, title, description, keyword, price, item_category, item_brand) VALUES (:product_image, :product_title, :product_desc, :product_keywords, :product_price, :product_cat, :product_brand)"; 

    $insert_pro = $db->prepare($insert_product); 
    $results = $insert_pro->execute(array(
    ":product_image" => $product_image, 
    ":title" => $product_title, 
    ":product_desc" => $product_desc, 
    ":product_keywords" => $product_keywords, 
    ":product_price" => $product_price, 
    ":product_cat" => $product_cat, 
    ":product_brand" => $product_brand)); 

    if($insert_pro){ 

    echo "<script>alert('Product has been added sucessfully')</script>"; 
    echo "<script>window.open('insert_product.php','_self')</script>"; 
    } 
} 

(Edited) Вот моя форма:

<form action ="insert_product.php" name="insert_form" method="post" enctype = "multipart/form-data"> 

    <table align="center" width="100%" border="2" bgcolor="pink"> 

    <tr> 
     <td align="right"><b>Product Title: </b></td> 
     <td> 
     <input type="text" name="product_title" /></td> 
    </tr> 

    <tr> 
     <td align="right"><b>Product Category: </b></td> 
     <td> 
     <select name="product_cat" /> 
     <option>Select Category: <option> 

     <?php getCat(); ?> 

     </select> 
     </td> 
    </tr> 

    <tr> 
     <td align="right"><b>Product Brand: </b></td> 
     <td> 
     <select name="product_brand" /> 
     <option>Choose Brand: <option> 

     <?php getBrand(); ?> 

     </select> 
     </td> 
    </tr> 

    <tr> 
     <td align="right"><b>Product Image: </b></td> 
     <td> 
     <input type="file" name="product_image" /></td> 
    </tr> 

    <tr> 
     <td align="right"><b>Product Price: </b></td> 
     <td> 
     <input type="text" name="product_price" /></td> 
    </tr> 

    <tr> 
     <td align="right"><b>Product Description: </b></td> 
     <td> 
     <textarea name="product_desc" cols="20" rows="10"></textarea></td> 
    </tr> 

    <tr> 
     <td align="right"><b>Product Keywords: </b></td> 
     <td> 
     <input type="text" name="product_keywords" /></td> 
    </tr> 

    <tr align="center"> 
     <td colspan="8"><input type="submit" name="insert_post" value="Insert New Product" /></td> 
    </tr> 

    </form> 

ответ

0

Ошибка при подготовке SQL или, по крайней мере, на функции execute. Вы не связываете все запрошенные значения с определенными параметрами в своей строке SQL.

В частности, :product_title в SQL и :title в вашем исполнении method.

$insert_pro->execute(array(
    ":product_image" => $product_image, 
    ":product_title" => $product_title, 
    ":product_desc" => $product_desc, 
    ":product_keywords" => $product_keywords, 
    ":product_price" => $product_price, 
    ":product_cat" => $product_cat, 
    ":product_brand" => $product_brand 
)); 

И это должно быть:

if($results){ 
    // product has been successfully added. 
} 
+0

Я внес изменения в код, где указано, однако теперь я получаю эту новую ошибку: Ошибка синтаксиса: неожиданный '[', expecting ')' – Mani

+0

Возможно, вы используете более старую версию PHP. Измените '[arraydata]' на 'array (arraydata)' – Xorifelse

+0

Это версия, которую я использую: Текущая версия PHP: 5.2.5. Я также внес изменения, но ошибка все еще существует. – Mani

0

Мои имена формы не соответствие имен в моей таблице базы данных -items-. Все, что мне нужно было сделать, это скорректировать имена, соответствующие тем, которые есть в таблице -items. Сумасшедшие ошибки, но простое решение. :) Спасибо за помощь в любом случае @Xorifelse.

+0

Я действительно не понимаю этого, ** html имена форм ** не соответствуют именам столбцов ** в базе данных **? Эти два языка даже не общаются друг с другом. Правильная проблема заключается в том, что '$ _POST ['title']' имеет значение null, потому что в вашем вводе формы HTML используется другое имя 'name =" product_title ", поэтому' $ _POST ['product_title'] 'было бы решением. – Xorifelse

Смежные вопросы