Запрос MySQL с помощью PHP и выпадающего меню JavaScript

0

Я просматривал все несколько дней, но не нашел решения моей проблемы. Я пишу PHP для запроса из базы данных MySQL, которую я установил на моем сервере WAMP. Я также изучаю PHP и HTML javascript по мере того, как я иду, поэтому синтаксис обоих языков по-прежнему незнакомо мне.

Моя цель состоит в том, чтобы вывести селекторный блок, написанный на Java, который позволяет пользователю выбирать фильтр для применения к выбранному запросу, примерно так:

SELECT * from exampletable WHERE header = "selected_option" 

Где "exampletable" - это таблица, существующая в базе данных SQL, "header" - это столбец внутри этой таблицы, а "выбранный вариант" - это выбор пользователя из раскрывающегося списка.

Я пробовал писать различные HTML-формы с действиями, которые вызывают PHP файл, содержащий SQL-запрос, с использованием $_POST, но ничего не работает. Любые предложения и примеры решений были бы потрясающими.

Спасибо!

index.php(index.php - это интерфейс с интерфейсом пользователя)

<!DOCTYPE HTML>
<html>
<form action="search.php" method="post">
    <select name="family">
            <option value="" selected="selected">Any family</option>
                <option value="capacitory">capacitor</option>
                <option value="resistor">resistor</option>
                <option value="ferrite bead">ferrite bead</option>
    </select>
    <input name="search" type="submit" value="Search>
</form>
</html>

search.php(search.php получает выбранное значение параметра и передает его в запрос MySQL)

<!DOCTYPE HTML>
<html>
<head>
<style>
table {
    width: 100%;
    border-collapse: collapse;
}

table, td, th {
    border: 1px solid black;
    padding: 5px;
}

th {text-align: left;}
</style>
</head>

<body>
<?php

$con = mysqli_connect('localhost','root','kelly188','mysql');
mysqli_select_db($con,"testv2");

$varfam = $_POST['family'];

$query = "SELECT * FROM testv2 WHERE (family = $varfam)";

$result = mysqli_query($query);

if($result)
{
while ($row=mysql_fetch_array($result)){
echo "<tr>";
echo "<td>".$row['family']."</td>";
}
} else {
die(mysqli_error());
}
?>
</body>
</html> 

Изображение 174551

  • 1
    Вы предоставили нам слишком мало кода, чтобы мы могли помочь вам там, где вы застряли. Иначе это был бы очень широкий вопрос и не по теме.
  • 0
    Я отредактирую свой пост, чтобы отобразить то, что у меня есть
Показать ещё 4 комментария
Теги:
forms

2 ответа

1
Лучший ответ

index.php

<form action="search.php" method="post">
<select name="family">
            <option value="" selected="selected">Any family</option>
            <option value="capacitory">capacitor</option>
            <option value="resistor">resistor</option>
            <option value="ferrite bead">ferrite bead</option>
</select>
<input name="search" type="submit" value="Search"/>
</form>

search.php

<?php
//////////////////////////////////
// Connect to database using PDO
$servername = "localhost"; 
$username = "test";
$password = "";
$dbname = "test_db";
$db_conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,$password);
// End of database connection
////////////////////////////////////

if(isset($_POST['search']))
{
$family = $_POST['family'];
if(empty($_POST['family']))
{
$stmt = $db_conn->prepare("SELECT * FROM testv2");
$stmt->execute();
//we get the data
while($data = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo $data['family'];
echo "<hr>";    
}   
}
else
{   
$stmt = $db_conn->prepare("SELECT * FROM testv2 WHERE family = :family");
$stmt ->bindParam(':family', $family);
$stmt->execute();
//we get the data
while($data = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo $data['family'];
echo "<hr>";    
}
}
}
?>
  • 0
    Спасибо за ваш подробный ответ, я попытался реализовать его с моей базой данных. Я считаю, что соединение работает, но я просто не вижу никаких результатов при выборе одного из вариантов в раскрывающемся списке. Я извиняюсь, если я тупой и упускаю что-то фундаментальное.
  • 1
    Мой плохой, я буду редактировать код в секунду
Показать ещё 9 комментариев
3

Вы должны использовать подготовленный оператор для предотвращения SQL-инъекции. Функция mysql_fetch_array была удалена из последних версий PHP. Что-то более похожее на следующее было бы более идеальным.

if ($stmt = $con->prepare("SELECT * FROM testv2 WHERE (family = ?)")) {

    $stmt->bind_param("s",  $_POST['family']);
    $stmt->execute();

    $result = $stmt->get_result();

    while ($row = $result->fetch_assoc()) {

        echo "<tr>";
        echo "<td>".htmlentities($row['family'])."</td>";
        echo "</tr>";

    }   

    $stmt->close();
}

См. Документацию по PHP: http://php.net/manual/en/mysqli.prepare.php

  • 2
    Гораздо лучший совет, чем просто заключать в кавычки переменную.
  • 0
    Спасибо за предложение, я действительно не думаю, что мне нужно беспокоиться о внедрении, поскольку мой сценарий никогда не будет запущен на сервере с публичным доступом, а база данных MySQL, с которой я запрашиваю, не содержит никакой конфиденциальной информации. Я храню информацию инвентаризации, которую можно найти на нескольких веб-сайтах

Ещё вопросы

Сообщество Overcoder
Наверх
Меню