0

通常我会帮助人们解决他们需要的任何事情,这次我寻求您的帮助。

在执行多个复选框选择后,我试图从我的数据库中获取特定的行,我花了 50 个小时在上面,但我无法做到这一点。每次我更改代码中的某些内容时,我都会收到不同的错误。我一直在互联网上存在的每个 HTML 页面中寻找答案!

请给我看光..

这是我表格的一部分....值表示玩具的“大小”

    <div class=""><input type="checkbox" name="toys[]" value="6X2" /><label></label></div>
    <div class=""><input type="checkbox" name="toys[]" value="4X3" /><label></label></div>
    <div class=""><input type="checkbox" name="toys[]" value="8X2.5" /><label></label></div></strike>

这是PHP代码...

  if (isset($_POST['toys'])) {

     foreach($_POST['toys'] as $each_check) {

      }
  }

  $query = $db->query = 'SELECT * FROM `toys` WHERE SIZE = '.$each_check;   


echo "<table>";
    echo "<tr>
            <th>ratio</th>
            <th>size</th>
            <th>built</th>
            <th>description</th>            
          </tr>";



while ($row = $query->fetch(PDO::FETCH_ASSOC)) 

        echo "<tr><td>" . $row['ratio'] .
            "</td><td>" . $row['size'] .
            "</td><td>" . $row['built'] .
            "</td><td>" . $row['description'] .
            "</td></tr>";
echo "</table>";        
4

4 回答 4

2

这远非有效:

if (isset($_POST['toys'])) {

    foreach($_POST['toys'] as $each_check) {

    }
}

$query = $db->query = 'SELECT * FROM `toys` WHERE SIZE = '.$each_check;

更像:

if (isset($_POST['toys'])) {
    foreach($_POST['toys'] as $each_check) {
        $query = $db->query("SELECT * FROM `toys` WHERE SIZE = '".$each_check."'");
    }
}

应该更像:

if (isset($_POST['toys'])) {
    $query = 'SELECT * FROM `toys` WHERE SIZE = ?';
    $sth = $db->prepare($query);
    foreach($_POST['toys'] as $each_check) {
        if( ! $sth->execute(array($each_check)) ) {
            die('MySQL Error: ' . var_export($sth->error_info(), TRUE);
        }
        while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
            // code here
        }
    }
}
于 2013-10-31T16:33:46.940 回答
0

您正在分配$db->query而不是将其用作函数。将您的查询行更改为:

$query = $db->prepare('SELECT * FROM `toys` WHERE SIZE = :size');
$query->bindValue(':size',$each_check);
$query->execute();

此外,您正在通过 $_POST['toys'],但没有将其分配给任何值。我猜您想在 foreach 中添加所有查询和表代码。

if (isset($_POST['toys'])) {
    foreach($_POST['toys'] as $each_check) {
        // put everything else here
    }
}
于 2013-10-31T16:29:48.453 回答
0

Hagay,以下内容应该适合您:

$pdo = new PDO('mysql:host=localhost;dbname=mydatabase', 'my_name', 'my_pass');

if (isset($_POST['toys'])) {
    $sizes = implode(', ', array_map(array($pdo, 'quote'), $_POST['toys']));

    $sql = "SELECT * FROM toys WHERE size IN (" . $sizes . ")";

    echo '<table>', PHP_EOL;
    echo '<tr><th>ratio</th><th>size</th></tr>', PHP_EOL;

    foreach( $pdo->query($sql) as $row ) {
       echo '<tr><td>', $row['ratio'], '</td><td?', $row['size'],  '</td></tr>', PHP_EOL;
    }

    echo '</table>', PHP_EOL;
}
于 2013-11-01T15:15:14.217 回答
0

我想建议您在 WHERE 条件中使用 MySQL 的 IN (...) 子句,以仅在 1 个查询中检索具有匹配“大小”的所有行:

SELECT * FROM toys WHERE size IN ( $chosenSizes )

要获取大小列表,请使用 PHP 的 implode 函数:

$chosenSizes = implode(', ', $_POST['toys']);

然后,您可以使用 PDO 的 fetchAll 将所有行提取到结果数组中。

$resultRows = $sth->fetchAll();

注意:仅当您非常确定结果数组不会太大时才使用此方法!

于 2013-10-31T16:51:30.153 回答