У меня есть следующая форма отправки html. Эта форма представляет собой PHP_SELF и сохраняет входные данные в виде массива в $_POST.
<html>
<body>
<form method="post" action="<?php echo htmlentities($PHP_SELF); ?>">
<fieldset>
<legend>Direct Bill Information:</legend>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" /> </br>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" /> </br>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" /> </br>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" /> </br>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" /> </br>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" /> </br>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" /> </br>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" /> </br>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" /> </br>
DB #: <input type="int" name="db_num[]" /> DB Amount: <input type="int" name="db_amnt[]" />
</fieldset>
<input type="submit" value="submit" name="submit" />
</form>
</body>
</html>
У меня есть таблица MySQL с полями 'db_num' и 'db_amnt', и я хочу вставить в таблицу все входные данные из массива. Я осмотрелся, и «взорваться» кажется лучшим способом, но после долгих исследований я все еще не могу заставить его работать. Весь PHP выполняется и завершается без ошибок, однако вместо отображения всех 10 строк обоих столбцов он просто отображает 2 строки двух столбцов со значениями = 0 для всех записей. Это код, который я использую:
$sql2 = array();
foreach($_POST as key=>$value)
{
if(key != 'submit')
{
if($value != '')
{
$sql2[] = '("'.mysql_real_escape_string($value['db_num']).'", "'.$value['db_amnt'].'")';
}
}
}
mysql_query('INSERT INTO ' .$tablename_db. '(db_num, db_amnt) VALUES '.implode(',', $sql2));
Я провел небольшую отладку и повторил $value в цикле foreach, и оказалось, что он отображает только три термина; «Массив», «Массив» и «отправить». Дальнейшие проверки показали, что единственный способ получить значения из формы отправки для отображения — это выполнить цикл foreach через $_POST[db_num] и $_POST[db_amnt] вместо просто $_POST. Я не совсем уверен, почему это происходит и как это исправить. Это мой первый код на PHP, и я учусь на ходу. Я очень ценю любую помощь, которую я могу получить!
key
предположительно должно быть$key
. Наконец, плохая идея выгружать данные поста в запрос MySQL. Что, если кто-то изменил DOM или иным образом вмешался в форму? Вы позволяете им потенциально сломать ваш запрос или того хуже. Сделайте надлежащие проверки и проверки. - person Mitya   schedule 30.07.2012