【问题标题】:Need help with incrementing 2 variables in post form需要帮助以帖子形式增加 2 个变量
【发布时间】:2011-07-28 06:56:36
【问题描述】:

我试图允许用户使用显示的表单中的 POST 编辑他们的数据行。查询正在运行,并且表格正确显示除了表单输入字段中的名称值之外的所有内容。我尝试了许多变体,但名称值一直为空白。问题可能出在这一行:

       echo $field_name;

代码如下:

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

<?

$qry = "SELECT activity, site, date, FROM home WHERE user_id='$session->user_id' ORDER BY date";
$res = mysql_query($qry);
$field_name = mysql_field_name($res, 0);

function mysql_fetch_all($res) {

    while($row=mysql_fetch_array($res)) {
        $return[] = $row;
    }

   return $return;
}

function create_table($dataArr) {
    echo "<form action=\"process.php\" method=\"POST\"><table><tr>";
    for($j = 0; $j < 3; $j++) {
        echo "<td><input type=\"text\" name=\"";
        echo $field_name;
        echo "\" maxlength=\"30\" value=" .$dataArr[$j]. "></td>";
    }
    echo "<td><input type=\"hidden\" name=\"subedit\" value=\"1\"><input type=\"submit\" value=\"Update\"></td></tr></table></form>";
}

$all = mysql_fetch_all($res);

echo "<table class='data_table'>";
echo "<tr><td colspan=\"3\"><h2>Current Profile</h2></td></tr>";
echo "<tr><small><td>Activity&nbsp;</td><td>Site&nbsp;</td><td>Date&nbsp;</td></small></tr>";

for($i = 0; $i < count($all); $i++) {
    create_table($all[$i]);
}

echo "</table></form>";

【问题讨论】:

    标签: php mysql forms input


    【解决方案1】:

    $field_name 超出范围(查看PHP's variable scope 页面)。尝试更改您的 create_table 函数以接受 $field_name 变量,如下所示:

    function create_table($dataArr, $field_name) {
    ...
    }
    ...
    for($i = 0; $i < count($all); $i++) {
        create_table($all[$i], $field_name);
    }
    

    使用全局(不推荐)

    function create_table($dataArr) {
        global $field_name;
        ...
    }
    

    【讨论】:

    • 感谢您的帮助。它有效,但我得到每个名称重复的第一个字段 - 也就是说,第一个字段“activity_name”显示在每个名称 =“”中,而不是计算 $dataArr 值在值 = 中的方式“字段。我需要做的不仅仅是像这样插入递增变量: {echo "";} 令我震惊的是,我正在尝试做的必须是一个非常常见的过程(即在表格中提供用户信息,允许用户编辑该表中的一行并使用 post 更新数据库)b
    【解决方案2】:

    试试这个代码:

    <form action="process.php" method="POST">
    
    <?
    
    $qry = "SELECT activity, site, date, FROM home WHERE user_id='$session->user_id' ORDER BY date";
    $res = mysql_query($qry);
    $field_name = mysql_field_name($res, 0);
    
    function mysql_fetch_all($res) {
    
        while($row=mysql_fetch_array($res)) {
            $return[] = $row;
        }
    
       return $return;
    }
    
    function create_table($dataArr, $field_name) {
        echo "<form action=\"process.php\" method=\"POST\"><table><tr>";
        for($j = 0; $j < 3; $j++) {
            echo "<td><input type=\"text\" name=\"";
            echo $field_name;
            echo "\" maxlength=\"30\" value=" .$dataArr[$j]. "></td>";
        }
        echo "<td><input type=\"hidden\" name=\"subedit\" value=\"1\"><input type=\"submit\" value=\"Update\"></td></tr></table></form>";
    }
    
    $all = mysql_fetch_all($res);
    
    echo "<table class='data_table'>";
    echo "<tr><td colspan=\"3\"><h2>Current Profile</h2></td></tr>";
    echo "<tr><small><td>Activity&nbsp;</td><td>Site&nbsp;</td><td>Date&nbsp;</td></small></tr>";
    
    for($i = 0; $i < count($all); $i++) {
        create_table($all[$i], $field_name);
    }
    
    echo "</table></form>";
    

    但是,我建议您尝试创建一个 Table 类。它会更高效、更整洁。

    【讨论】:

    • 谢谢,但这是我一直在使用的代码,它适用于 $dataArr 变量,每个值都会递增,以便整个表显示得很好,但是使用 $field_name 我要么得到一个截断的第一个字母它对行的每个字段重复,然后显示第一个字段的下一个字母在第二行中重复 - 这就是代码为: echo "";或者当 [$j] 不包含在此处时,它会显示每个 name="activity_name" 的第一个字段:
    • 好的,我注意到您的 Table Class 建议。也许截断问题与包含的 form.php 文件有关。我正在看。
    • 您能否截取一些 MySQL 数据的屏幕截图,然后截取 HTML 输出的屏幕截图,看看您所说的截断问题是什么意思?另外,您使用的是我输入的确切代码还是您原始问题中的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2014-03-15
    相关资源
    最近更新 更多