Как "красиво" занести значения из формы

jon4god

Гуру форума
Регистрация
13 Авг 2009
Сообщения
224
Реакции
51
Уважаемые эксперты...
Есть форма с большим количеством вводимых значений и на данный момент запрос в базу для переноса в нее значений таков:
PHP:
INSERT INTO `таблица` VALUES('','$_POST[значение]','$_POST[значение]','$_POST[значение]','$_POST[значение]','$_POST[значение]',... ,$_POST[значение]')
и так порядка 45 значений заносятся, но...
Есть ли возможность оптимизировать запрос с использованием массивов например?
 
для начала то что ты делаеш открывает дыру для msql injection.
информация в POST-е должна быть фиртрирована перед добавлением в базы.
для запроса то что можешь сделать ето:
1.

2.
потом делаешь


П.С. Не проверял для ошибок но сама идея думаю понятна.
 
А если какое-то значение в форме не введено? Конструкция фильтра и вставки значений в таблицу не нарушится?
Вообще вот что пока имею:
PHP:
if(isset($_POST['submit']))
{
			unset($_POST['button']);
			foreach($_POST as $index=>$value)
			{
			$masiv[$index] = htmlspecialchars($value);
			}
			$query = mysql_query("INSERT INTO `tab` VALUES('',$masiv)");
			if($query == 'true') 
			{
				echo "<div class=message>ИНФОРМАЦИЯ УСПЕШНО ДОБАВЛЕНА</div>";
			}
}
 
будут содержать NULL или "" т.е. не нарушиться структура.
 
А что сделать с 4 чекбоксами? Как они среагируют на эту конструкцию?
 
А если какое-то значение в форме не введено? Конструкция фильтра и вставки значений в таблицу не нарушится?
Вообще вот что пока имею:
PHP:
if(isset($_POST['submit']))
{
			unset($_POST['button']);
			foreach($_POST as $index=>$value)
			{
			$masiv[$index] = htmlspecialchars($value);
			}
			$query = mysql_query("INSERT INTO `tab` VALUES('',$masiv)");
			if($query == 'true') 
			{
				echo "<div class=message>ИНФОРМАЦИЯ УСПЕШНО ДОБАВЛЕНА</div>";
			}
}

Таким образом этого достаточно ? или ещё что-то нужно дописывать?
P.S. не подумайте что набираю посты, просто пхп учу, вот интерисуюсь разнообразными вариантами решения подобных задачь.
 
зависит от имя чекбоксов и ихняя стойность. но должно получится масив в масиве
(если в name чекбокса есть пример "<input type="checkbox" name="chk[]" />"). если нет только одна стойность.
если не сложно можешь дать mysql damp структуры таблицы и форму под хайд или на файл?


@barabula ето хватит для стандартной заявки и фильтра.

и впрочем ты проверяешь:

->if(isset($_POST['submit']))

а потом убераешь $_POST['button'].
не думаю что у формы должны быти 2 бутона для отправки информации :D (может я не прав если так поправьте)

идея такая:
проверяешь нажата ли кнопка если да убераешь ее стойность из POST, потому что она ненужна для mysql запроса и выйдет ошибка.
тоже относится если есть RESET бутон.
 
хороший стиль программирования предполагает при вставке значений в таблицу, упоминать названия полей, т.к. если в таблице изменятся поля (добавятся, удалятся), ваш insert не сработает. иногда так бывает на плохо написанных движках - добавишь поле в таблицу, и двиг перестает работать. кол-во значений не соответствует количеству полей. посему хорошо бы перечислять названия полей.

например

//
$legal_variables=array(
'var1','var2','var3','field1','field2','field3','field4'
);
//наполняем массив post
reset ($_POST); $post=array_fill_keys($legal_variables, '');
while (list($k,$v)=each($_POST)){
//если имя поля не встречается в нужных, то не обрабатываем его вовсе.
if (! in_array($k,$legal_variables)){continue;}
//тут можно дополнительно обработать переменную $v - например htmlspecialchars
//trim тоже важно, иногда в посте в начале или конце встречаются пробелы
$post[$k]=addslashes(trim($v));
}

$keys=join(', ',array_keys($post);
$values='"'.join('", "',array_keys($post).'"';

$sql="insert into tablename (".$keys.") values (".$values.");";
mysql_query($sql);

Добавлено через 4 минуты
чем интересен этот код?
1. если у вас в таблице не используются значения по умолчанию, то пропуск какого-то из значений будет выдавать ошибку (cannot be NULL или как его там). этот код по умолчанию ставит не NULL значение
2. вы всегда знаете какие точно поля у вас будут обработаны - вне зависимости от количества переданных полей.
 
Так'с... Как я понял вот это убрать: unset($_POST['button']); , т.к. масло масленное получается.
А чекбоксы у меня в виде:
PHP:
<input type=checkbox id=formation_of_groups value=3 name=formation_of_groups[]> Другое
Дамп дать не могу, т.к. только пишу сейчас запрос на создание таблицы, а форма просто огромная. :) Сейчас выкину в инет то, что накодил(или нашкодил) и могу в личку адресок кинуть проекта.
 
есть второй вариант
тупейший

но мало ли, вдруг ваша задача просто перенести данные в базу

$sql="insert into table tablename (value) values (".addslashes(serialize($_POST)).")";

поле value - типа longtext
остальные поля - по вкусу :)
 
Назад
Сверху