как получить значения из HTML, выберите php \ sql

Я пытаюсь передать значения из списка html формы <select> в таблицу SQL. Я пробовал несколько вещей, но не могу заставить его работать.

HTML

 <select class="select-list"> <option value="volvo" class="selectval"> Volvo </option> <option value="saab" class="selectval"> Saab </option> <option value="mercedes" class="selectval"> Mercedes </option> <option value="audi" class="selectval"> Audi </option> </select> 

PHP

 $name = filter_var($_POST['name'],FILTER_SANITIZE_STRING); $email = filter_var($_POST['email'],FILTER_VALIDATE_EMAIL); $email = filter_var($email,FILTER_SANITIZE_EMAIL); $phone = filter_var($_POST['phone'],FILTER_SANITIZE_STRING); if (empty ($name)|| empty ($email) || empty ($phone) || !isset($select)) { return; } else { mysql_connect('localhost' , 'root' , ''); mysql_select_db('show_express'); $name = clean_inputs($name); $email = clean_inputs($email); $phone = clean_inputs ($phone); $sql = "INSERT INTO clients(id,name,email,phone,bands) "; $sql .= "VALUES('','$name','$email','$phone','$select')"; mysql_query($sql); if (mysql_affected_rows()) { echo true; } } function clean_inputs($input) { $clean = mysql_real_escape_string(stripcslashes($input)); return $clean; } 

Во-первых, у вас нет $select определенного / созданного в любом месте вашего кода. Итак, как вы можете его протестировать или вставить, если его нет?

Во-вторых, я полагаю, что проблема, с которой вы сталкиваетесь, заключается в том, что у вас нет атрибута name в элементе select? ( Пожалуйста, укажите свой код формы для проверки )

Таким образом, вам нужно создать выбор, который выглядит примерно так:

 <select name="car"> <option value="audi">Audi</option> <option value="saab">Saab</option> ....etc </select> 

Это, в свою очередь, позволяет вам получить доступ к этому элементу следующим образом:

 $select = filter_var($_POST['car'], FILTER_SANITIZE_STRING); 

Обратите внимание на атрибут name в <select> ? Да, вам нужно, чтобы получить доступ к значению.

И, как указано в комментариях, ПОЖАЛУЙСТА, избегайте использования функций mysql_* поскольку библиотека обесценивается.

Look at this comment for more information as to why you should avoid them.


И только для дополнительных точек cookie, вот пример того, как вы будете делать вставку с использованием PDO. ( Из этого ответа )

 $db = new PDO("..."); $statement = $db->prepare("insert into clients(id,name,email,phone,bands) VALUES(NULL,:name, :email, :phone, :select)"); $statement->execute(array(':name' => $name, ':email' => $email, ':phone' => $phone, ':select' => $select)); $row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator 

Вы используете переменную $ select, но она нигде не инициируется. Вам нужно использовать что-то вроде этого.

  $select = filter_var($_POST['select'],FILTER_SANITIZE_STRING); 

В следующий раз отправьте свой сценарий на стороне клиента.

Это то, что я использую:

 <?php $db_host = 'localhost'; $db_name = 'show_express'; $db_user = 'root'; // you REALLY shouldn't use root for normal access $db_pass = ''; // you REALLY need to use a password $dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_pass); if (!$dbh) { print "<p>Error connecting to database</p>"; exit; } $q_insert = $dbh->prepare( "INSERT INTO clients (name, email, phone) VALUES (?,?,?);" ); if (!$q_insert) { $err = $q_insert->errorInfo(); print "<p>Error preparing query: ".$err[2]." [".$err[0]."]</p>"; exit; } $r = $q_insert->execute(array($_POST['name'], $_POST['email'], $_POST['phone'])); if (!$r) { $err = $q_insert->errorInfo(); print "<p>Error executing query: ".$err[2]." [".$err[0]."]</p>"; exit; } print "<p>Success!</p>"; ?> 

Я настоятельно рекомендую вам начать обучение использованию PDO вместо функций mysql_ . Они имеют больше смысла, парадигма согласуется с другими языками, и полученные вами знания будут переносимыми.

Я знаю, что это всего лишь проект новичков, но не используйте пользователя root, особенно без пароля. Создайте нового пользователя с разрешениями только для базы данных show_express.

Когда вы задаете вопросы, полезно, если вы сообщите нам, как это не работает. Вы получаете сообщение об ошибке? Получены ли данные в таблице, но не правильно? Кроме того, по этим направлениям, как вы знаете, что это не сработало. Т.е., что вы используете для проверки этого кода?