将值发布到数据库

时间:2013-12-19 19:12:46

标签: php mysql

我正在尝试将复选框中的某些值发布到我的数据库中,此时它会发布一个值,但只有最后选择的值(我目前有8个复选框)。以下是我使用的获取复选框:

<?
 $data = mysql_query("SELECT * FROM members WHERE active='Yes' ORDER BY name") or die(mysql_error());

 //And we display the results 
 while($result = mysql_fetch_array( $data )) 
 {
   echo "<input type='checkbox' name='attendees[]'";
   echo 'value="' . $result['name'] . '">';
   echo "&nbsp;";
   echo $result['name'];
   echo "<br>";
 }
?>

所以他们成功地以我的形式显示,我可以按照我想要的数量打勾,但是当我检查数据库时,只显示最后一个。

我一直在阅读,似乎我需要将它们存储在一个数组中,但这是我发现难以理解的一点。

有人可以帮助我,以便所有选择的值都显示在数据库中,而不仅仅是最后一个吗?

编辑:太长,无法放入评论中,所以这里是将值添加到数据库的代码

<?php

  if(isset($_POST['submit']))
  {
    $date = $_POST['date'];
    $score = $_POST['score'];
    $attendees = $_POST['attendees'];     

    $result = mysql_query("INSERT INTO quiz_results (date, score, attendees)
                     VALUES ('$date','$score','$attendees')",$connect);
    echo "<div class='alert alert-info'><b>Event Added!</b> - You'll will now be taken back to the previous page.</div>";
    echo "<meta http-equiv=Refresh content=4;url=add-result.php>";
  }//end of if($submit).

?>

3 个答案:

答案 0 :(得分:1)

$attendees = $_POST['attendees'];

$与会者是一个数组。您不能简单地将PHP数组存储在数据库中,而无需先将其转换为字符串。您可以将其存储为逗号分隔列表:

if ( is_array($attendees) ) {
    $attendees = implode(', ', $attendees);
}

但是,当“与会者”的名称包含逗号时会发生什么?你可以序列化它:

if ( is_array($attendees) ) {
    $attendees = serialize($attendees);
}

但是,在任何一种情况下,当您想根据与会者过滤数据时会发生什么?现在你有更多的问题。

管理此数据的最佳方式(Google:数据库一对多关系)是将与会者存储在一个看起来像这样的单独表格中:

quiz_id    attendee_id
1          20
1          42
1          50

请在how to select from database based on a match in category?上查看我的答案。

答案 1 :(得分:0)

看起来您需要为每个复选框指定一个不同的名称。

$i=0;

 while($result = mysql_fetch_array( $data )) 
 {
    echo "<input type='checkbox' name='attendees[$i]'";
    $i++
    ...

我希望$ _POST ['与会者']是一个数组?

然后当您插入测验结果时,您需要循环遍历数组并一次将一行元素插入数据库,您不能直接插入数组,并希望每个元素自动采用自己的行

希望它有所帮助,请告诉我。

答案 2 :(得分:0)

查看

<?php
$data = mysql_query("SELECT * FROM members WHERE active='Yes' ORDER BY name");


$html = '';

//And we display the results 
while($result = mysql_fetch_array( $data )) {
    $html .= sprintf( '<input type="checkbox" name="attendees[]" value="%d"> %s' , $result['id'] , $result['name'] );
}

echo $html;

发布表单时

<?php
$attendees = isset( $_REQUEST['attendees'] ) ? $_REQUEST['attendees'] : null;

if( !is_null($attendees)  && is_array($attendees)){


    foreach( $attendees as $attendee){
        // do something.. with attendee id 
    }


    echo 'Ids: '.implode(', ', $attendees);
}