【问题标题】:Can't pass form data to PHP to update Database无法将表单数据传递给 PHP 以更新数据库
【发布时间】:2017-12-20 00:47:36
【问题描述】:

感谢所有回复的人。我得到了它的更新,并结合了你的想法。我已经修改了代码以显示有效的方法。

通过将LIKE按钮值传递给php来实现LIKE功能,从而更新数据库。

这会显示表格,每行都有一个 LIKE 按钮:

echo '<table>
           <tr>
            <th>Word ID</th>
            <th>User ID</th>
            <th>User Name</th>
            <th>Word</th>
            <th>Meaning</th>
            <th>Example</th>
           </tr>';

    foreach ($data as $row) 
      { 
        echo '<tr>';
            foreach ($row as $value)
                  { 
                echo '<td>';
                    echo $value;
                echo '</td>';
              } 


    echo '<td>
 <form method="POST" action="'.$_SERVER["PHP_SELF"].'">
<input type="hidden" name="LIKE" value="'.$row['wordID'].'">
<input type="submit" class="btn btn-success" value="Submit">
</form>

                 </td>';

            echo '</tr>';
          }
        echo '</table>';

处理表单提交的代码是:

    if($_POST['submit']) 
 {
$sql = "UPDATE vocab SET likes = likes+1 where wordID = '{$row['wordID']}'"; 

$stmt = $db->prepare($sql);

/* Execute */
            $stmt->execute();

}

【问题讨论】:

  • 在你的更新中'{$row['wordID']}' 应该是'{$_POST['wordID']}' 吗? (也请使用占位符而不是将值插入 SQL)
  • 还将 action="&lt;?php echo $_SERVER["PHP_SELF"]?&gt; 更改为 action="'. $_SERVER["PHP_SELF"].' 。你把你的代码混在一起了。
  • 恐怕没什么区别。
  • 我同意,奈杰尔!我正在混合我的代码 - 我发现很难将 php 嵌入到 html 中。仍然无法正常工作:(
  • 尝试将其拆分,分别回显每个部分(不同的回声)。使其更易于阅读(恕我直言)

标签: php html mysql forms


【解决方案1】:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>

是您不在&lt;?php 标记中时使用的语法。在这里,您已经在使用 PHP 和 echo 编写代码,而您只需在其中再次添加 &lt;?php 和另一个 echo,这没有任何意义。

echo '...  <form method="post" action="'.$_SERVER["PHP_SELF"].'">  ...';

是您想要包含 php_self 值的方式。

<input type="submit" value="LIKE" name="<?php echo $row["wordID"]; ?></form>

应该是

<input type="submit" value="LIKE" name="'.$row['wordID'].'"></form>

但你不能搜索 $_POST['wordID'],在 for 循环中搜索 $_POST[$row['wordID']]。

【讨论】:

  • 谢谢。我现在明白了。我现在没有收到任何错误,但数据库没有更新。
  • 你对 php echo $row["wordID"] 做过同样的事情吗?看看我的编辑
  • 感谢您的帮助。我让它更新数据库但不正确。至少现在一切都在与一切对话,我必须查看我的程序逻辑以使其正确更新。干杯。
【解决方案2】:

你在 echo 里面做一个 echo

echo '<td>
            <form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>
            <input type="submit" value="LIKE" name="<?php echo $row["wordID"]; ?></form>
                 </td>';

&lt;form method="post" action="&lt;?php echo $_SERVER["PHP_SELF"]?&gt;

应该是:

&lt;form method="post" action="'.$_SERVER["PHP_SELF"].'"&gt;

【讨论】:

  • 因为这是单引号,所以不会做任何替换。
  • 好的,谢谢。我遵循了你的语法,也遵循了 name 属性: echo '
    ';我不再收到 404,但数据库没有更新。
【解决方案3】:

我会这样做:

<td>
<form method='POST'>
<input type='hidden' name='LIKE' value='".$row['wordId']."'>
<input type='submit' value='Submit'>
</form>
</td>

Action 将始终默认为:PHP_SELF,所以没有必要添加它,另外添加隐藏字段而不是提交按钮对我来说更可取,因为它更易于阅读,另外添加了一个简单的选项,以防你真的想添加更多到形式(完全有可能)

【讨论】:

  • 我试过了,但出现语法错误,意外的 'POST' (T_STRING),期待 ',' 或 ';'我在您的代码 sn-p 中将 ' 更改为 " 但仍然无法正常工作。
  • $sql = "UPDATE vocab SET likes = likes+1 where wordID = '{$row['wordID']}'";
  • 抱歉,您能否澄清一下。我用 $_POST['LIKE'] 替换什么?
  • 感谢您的帮助。我让它更新了数据库,所以语法问题现在已经解决了。更新是不正确的,所以我必须查看我的程序逻辑以使其正确更新。如果我不能解决它,我会发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多