Я пытаюсь передать значения из списка html формы <select>
в таблицу SQL. Я пробовал несколько вещей, но не могу заставить его работать.
<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>
$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.
Когда вы задаете вопросы, полезно, если вы сообщите нам, как это не работает. Вы получаете сообщение об ошибке? Получены ли данные в таблице, но не правильно? Кроме того, по этим направлениям, как вы знаете, что это не сработало. Т.е., что вы используете для проверки этого кода?