2013-03-27 3 views
0

Я добавляю данные с помощью скрытого поля. Сначала он работает и отображает всю необходимую мне информацию в моей базе данных. Однако, когда я снова работал над ним, он только фиксирует то же имя, что и предыдущие, которые уже были записаны ранее.используя скрытое поле для добавления данных в базу данных

Например, есть изображение яблока, и когда я добавляю его, оно должно показывать имя как яблоко. Затем, когда я нажимаю на изображение груши, ясно, что в моей базе данных должно быть указано «груша». Но вместо «груши» это проявляется как яблоко. Кто-нибудь знает, почему?

<form action="addOrder.php" method="post"> 
<td class="timgG"><h4><img src="apple.jpg" style="vertical-align: text-bottom;" title="Apple"/> Apple <br> 
<input type="hidden" name="op" value="add"> 
<input type="hidden" name="name" value="Apple"> 
<input type="hidden" name="price" value="0.50"> 
<input type="submit" value="Add to Cart"> 
</h4></td> 

<td class="timgG"><h4><img src="pear.jpg" style="vertical-align: text-bottom;" title="Pear"/> Pear <br> 
<input type="hidden" name="op" value="add"> 
<input type="hidden" name="name" value="Pear"> 
<input type="hidden" name="price" value="0.50"> 
<input type="submit" value="Add to Cart"> 
</h4></td> 
</form> 


<?php 
      if (isset($_SESSION['user_id'])) { 
       //$order_id = $_POST['order_id']; 
       $name = $_POST['name']; 
       //$quantity = $_POST['quantity']; 
       $price = $_POST['price']; 

       $query = "INSERT INTO order_details (name,price) VALUES ('" . $name . "','" . $price . "')"; 
       $status = mysqli_query($link, $query) or die(mysqli_error($link)); 

       if ($status) { 
        $msg = "Item has been added.<br />"; 
        $msg .= "<a href='product.php'>Back</a></p>"; 
       } 
      } else { 
       $msg = "There was an error processing the form.Please try again <a href=girls.php>Back"; 
      } 
      ?> 
+0

его потому, что ваш Входы 'html' имеют одно и то же имя:« имя ». – chriz

+0

Предупреждение: возможна инъекция SQL! Используйте 'mysqli_real_escape_string' или, лучше, используйте параметризованные запросы. –

+0

Потому что «яблоко» - это первый элемент массива. Груша вторая. – bodi0

ответ

0

Используйте индивидуальные номера <form> для каждого элемента. Текущая настройка (как вы заметите, если вы установите другие параметры по-разному) всегда использует первое определение скрытых входов внутри вашей формы.

Попробуйте использовать

<form action="addOrder.php" method="post"> 
<td class="timgG"><h4><img src="apple.jpg" style="vertical-align: text-bottom;" title="Apple"/> Apple <br> 
<input type="hidden" name="op" value="add"> 
<input type="hidden" name="name" value="Apple"> 
<input type="hidden" name="price" value="0.50"> 
<input type="submit" value="Add to Cart"> 
</h4></td> 
</form> 

<form action="addOrder.php" method="post"> 
<td class="timgG"><h4><img src="pear.jpg" style="vertical-align: text-bottom;" title="Pear"/> Pear <br> 
<input type="hidden" name="op" value="add"> 
<input type="hidden" name="name" value="Pear"> 
<input type="hidden" name="price" value="0.50"> 
<input type="submit" value="Add to Cart"> 
</h4></td> 

+0

спасибо! он работает (: @Squeezy – nurf

0

Вы используете один и тот же name атрибут для различных продуктов в той же форме, так что вы будете перезаписывать ваши поля формы.

Вы можете использовать массивы, чтобы иметь несколько элементов с таким же именем:

<input type="hidden" name="name[]" value="Apple"> 
// etc. 

А потом в PHP, $_POST['name'] будет массив, а также.

И вы действительно должны переключиться на подготовленные заявления.

0

HTML Ваши входы имеют один и тот же name:

<input type="hidden" name="name" value="Apple"> 

<input type="hidden" name="name" value="Pear"> 

И поскольку Apple является первым, что это первый один, который получает обрабатывается PHP.

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

+0

если мой код должны были быть быть <входной тип = «скрытый» имя = значение «яблоко» = «яблоко»> <входной тип = «скрытый» имя = значение «груша» = «груша»> его ничего не фиксирует в моей базе данных, кроме цены предметов .. @chriz – nurf

+0

, если вы назовете его 'name =" apple "' then do 'if (isset ($ _ POST ['apple'])) {$ apple = $ _POST ['apple'];} ', тогда вы можете вставить' $ apple' в базу данных. вы можете сделать это с 'pear' aswell – chriz

0

использовать два различных форм

<form action="addOrder.php" method="post"> 
<td class="timgG"><h4><img src="apple.jpg" style="vertical-align: text-bottom;" title="Apple"/> Apple <br> 
<input type="hidden" name="op" value="add"> 
<input type="hidden" name="name" value="Apple"> 
<input type="hidden" name="price" value="0.50"> 
<input type="submit" value="Add to Cart"> 
</h4></td> 
</form> 
<form action="addOrder.php" method="post"> 
<td class="timgG"><h4><img src="pear.jpg" style="vertical-align: text-bottom;" title="Pear"/> Pear <br> 
<input type="hidden" name="op" value="add"> 
<input type="hidden" name="name" value="Pear"> 
<input type="hidden" name="price" value="0.50"> 
<input type="submit" value="Add to Cart"> 
</h4></td> 
</form> 

также, как несколько человек упомянули использование mysqli_real_escape_string() при вставке что-то в вашей базе данных