【问题标题】:Why isn't this form updating the database?为什么这个表单不更新数据库?
【发布时间】:2011-03-29 03:03:18
【问题描述】:

我正在通过 head first 的 php 和 mysql 学习 php,并且正在玩弄最简单的 php 脚本:将表单中的数据插入到 mysql 数据库中。我已经修改了第二章中的示例以在我自己的表单和数据库上使用它,但我无法让数据库接受我写入表单的任何内容。

哪里出错了?

这是 php 脚本:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Evaluaciones</title>
</head>
<body>
  <h2>Evaluaciones</h2>

<?php
  $nombre_apellido = $_POST['nombreYapellido'];


  $dbc = mysqli_connect('localhost', 'root', 'password', 'evaluaciones')
    or die('Error connecting to MySQL server.');

  $query = "INSERT INTO `evaluaciones_cursos` (nombre_apellido) " .
    "VALUES ('$nombre_apellido')";




  $result = mysqli_query($dbc, $query)
    or die('Error querying database.');

  mysqli_close($dbc);

  echo 'Gracias por llenar el formulario .<br />'.$nombre_apellido;

?>

</body>
</html>

这是html表单

formbeta2.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

 <head>

   <meta http-equiv="Content-Type"
         content="text/html; charset=ISO-8859-1" />

    <title>Evaluaci&oacute;n de Curso</title>


    <style type="text/css">
    body {
        background-color: #CC7722;
        margin-left:20%;
        margin-right:20%;
        border:3px dotted gray;
        padding: 10px 10px 10px 10px;
         font-family:sans-serif;

    }


    .tabla img {
        width:100%;
    }

 </style>

 </head>

<body>
<form>






<img src='http://img690.imageshack.us/img690/4338/softrain2.jpg' width="408" height="123"border='0'/>








<h1>Evaluaci&oacute;n</h1>


<p>Por favor, tome unos minutos para llenar esta evaluaci&oacute;n. </p>

<p> </p>

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

    <p> 

        <!--h3>Info Personal</h3-->
        <table>


        <tr><td>Nombre y Apellido:</td> <td> <input type="text" name="nombreYapellido" value="" /> </td></tr>



        </table>

         <input type="submit" value="Enviar Evaluaci&oacute;n"/>


</body>

</form>

</html>

我在 mysql 上运行:

CREATE TABLE `evaluaciones_cursos` (
`nombre_apellido` VARCHAR(60)
)

但信息未显示在 phpmyadmin 上。为什么?

【问题讨论】:

  • 您是否收到任何错误消息?您的成功信息是否出现?
  • 您是否尝试将逗号从 ` 更改为 ' ?
  • 我在 apache 中使用 gedit,如何让它显示错误消息?

标签: php mysql


【解决方案1】:

您有一个嵌套在另一个表单中的表单。我会从那里开始。

编辑:可能发生的是第一个(空)表单是正在提交的内容。由于它提交到同一页面formbeta2.html,因此您的 PHP 和 SQL 甚至都不会运行。请在我的评论中回答问题,我们可以从那里进一步提供帮助。

【讨论】:

  • 确实如此。两个
  • 谢谢,我没有意识到嵌套表单。
  • 我把它拿出来了,但还是不行。我会改写问题并重新发布。
【解决方案2】:

查看 HTML,&lt;/form&gt;&lt;/body&gt; 标记之外。将其更改为:

</form>
</body>

然后,您需要删除&lt;body&gt; 标记下的&lt;form&gt;,因为您稍后已经拥有它。

完成这些更改后,其他一切看起来都应该可以正常工作。

布埃纳苏尔特!

【讨论】:

    【解决方案3】:

    我首先要分离业务逻辑和表示(PHP 代码和 HTML)。将业务逻辑放在 HTML 代码中通常是个坏主意。

    我喜欢使用一个简单的技巧:在 PHP 中,您可以非常轻松地制作模板文件。一个非常基本的模板系统可以是:

    function render($file, $variables) {
      ob_start();
      extract($variables);
      if(file_exists($file)) {
        include $file;
      }
      return ob_end_clean();
    }
    

    另外,请记住,使用用户输入是一个坏主意,因此永远不要将用户提供的数据直接替换到 SQL 字符串中。在 MySQL 的情况下,使用 mysql_real_escape_string()。

    $sql = 'INSERT INTO table(col) VALUES(\'' . mysql_real_escape_string($value) . '\');'
    

    这项技术是网络安全中最重要的技术之一。

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 2019-01-03
      • 2020-03-10
      • 1970-01-01
      • 2020-07-25
      • 2016-12-12
      • 2011-10-14
      • 2013-12-27
      • 1970-01-01
      相关资源
      最近更新 更多