Я использую довольно длинную форму HTML, чтобы обновлять множество деталей, относящихся к продукту, - для краткости я не буду делиться формой в полном объеме. Однако, для целей иллюстрации здесь отрывок:Как динамически генерировать инструкцию MYSQL UPDATE на основе определенных переменных из HTML FORM
HTML FORM
<form name="form1" method="post" action="update_ac.php">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td>
<input name="season" type="text" class="button_select" id="season" value="<?=$rows['season']; ?>" size="10" />
<input name="restock" type="checkbox" id="restock" value="on" <?php if($rows['restock']=='on') { echo 'checked="checked"'; } ?>/>
// other fields
</td>
</tr>
</table>
</form>
Мой вопрос при размещении формы в update_ac.php
- как я могу динамически генерировать оператор обновления MYSQL на основе полей, которые завершены ?
Вот пример моей страницы действия формы:
PHP ФОРМА Действие
<?php
foreach ($_POST as $key => $value) {
$$key = $value;
}
$sql= mysql_query ("
UPDATE product SET
title='".$title."',
rating='".$rating."',
season='".$season."',
brand_id='".$brand_id."',
category='".$category."',
... etc ");
?>
Я не хочу, чтобы объявить каждое поле, которое, возможно, может понадобиться обновление в операторе UPDATE , Я бы хотел, чтобы оператор UPDATE обращался только к соответствующим полям, учитывая наличие определенных PHP-переменных, отправленных из формы.
На данный момент я получаю много NOTICE: Undefined variable x
, где были пустые поля при отправке формы.
Надеюсь, это имеет смысл - немного длинный ветер.
Любые советы? Благодаря
UPDATE
Исходя из @ ответ Styphon в - я его немного изменен, чтобы включить условие WHERE
в конце запроса.
$query = "UPDATE product SET";
$comma = " ";
foreach($_POST as $key => $val) {
if(! empty($val)) {
$query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
$comma = ", ";
}
}
$product_id = $_POST['product_id'];
$query = $query . "WHERE product_id = '".$product_id."' ";
Обратите внимание на 'isset' возможно> – Fluffeh
@Fluffeh - это не решает мою проблему, так как мне нужно будет проверить каждую возможную переменную на ISSET. Я пытаюсь избежать объявления более 50 переменных. – aphextwix