2016-08-10 2 views
-2

Я пытаюсь вставить переменные из формы в базу данных mySQL, используя подготовленный mysqli оператор. Проблема, с которой я столкнулся, заключается в том, что одна из моих переменных не требуется, и поэтому, когда я не ввожу ничего для нее в форму, я получаю сообщение об ошибке. Как правильно обработать эту переменную? Мне нужно будет использовать другое подготовленное заявление или я могу сохранить тот, который у меня есть?Работа с необязательными формами в mysqli

+1

разместить свой код и сообщение об ошибке. –

+1

Вы можете сохранить тот, который у вас есть, проверить, есть ли что-либо в указанных полях и оставить эти поля вне запроса (если у вас есть значение по умолчанию в таблице для этих полей) или назначить какое-то значение по умолчанию в запросе если эти поля пусты. – Andrew

+0

fyi, 'null' - это отличное значение для использования в качестве значения заполнителя в подготовленных запросах. PHP имеет ключевое слово 'null'. Он делает то, что вы ожидаете в переменных привязки в подготовленных запросах. т. е. не изменять запрос - просто используйте «null» в полях, которые пусты и не требуются. –

ответ

0

Сформировать ваши подготовленные заявления динамически. Если поле отсутствует, не включайте его. Например, предположим, что у вашей формы есть поля name, age и email, а заказчик отправляет name='Bo', age=27, но не имеет электронной почты. Вы могли бы сделать

$columns=['name','email','age'];//all possible columns 
$p = &$_POST; //form data, eg: ['name'=>'Bo','age'=>27] email missing 
$data=[];//data that will be inserted 

foreach($columns as $col){ 
    //add available data to $data 
    if(isset($p[$col])) $data[$col]=$p[$col]; 
}  
$insertCols = '('. implode(',',array_keys($data)) .')';//result: "(name,age)"  

$insertVals = '('.trim(str_repeat('?,',count($data)),',').')';//result:"(?,?)" 
$sql = "INSERT INTO myTable $insertCols VALUES $insertVals"; 

Теперь вы можете использовать $sql сделать подготовленное заявление, и принимают значения параметров из $data

+0

из-за наличия 2-х частей формы на двух разных страницах некоторые из моих значений сохраняются в переменной $ _SESSION. Должен ли я перемещать все в массив $ _SESSION или добавлять к сообщению, и если сообщение, как я это сделаю? Будет ли это просто скрытое поле в форме? –

+0

@JoshuaGertner Я просто показал простое приложение. Вам нужно будет адаптировать его к вашим потребностям. Например, вы можете добавить vars из других источников непосредственно в '$ data', добавив еще одно условие внутри цикла:' if (isset ($ _ SESSION [$ col])) $ data [$ col] = $ _SESSION [$ col]) ' – BeetleJuice

+0

спасибо за помощь. –

0

С ответом Эндрю он прав. Чтобы разработать

При отправке формы вы можете проверить, действительно ли они существуют или являются ли они пустыми, при проверке вы можете присвоить им разные значения, чтобы не испортить ваш SQL.

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

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