2013-10-31 28 views
0

通常我会帮助他们需要的任何东西,这次我要求你的帮助。取PDO :: FETCH_ASSOC多个复选框

我想在执行多个复选框后从我的数据库中得到一个特定的行选择我花了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>";   
+1

你偶然混合'MySQLi'与PDO? –

+0

感谢您的快速评论..但答案是否定的。 – Paco

+0

我注意到你的编辑。这个'value =“8X2.5”'是无效的。你不能有一个点,PHP可能认为你想要做一个计算。使用下划线而不是'value =“8X2_5”' –

回答

0

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

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

而且,你要通过$ _ POST [“玩具”],但不能将其分配给任何价值。我猜你想在foreach中添加所有的查询和表代码。

if (isset($_POST['toys'])) { 
    foreach($_POST['toys'] as $each_check) { 
     // put everything else here 
    } 
} 
+0

让我检查 - 谢谢! – Paco

+0

这是我得到的错误...致命错误:带有消息'SQLSTATE [42S22]的未捕获异常'PDOException':未找到列:1054'where子句'中的未知列'6X2' – Paco

+0

由于大小是一个字符串,因此需要引用它。准备好的陈述会更好地防止注射,并确保一切都正确引用。我会更新。 – aynber

3

这是为了不被有效很远:

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 
     } 
    } 
} 
+0

不应该'('SELECT * FROM'toys' WHERE SIZE ='。$ each_check)'是'(“SELECT * FROM'toys' WHERE SIZE ='”。$ each_check。“'”)'因为数字需要被视为一个字符串? (来自值) –

+0

可能是这样,但这是OP许多错误的最起码*。改变我的代码我猜... – Sammitch

+0

当然。其中一个原因是我没有真正重新创建和测试,而是在一个答案中放入了答案。 –

0

我想给... uggest你使用MySQL的IN(...)子句中的WHERE条件检索,在短短1个查询所有匹配的“大小”行:

SELECT * FROM toys WHERE size IN ($chosenSizes) 

要获得尺寸的列表中,使用PHP的破灭功能:

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

然后可以使用PDO的使用fetchall所有行读取到结果数组。

$resultRows = $sth->fetchAll(); 

注意:只有在确定结果数组不太大时才使用此方法!

+0

你好kDjarkman - 谢谢你! ,我现在这样做了,这里是我的尝试,仍然没有错误,没有表格行输出.. - > - > - > $ chosenSizes = implode(',',$ _POST ['toys']); – Paco

+0

$ query ='SELECT * FROM'toys' WHERE size IN'。$ chosenSizes; – Paco

+0

到现在为止没有人能够解释如何在html页面或YouTube上做到这一点...怎么可能?有人应该给出关于如何使用多个CheckBoxes的完整解释..并将它们从数据库中查询到表格中(当然,用户选择这些表格) – Paco

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; 
}