如何使用通过HTML表单发送的变量显示mysql中的某些行


How to display certain rows from mysql with variable sent via HTML form

我正试图使用AND条件和用户可搜索的HTML表单从数据库中获取符合条件的某些数据,HTML表单将数据发送到搜索。

代码:

<?php
$conn = new mysqli('localhost', 'user', 'pass', 'db');
if ($conn->connect_error) die($conn->connect_error);
$conn->set_charset("utf8");
if (isset($_POST['Kohderyhmä']) &&
isset($_POST['Näytön aste']) &&
isset($_POST['Vaikutusten vahvuus']) &&
isset($_POST['Käyttökelpoisuus']) &&
isset($_POST['text']))
{
$Kohderyhmä = get_post($conn, 'Kohderyhmä');
$Näytön_aste = get_post($conn, 'Näytön aste');
$Vaikutusten_vahvuus = get_post($conn, 'Vaikutusten vahvuus');
$Käyttökelpoisuus = get_post($conn, 'Käyttökelpoisuus');
$text = get_post($conn, 'text');

    $query = "SELECT * FROM `tietokanta`
        WHERE Kohderyhmä='$Kohderyhmä' AND `Näytön aste`='$Näytön_aste' AND `Vaikutusten vahvuus`='$Vaikutusten_vahvuus' AND `Käyttökelpoisuus: luokka`='$Käyttökelpoisuus'";
         }
  $results = $conn->query($query);
if (!$results) die ("Database access failed: " . $conn->error);
$rows = $results->num_rows;
for ($j = 0 ; $j < $rows ; ++$j)
{
$results->data_seek($j);
$row = $results->fetch_array(MYSQLI_ASSOC);
echo '<h3>' . $row['Nimi'] . '</h3><br />';
echo ''  . $row['Kokonaisarvio'] .   '<br />';
echo ''  . $row['Kuvaus'] .  '<br /><br />';
}
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
<b>Kohderyhmä</b><br />
<select name="Kohderyhmä" style="width: 150px;">
<option value="Kaikki">Kaikki</option>
<option value="Pikkulapset">Pikkulapset</option>
<option value="Alle kouluikäiset">Alle kouluikäiset</option>
<option value="Alakouluikäiset">Alakouluikäiset</option>
<option value="Nuoret">Nuoret</option>
<option value="Perheet">Perheet</option>
<option value="Vanhemmat">Vanhemmat</option>
<option value="Työntekijät">Työntekijät</option>
</select>
<br />
<b>Näytön aste</b>
<select name="Näytön aste" style="width: 150px;">
<option value="Kaikki">Kaikki</option>
<option value="Vahva">Vahva</option>
<option value="Kohtalainen">Kohtalainen</option>
<option value="Heikko">Heikko</option>
<option value="Ei riittävää näyttöä">Ei riittävää näyttöä</option>
<option value="Ei arvioitu">Ei arvioitu</option>
</select>
<br />
<b>Vaikutusten vahvuus</b>
<select name="Vaikutusten vahvuus" style="width: 150px;">
  <option value="Kaikki">Kaikki</option>
  <option value="Vahva">Vahva</option>
  <option value="Kohtalainen">Kohtalainen</option>
  <option value="Heikko">Heikko</option>
  <option value="Ei vaikutusta">Ei vaikutusta</option>
  <option value="Ei arvioitu">Ei arvioitu</option>
</select>
<br />
<b>Käyttökelpoisuus</b>
<select name="Käyttökelpoisuus" style="width: 150px;">
  <option value="Kaikki">Kaikki</option>
  <option value="Vahva">Vahva</option>
  <option value="Kohtalainen">Kohtalainen</option>
  <option value="Heikko">Heikko</option>
  <option value="Ei käyttökelpoinen">Ei käyttökelpoinen</option>
  <option value="Ei arvioitu">Ei arvioitu</option>
</select>
<br />
<br />
&nbsp;
Haku:        <input type="text" name="text" />
    &nbsp; &nbsp;
<input type="submit" value="Hae" />
    </form>

我以前并没有使用PHP来联系数据库,所以PHP代码非常混乱。我对PHP的基本知识一无所知,我以前从未使用过变量、对象或任何复杂的东西。

HTML表单:变量1可变2可变3可变4可变5--->PHP脚本:从数据库中选择*其中variable1和variable2以及variable3和variable4--->显示符合标准的结果

