флажок не работает (пытается сделать фильтр поиска) Переполнение стека

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

<?php
include "connect.php";
$sql="SELECT * FROM websiteusers ";
if (isset($_POST['submit'])) {

$searchgender=$_POST['gender'];
$searchethnicity=$_POST['ethnicity'];

$sql .= "WHERE gender = '{$searchgender}' ";
$sql .= " AND ethnicity = '{$searchethnicity}'";

}

$query=mysql_query($sql) or die(mysql_error());

?>

<form name="form" action="search.php" method="post">
<table>
<tr>
<td>
Gender:
</td>
<td>
<input type="checkbox" name="gender" value="male">Male<br>
<input type="checkbox" name="gender" value="female">Female
</td>
</tr>
<tr>
<td>
Ethnicity:
</td>
<td>
<input type="checkbox" name="ethnicity" value="black">Black<br>
<input type="checkbox" name="ethnicity" value="hispanic">Hispanic

</td>
</tr>
</table>
<p><input type="submit" value="search profiles" name="search"></p>
</form>

0

Решение

Место (переименовать в) if (isset($_POST['search'])) { (см. примечания, которые следуют) выше
$sql="SELECT * FROM websiteusers ";,

У вас также нет элемента формы с именем submit но у вас есть кнопка отправки под названием search

<input type="submit" value="search profiles" name="search">

Так что меняй if (isset($_POST['submit'])) в if (isset($_POST['search'])) это наиболее вероятная причина, по которой он не работает для вас.

Выполнение вашего кода основано на этом условном утверждении.

имеющий Отчет об ошибках на подал бы сигнал Undefined index submit...

error_reporting(E_ALL);
ini_set('display_errors', 1);

Вам также нужно просмотреть результаты с while петля.

что-то вроде

while($results = mysql_fetch_array($query)){

echo $results['gender'] . "<br>" $results['ethnicity'] . "<br>";

}

редактировать

Вот mysqli_* метод вместо mysql_* что я тестировал и работал. Также включен троичный оператор и mysqli_real_escape_string() для ваших переменных поиска.

Nota: Тернарный оператор избежит получения Undefined index... предупреждение, если один из флажков не установлен.

Изменено search.php в action="" так как все внутри одной страницы.

Примечание: Вы можете использовать OR вместо AND для этой линии, но использовали ANDOR был закомментирован ниже:

$sql .= " AND ethnicity = '{$searchethnicity}'";

Код:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$DB_HOST = "localhost"; // replace but do not use mysql_ method.
$DB_NAME = "xxx"; // replace
$DB_USER = "xxx"; // replace
$DB_PASS = "xxx"; // replace

$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
die('Connection failed [' . $conn->connect_error . ']');
}

$sql="SELECT * FROM websiteusers ";
if (isset($_POST['submit'])) {$searchgender = isset($_POST['gender']) ? mysqli_real_escape_string($conn,$_POST['gender']) : '';

$searchethnicity = isset($_POST['ethnicity']) ? mysqli_real_escape_string($conn,$_POST['ethnicity']) : '';$sql .= "WHERE gender = '{$searchgender}' ";

//      $sql .= " OR ethnicity = '{$searchethnicity}'"; // either use this

$sql .= " AND ethnicity = '{$searchethnicity}'"; // or this, not both

}

$query=mysqli_query($conn,$sql) or die(mysqli_error($conn));

?>

<form name="form" action="" method="post">
<table>
<tr>
<td>
Gender:
</td>
<td>
<input type="checkbox" name="gender" value="male">Male<br>
<input type="checkbox" name="gender" value="female">Female
</td>
</tr>
<tr>
<td>
Ethnicity:
</td>
<td>
<input type="checkbox" name="ethnicity" value="black">Black<br>
<input type="checkbox" name="ethnicity" value="hispanic">Hispanic

</td>
</tr>
</table>
<p><input type="submit" value="search profiles" name="submit"></p>
</form>

