вставить значение формы html в базу данных mysql

Я хочу вставить значение выбранной «формы выбора» в мою базу данных mysql.

Как я могу получить правильное значение этого?

<form action='' method='post'> <select name="myselectbox"> <option name="myoption1" value="myoption1">myoption1</option> <option name="myoption2" value="myoption2">myoption2</option> <option name="myoption3" value="myoption3">myoption3</option> <option name="myoption4" value="myoption4">myoption4</option> </select> <input type='submit' value='submit'/> </form> 

что-то вроде того? (этот не работал явно ..)

 $sql = "INSERT INTO Entries (myoption1) VALUES ('$_POST[myselectbox]')"; 

Solutions Collecting From Web of "вставить значение формы html в базу данных mysql"

вы должны перенести свой тег select в тег формы.

 <form action='' method='post'> <select name="myselectbox"> <option name="myoption1" value="myoption1">myoption1</option> <option name="myoption2" value="myoption2">myoption2</option> <option name="myoption3" value="myoption3">myoption3</option> <option name="myoption4" value="myoption4">myoption4</option> </select> <input type='submit' value='submit'/> </form> 

после отправки формы вы получите переменную post как $_POST['myselectbox'] которая может быть добавлена ​​в запрос mysql, как вы уже это делали. но для лучшего способа просто не добавляйте его так, как нужно, но проверьте, что форма отправлена, а пост-переменные доступны или нет до добавления. например:

 if(!empty($_POST['myselectbox'])){ /*.. do your query section... */ } 

у вас есть ошибка в вашей команде SQL, $_POST требует, чтобы имена html были обернуты в кавычки вроде => $_POST['some_name'] :

$sql = "INSERT INTO Entries (myoption1) VALUES ('$_POST[myselectbox]')"; /* ^^ missing quotes here*/

попробуйте так:

 $sql = "INSERT INTO Entries (myoption1) VALUES (".$_POST['myselectbox'].")"; 

Предполагая, что ваша форма верна, и она отправляет значения, которые вы хотите использовать для своего сценария.

(Вы посыпали свой код echo чтобы убедиться, что это так?)

Самый простой надежный способ отправки данных в SQL-оператор и, следовательно, в mysql – использовать подготовленные операторы.

Взгляните сюда: http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

В основном вы пишете инструкцию SQL без ваших переменных в ней (заменены на ? ), А затем передаете mysql для выполнения операторов с вашими переменными позже. Это позволяет избежать необходимости избегать строк и беспокоиться о том, как строить вещи.

Например, у вас может быть:

 // Connect to mysql $mysqli = new mysqli('where your server is', 'my_user', 'my_password', 'world'); // Build the initial statement - easier to read as you don't have your string concatenation here $stmt = $mysqli->prepare( "INSERT INTO Entries (myoption1) VALUES (?)" ); // Tell mysql that the '?' should be replaced with the value in your post array $stmt->bind_param( "s", $POST['myselectbox'] ); // Execute the statement $stmt->execute() 

Очевидно, вы также должны добавить обработку ошибок, но документация охватывает основы этого.

SQL-инъекция

Основная причина, по которой использование подготовленных операторов является хорошей идеей, заключается в том, что она позволяет избежать атак SQL-инъекций.

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

Атаки SQL Injection – это ситуации, когда кто-то пытается изменить оператор SQL, который запускается путем «ввода» другого SQL в ваш оператор.

Используя ваш код в качестве примера, вы можете выполнить это заявление:

 $sql = "INSERT INTO Entries (myoption1) VALUES ('". $_POST['myselectbox'] ."')"; 

Который обычно получал бы (предположим) что-то вроде myoption1 .

Это приведет к тому, что SQL будет:

 INSERT INTO Entries (myoption1) VALUES ('myoption1'); 

Если кто-то решил, они могли бы отправить '='' OR '1'='1

Это приведет к тому, что SQL будет:

 INSERT INTO Entries (myoption1) VALUES (''='' OR '1'='1'); 

Что (очевидно) очень отличается.

Или, что еще хуже, отправьте '=')'; DROP TABLE Entries WHERE (''=' '=')'; DROP TABLE Entries WHERE (''='

Это приведет к тому, что SQL будет:

 INSERT INTO Entries (myoption1) VALUES (''=''); DROP TABLE Entries WHERE (''=''); 

Использовать подготовленные заявления

Проще говоря, но используя подготовленные инструкции, вы сообщаете mysql, что отправляемая вами буква – это строка, которая будет использоваться в качестве параметра. Его никогда нельзя рассматривать как часть самого утверждения, и поэтому вышеизложенное просто невозможно.

Гораздо безопаснее.

Надеюсь, это станет более ясным. Если вы хотите получить дополнительную информацию, я предлагаю вам изучить ее самостоятельно …

 $value = mysql_real_escape_string($_POST['myselectbox']); $sql = "INSERT INTO Entries (myoption1) VALUES ($value)";