当前代码导致error_log中出现此错误消息:PHP警告:mysqli::query((:第23行/home/user/public_html/folder/script.PHP中的空查询

我已经尝试了超过15种不同的变量和sql查询变体,但都没有成功。。

如果我们缩短您的if (isset($_POST ...,您可以清楚地看到。此指令

$results = $conn->query($query);

始终执行,无论isset是否返回true。

if (isset($_POST['Kohderyhmä']) &&
 ...)
{
  $Kohderyhmä = get_post($conn, 'Kohderyhmä');
  ...
  $query = "SELECT * FROM `tietokanta`...."
}
$results = $conn->query($query);

因此,如果只有一个字段没有正确填写,则错误始终相同:
CCD_ 2
这使得很难确定故障的真正来源。

将大括号}放在数据库逻辑后面

if (isset($_POST['Kohderyhmä']) &&
 ...)
{
  $Kohderyhmä = get_post($conn, 'Kohderyhmä');
  ...
  $query = "SELECT * FROM `tietokanta`...."
  $results = $conn->query($query);
  if (!$results) die ("Database access failed: " . $conn->error);
  $rows = $results->num_rows;
  for ($j = 0 ; $j < $rows ; ++$j)
   {
     $results->data_seek($j);
     $row = $results->fetch_array(MYSQLI_ASSOC);
     ....
   } 
}
?>

创建一个简短的测试程序,只测试数据库。仅在查询中设置真正必要的数据字段

test.php

<?php
$conn = new mysqli('localhost', 'user', 'pass', 'db');
if ($conn->connect_error) die($conn->connect_error);
$conn->set_charset("utf8");
$Kohderyhmä = "KohderyTest"; // replace with really existing values
$query = "SELECT * FROM `tietokanta` WHERE Kohderyhmä='".$Kohderyhmä."' ";
$results = $conn->query($query);
if (!$results) die ("Database access failed: " . $conn->error);
  while ($row = $results->fetch_assoc()) {
    echo "<h3>" . $row['Nimi'] . "</h3><br />";
    echo $row['Kohderyhmä'] ."<br /><br />";
  }
$results->free();
?>

添加硬编码变量$Näytön_aste = "reallyExistingValue";,为数据字段添加查询数据字段,并观察它何时开始断断续续。


我们也看不到您的功能get_post()

如果你指的是Wordpress函数get_post(),那么你对该函数的调用是错误的。

我可以很好地想象get_post()函数的失败
您总是赋值为false或空。

$Kohderyhmä = get_post($conn, 'Kohderyhmä');

直接分配。

$post = $_POST;
if (isset($post['Kohderyhmä']) &&
...)
{
$Kohderyhmä = $post['Kohderyhmä'];
...

此外,您还在查询中使用<form>中的所有选择字段。

4选择8、6、6选项意味着

8x6x6x6==1728

1728种可能性是指您有一个所有值都匹配的数据记录。

WHERE Ko...='$Ko...' AND `Näy...`='$Näy...' AND `Vai...`='$Vai...' AND `Käy...`='$Käy...'";

WHERE所有四个数据字段必须匹配才能得到结果!!!!!!!!!!!!!

你必须找到一个所有四个值同时存在的组合。


更新

OP新问题:
如果需要空值或某些命名值,请停止在中搜索值数据库

要求在它所在的数据库中找到每个变量找不到,因为我无法设置变量并且没有值对于数据库中的"Kaikki",单词"Kaikki"表示所有选项在HTML表单中的选择下面,为此我需要一些PHP

新的test.php 来了

  • 1( 不要执行$post['Näytön aste'];表单中的名称为
    CCD_ 10
    这将由submit翻译为
    $post['Näytön_aste'];查看下划线_
    必须对名称中包含空格的所有select name执行此操作
  • 2( 这就是为什么您不能获得所有$_POST[....]值的原因
    好吗
  • 3( 在表单中替换
    <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">

    <form action="testNew.php" method="POST">

testNew.php


<?php
$conn = new mysqli('localhost', 'user', 'pass', 'db');
if ($conn->connect_error) die($conn->connect_error);
$conn->set_charset("utf8");
$post = $_POST;
if (isset($post['Kohderyhmä']) &&
    isset($post['Näytön_aste']) &&
    isset($post['Vaikutusten_vahvuus']) &&
    isset($post['Käyttökelpoisuus']))
 {
  $Kohderyhmä = $post['Kohderyhmä'];
  $Näytön_aste = $post['Näytön_aste'];
  $Vaikutusten_vahvuus = $post['Vaikutusten_vahvuus'];
  $Käyttökelpoisuus = $post['Käyttökelpoisuus'];
 } else { die ("No valid values"); }
    $count = 0;
    $and   = "";
    $query = "";
    if (!empty($Kohderyhmä) && $Kohderyhmä !="Kaikki" ) {
      if ($count > 0) { $and   = " AND ";  }
      $count++;
      $query = $query.$and."`Kohderyhmä`= '".$Kohderyhmä."'";
    }
    if (!empty($Näytön_aste) && $Näytön_aste !="Kaikki" ) {
      if ($count > 0) { $and   = " AND ";  }
      $count++;
      $query = $query.$and."`Näytön aste`= '".$Näytön_aste."'";
    }
    if (!empty($Vaikutusten_vahvuus) && $Vaikutusten_vahvuus !="Kaikki" ) {
      if ($count > 0) { $and   = " AND ";  }
      $count++;
      $query = $query.$and."`Vaikutusten vahvuus`= '".$Vaikutusten_vahvuus."'";
    }
    if (!empty($Käyttökelpoisuus) && $Käyttökelpoisuus !="Kaikki" ) {
      if ($count > 0) { $and   = " AND ";  }
      $count++;
      $query = $query.$and."`Käyttökelpoisuus: luokka`= '".$Käyttökelpoisuus."'";
    }
    if ($count > 0) {
        $query = "SELECT * FROM `tietokanta` WHERE ".$query;
        } else {
        $query = "SELECT * FROM `tietokanta`";    
        } 
    echo $query;
if ($results = $conn->query($query)) {
while ($row = $results->fetch_assoc()) {
    echo "<h3>" . $row['Nimi'] . "</h3><br />";
    echo $row['Kohderyhmä'] ."<br /><br />";
  }
} else {
  echo "with your choices no records were found";
}
$results->free();
?>
$query = "SELECT * FROM `tietokanta`
    WHERE Kohderyhmä='{$Kohderyhmä}' AND `Näytön aste`='{$Näytön_aste}' AND `Vaikutusten vahvuus`='{$Vaikutusten_vahvuus}' AND `Käyttökelpoisuus: luokka`='{$Käyttökelpoisuus}'";

请用此替换您的查询,然后重试。