2014-11-09 2 views
0

Как я могу обновить базу данных со значениями из массива? Например, скажем, мы получили базу данных с тремя столами:Обновление базы данных MySQL со значениями массива

Питание: mealnr (PK), имя, род

Ингредиенты: ingredientnr (PK), название, акции

Состав: foodnr (FK), componentmentnr (FK), количество

Я заполнил базу данных несколькими блюдами и ингредиентами. Каждое блюдо состоит из нескольких ингредиентов. Шеф-повар решает, что вам нужно всего 75 г ингредиента х вместо 100 г для еды, поэтому его необходимо изменить в базе данных. Конечно, это можно сделать с помощью SQL-команд, но я хочу сделать это, используя форму в PHP.

Сначала я сделал страницу, на которой отображаются все блюда. Еда может быть отредактирована с помощью кнопки редактирования рядом с ней и на основе еды, вы можете изменить количество одного или нескольких ингредиентов для этого конкретного приема пищи. На странице редактирования все имена ингредиентов и суммы отображаются в таблице. Поля количества - это текстовые поля, которые можно редактировать.

Я сделал этот скрипт, но я не знаю точно, как я могу обновить свою базу данных значениями массива. Я пробовал его с помощью foreach-loop, но он не работает. Может кто-нибудь мне помочь?

<?php 
$conn = mysql_connect('localhost', 'root', ''); 
mysql_select_db("eatit", $conn); 

$id = $_REQUEST['mealnr']; 

$result = mysql_query("SELECT meals.name AS mealname, structure.amount, ingredients.name AS  ingredientname 
FROM Meals, Structure, Ingredients 
WHERE meals.mealnr = structure.mealnr 
AND structure.ingredientnr = ingredients.ingredientnr 
AND meals.mealnr = '$id'"); 

if(isset($_POST['save'])) 
{ 
$new_amount = $_POST['amount[]']; 
foreach ($new_amount as $value) { 
mysql_query("UPDATE structure SET amount ='$value', WHERE mealnr = '$id'") 
      or die(mysql_error()); 
    } 
} 
mysql_close($conn); 
?> 

<p><strong>Ingredients:</strong></p> 
<?php 
echo "<table>"; 
echo "<tr>"; 
echo "<th>Ingredient</th>"; 
echo "<th>Amount (gr)</th>"; 
echo "</tr>"; 
while($ingredient = mysql_fetch_array($result)) 
{ 
echo "<tr>"; 
echo "<td>"; 
echo $ingredient['ingredientname']; 
echo "</td>"; 
echo "<td>"; 
echo '<input type="text" formmethod="post" name ="amount[]" value="' . $ingredient['amount'] . '" />'; 
echo "</td>"; 
echo "</tr>"; 
} 
?> 

<input type="submit" name="save" value="save" /> 
+1

Ну, первое, что вам нужно сделать с места в карьер, это прекратить попытки использовать ** mysql _ *** в качестве устаревшего ... вы должны переключиться на ** mysqli _ *** или ** PDO ** и посмотреть параметризуя их, поскольку выбор/обновление таблицы с переменной (которая может быть введена пользователем в будущем) оставляет вас уязвимой для SQL-инъекции (ее всегда лучше практиковать правильный путь для производственной среды. –

+2

html form name 'name =" amount [] "' is '! =' To '$ _POST ['amount []']'. должен быть просто '$ _POST ['amount']' – Ghost

ответ

0

В вашей HTML разметки вы объявили элементы, крепящие имя amount как массив с помощью amount[].

Таким образом, в вашем PHP-код, который получает данные этого достаточно просто обратиться к суммам таким образом:

$new_amount = $_POST['amount']; 

вместо:

$new_amount = $_POST['amount[]']; // in fact, this is wrong 

Ваш Еогеасп прекрасно, вы должны добавить некоторые проверки, так что $value фактически содержит значение, которое вы ожидаете, например, int, float или не менее нуля (или любые проверки, которые вы считаете необходимыми).

foreach($new_amount as $value){ 
    if($value != '' && $value >= 1){ 
     //sql statements goes here. 
     } 
    } 

Получение данных FORM таким образом, а затем непосредственно вводя результат в вашем SQL заявление всегда опасно:

$id = $_REQUEST['mealnr']; 

Если вы заявляете, что вы ожидаете целое (как идентификаторы должны быть) перед тем, как вы непосредственно введете код в свой SQL-оператор, вы уже написали более безопасный код.

$id = (int)$_REQUEST['mealnr']; 

Также, для записи - библиотека mysql_ * устарела. Как указано в комментариях, попробуйте вместо этого использовать PDO или mysqli - действительно!

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