foreach循环将数据库中的多个单选按钮填充到php字符串中


foreach loop to populate multiple radio buttons from a database in a php string

更新:感谢SeanWM和Styphon提供的答案,我为那些正在寻找类似答案的人提供了完整的工作代码:

<? 
if (isset($_GET['id'])) {
include "connect_to_mysql.php";
$id= preg_replace('#[^0-9]#i','',$_GET['id']);
$sql=mysql_query("SELECT * FROM angler3 WHERE id='$id' LIMIT 1");
$clientCount=mysql_num_rows($sql);
    if($clientCount>0){ 
 while($row=mysql_fetch_array($sql)){
 $anglerAvidity=$row["anglerAvidity"];
 $anglerFishMode=$row["anglerFishMode"];
 $vals = array('novice', 'occasional', 'avid');
 $radio_opts = "";
foreach ($vals as $val)
{
$checked = ($val==$anglerAvidity) ? ' checked="checked"' : '';
$radio_opts .= "<input type='"radio'" name='"anglerAvidity'" value='"{$val}'" {$checked}> {$val}'n";
}
$vals2 = array('boat', 'kayak or canoe', 'float tube', 'on ice', 'rod and reel', 'trap nets', 'other');
$radio_opts2 = "";
foreach ($vals2 as $val2)
{
$checked2 = ($val2==$anglerFishMode) ? ' checked="checked"' : '';
$radio_opts2 .= "<input type='"radio'" name='"anglerFishMode'" value='"{$val2}'"{$checked2}> {$val2}'n";
}
$content='
<h3>Please click on any buttons that are not answered. Your responses are shown below, and new or updated responses will be saved. </h3>
<hr>
<form enctype="multipart/form-data" action="thankyouAnglerYouRevise.php?id='.$id.' " method="POST"> 
<table>
<tr ><td>I consider myself a/an:</td>
<td colspan="2" align=left>'.$radio_opts .'
</td></tr>
<tr><td colspan="3" style="border-bottom: 1px solid #BBB; height: 10px;"></td></tr>
<tr ><td colspan="3" >My normal mode of fishing is:</td></tr>
<tr ><td colspan="3">'.$radio_opts2.'
</td></tr>
</table>
<br>
<input class="button" value="Submit" type="submit">
</form>
';
require_once ('index2.html.php');
?>

原始问题:

我正在尝试使用php/mysql编写一个编辑页面,并拥有以下可用的foreach代码:

$vals = array('novice', 'occasional', 'avid');
$radio_opts = "";
foreach ($vals as $val) {
    $checked = ($val == $anglerAvidity) ? ' checked="checked"' : '';
    $radio_opts .= "<input type='"radio'" name='"groupname'" value='"{$val}'"{$checked}>   {$val}<br />'n";
}

HTML:

<tr ><td>I consider myself a/an:</td>
            <td colspan="2" align=left>'. $radio_opts .'
            </td></tr>

将打印单选按钮并选择正确的值。

然而,我在页面上有很多问题,所有问题都是使用以下类型的东西在字符串中调用的:

$title='Survey<br>';
$content='
<tr ><td>I consider myself a/an:</td>
<td colspan="2" align=left>'. $radio_opts .'
</td></tr>

这一切都很好,但当我尝试这个时:

$vals = array('novice', 'occasional', 'avid');
$radio_opts = "";
foreach ($vals as $val) {
    $checked = ($val == $anglerAvidity) ? ' checked="checked"' : '';
    $radio_opts .= "<input type='"radio'" name='"groupname'" value='"{$val}'"{$checked}>   {$val}<br />'n";
}
$vals2 = array('kayak or canoe', 'float tube', 'on ice', 'rod and reel', 'trap nets', 'other');
$radio_opts2 = "";
foreach ($vals2 as $val2) {
    $checked2 = ($val2 == $anglerFishMode) ? ' checked="checked"' : '';
    $radio_opts2 .= "<input type='"radio'" name='"groupname'" value='"{$val2}'"{$checked2}> {$val2}<br />'n";
}

带有HTML

    <tr ><td>I consider myself a/an:</td>
    <td colspan="2" align=left>'.$radio_opts .'
    </td></tr>

    <tr ><td colspan="3" >My normal mode of fishing is:</td></tr>
    <tr ><td colspan="3">'.$radio_opts2.'
    </td></tr>

两个单选按钮组都会显示,但只有第二个组的单选按钮会从数据库中填充。如果我切换顺序并首先调用radio_pts2,那么radio_pts将被填充,radio_ptS2将显示为未选择的无线电组。这就是为什么我认为如果我能以某种方式结束前臂,几乎是有效的。如果我在内容变量中结束第一个foreach组或调用第二个foreach小组,我会得到一个意外的T_STRING错误。我知道这个调用是错误的代码,但为了完整起见,还是尝试了一下。

这肯定是我正在做的一些愚蠢的事情,没有结束第一个foreach循环,但当我尝试使用endif或break时,我要么不会得到第一个无线电组的任何响应,要么抛出一个意外的else错误消息。我已经复习了所有的手册,花了几个小时在这个论坛上搜索帮助,但我仍然不知道如何编写这些代码。

非常感谢您的帮助!

一切看起来都很好。但是,对于每组单选按钮,都有相同的name字段。目前来看,两者都是name="groupname"。你应该试着给这些小组起不同的名字:

$vals = array('novice', 'occasional', 'avid');
$radio_opts = "";
foreach ($vals as $val) {
    $checked = ($val == $anglerAvidity) ? ' checked="checked"' : '';
    $radio_opts .= "<input type='"radio'" name='"fishing_level'" value='"{$val}'"{$checked}>   {$val}<br />'n";
    // ------------------------------------------------^
}
$vals2 = array('kayak or canoe', 'float tube', 'on ice', 'rod and reel', 'trap nets', 'other');
$radio_opts2 = "";
foreach ($vals2 as $val2) {
    $checked2 = ($val2 == $anglerFishMode) ? ' checked="checked"' : '';
    $radio_opts2 .= "<input type='"radio'" name='"fishing_mode'" value='"{$val2}'"{$checked2}> {$val2}<br />'n";
    // ------------------------------------------------^
}

问题在于groupname的名称。对于第二组单选按钮,您需要对此进行更改,否则表单会将它们视为一组单选按钮。将您的代码更改为:

$radio_opts2 .= "<input type='"radio'" name='"groupname2'" value='"{$val2}'"{$checked2}> {$val2}<br />'n";