<table width="70%" cellspacing="5" cellpadding="5">
<tr>
<td><strong>name</strong></td>
<td><strong>gender</strong></td>
<td><strong>ethnicity</strong></td>
</tr>
<?php while ($row=mysqli_fetch_array($query)) { ?>
<tr>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['gender']; ?></td>
<td><?php echo $row['ethnicity']; ?></td>
</tr>
<?php } ?></table>

Примечания:

  • Для того чтобы AND для правильной работы необходимо установить один из флажков.

  • Если отмечены все четыре флажка, то он не будет работать с AND, Вам нужно будет использовать OR для того, чтобы он работал должным образом или реструктурировать способ, которым вы запрашиваете вашу БД.

Вы даже можете попробовать LIKE пункт, используя OR или же ANDопять же, в зависимости от того, по каким критериям вы хотите, чтобы ваш запрос был.

$sql .= "WHERE gender LIKE '{$searchgender}' ";
$sql .= " OR ethnicity = '{$searchethnicity}'";

Слишком много комбинаций для включения. Вам нужно будет попробовать их и смешать.

1

Другие решения

<?php
include "connect.php";
$sql="SELECT * FROM websiteusers WHERE 0 OR ";
if (isset($_POST['submit'])) {

if (isset($_POST['gender'])){
$searchgender_raw= $_POST['gender'];
foreach ($sg in $searchgender_raw)
$searchgender.= " '" . $sg . "',";
}
$searchgender = rtrim($searchgender, ",");
if (isset($_POST['ethnicity'])){
$searchethnicity_raw= $_POST['ethnicity'];
foreach ($se in $searchethnicity_raw)
$searchethnicity.= " '" . $se . "',";
}
$searchethnicity = rtrim($searchethnicity, ",");$sql .= " WHERE gender IN ({$searchgender}) ";
$sql .= " AND ethnicity IN ({$searchethnicity})";

}
$query=mysql_query($sql) or die(mysql_error());

?>

Теперь дайте мне знать, если вы не понимаете код

0

РЕДАКТИРОВАТЬ:
НОВЫЙ КОД:
привет, это мой новый код, и фильтр мужской и женский работает, но этническая принадлежность дает мне «неопределенный индекс». Вы также заметите, что у меня есть две строки запроса. Это потому, что код внутри первого бита кода, очевидно, не может быть достигнут кодом внизу. Хорошо, вот мой новый код.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$DB_HOST = "localhost";
$DB_NAME = "mysite";
$DB_USER = "root";
$DB_PASS = "***"; // password edited out

$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
die('Connection failed [' . $conn->connect_error . ']');
}$sql="SELECT * FROM websiteusers ";
if (isset($_POST['submit'])) {
$searchgender = isset($_POST['gender'])  ? mysqli_real_escape_string($conn,$_POST['gender']) : '';

$searchethnicity = isset($_POST['ethnicity'])  ? mysqli_real_escape_string($conn,$_POST['gender']) : '';

$sql .= "WHERE gender = '{$searchgender}'";
$sql .= " OR ethnicity = '{$searchethnicity}' ";
}

$query=mysqli_query($conn,$sql) or die(mysqli_error($conn));?>

<?php
$query=mysqli_query($conn,$sql) or die(mysqli_error($conn));
?>

<form name="form" action="" method="post">
<table>
<tr>
<td>
Gender:
</td>
<td>
<input type="checkbox" name="gender" value="male">Male<br>
<input type="checkbox" name="gender" value="female">Female
</td>
</tr>
<tr>
<td>
Ethnicity:
</td>
<td>
<input type="checkbox" name="ethnicity" value="black">Black<br>
<input type="checkbox" name="ethnicity" value="hispanic">Hispanic

</td>
</tr>
</table>
<p><input type="submit" value="search profiles" name="submit"></p>
</form><table width="70%" cellspacing="5" cellpadding="5">
<tr>
<td><strong>name</strong></td>
<td><strong>gender</strong></td>
<td><strong>ethnicity</strong></td>
</tr>
<?php while ($row=mysqli_fetch_array($query)) { ?>
<tr>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['gender']; ?></td>
<td><?php echo $row['ethnicity']; ?></td>
</tr>
<?php } ?>

</table>
0