【问题标题】:Why doesn't my form get posted in PHP?为什么我的表单没有在 PHP 中发布?
【发布时间】:2011-04-15 15:45:30
【问题描述】:

我正在使用一个简单的表单并将我的文本框值提交到数据库,

<body>

<?php 

if(isset($_POST["submit"]))
$des="Insert into enquiry(Companyname,Name,Phno,Email,Address,Comments) values 
  ('".$_POST[txtcompname]."','".$_POST[txtname]."','".$_POST[txtphno]."',
'".$_POST[txtemail]."','".$_POST[txtaddress]."','".$_POST[txtcomments]."')";
$res1=mysql_query($des);

?>

<div align="left">
<form action="" method="post">

但它似乎没有被提交?任何建议

当我使用print_r($_POST); 时,我得到了

Array ( [txtcompname] => xv [txtname] => xcv [txtphno] => xcvx [txtemail] => xcv [txtaddresss] => xcv [txtcomments] => xcvxcv [submit] => submit ) 

我现在收到此错误,

You have an error in your SQL syntax; check the manual that corresponds to 
your MySQL server version for the right syntax to use near 'Address,Comments) 
values ('zdc','sadcv','zdsv', 'sdcv','sdvcsdv','sdcv')' at line 2

【问题讨论】:

  • print_r($_POST); 得到什么?
  • 您确定有submit 元素提交到表单吗?你真的应该这样做:if($_POST){ } 这会给你同样的结果。 MySQL 也应该大写。有没有 mysql_error 呢?将$res1=mysql_query($des); 更改为$res1 = mysql_query OR die(mysql_error());
  • 没关系。您的表格已提交。你有什么错误吗?
  • 一个非常重要的注意事项:此代码非常不安全,因为您似乎没有以任何方式验证或转义 POST 数据。这很容易受到 SQL 注入的影响,这意味着有人可以擦除或查看您的整个数据库。我知道您仍在研究基础知识,但您必须在将要插入的每个值上运行此函数:php.net/manual/en/function.mysql-real-escape-string.php,然后再将其放入查询中。另外,查看参数化查询。

标签: php forms submit


【解决方案1】:

这里有几个潜在的问题,但我需要查看你的整个脚本才能给你一个明确的答案。

您应该问的问题 - 是否设置了 $_POST['submit']?在 if 中打印要输出的内容以找出答案。例如,您的提交按钮值是“提交”而不是“提交”。

您还应该尝试查看 mysql_error() 以查看数据库是否拒绝您的查询。例如,您的字段名称是否正确?

最后,$_POST[txtcompname] 应该是 $_POST['txtcompname'] 并且您的其他 $_POST 变量也需要在表单字段名称周围加上引号。根据您的 PHP 版本和配置,您可能会侥幸逃脱,但这是不好的做法。如果没有引号,PHP 将 txtcompname 解释为一个常量(由 define() 定义)。默认情况下,它可以设置为字符串 txtcompname,所以它可能会起作用,但你不应该依赖它。

另外,如果这是一个面向公众的网站,那么您正在为 SQL 注入问题做好准备,因为您没有转义或以其他方式清理您的输入。如果您的输入中有 ' 字符,您的查询将中断。

【讨论】:

    【解决方案2】:

    我在您的代码中发现了一些错误...确保您已打开所有警告,以便您可以看到它们

    1) if 后面的括号,否则在提交表单时只会执行 $des 变量的赋值

    2) $_POST 是一个数组.. 你需要引号 $_POST['txtcompname']

    最后确保提交输入有name="submit",尽管我认为最好使用if !empty($_POST)评估提交

    祝你好运

    【讨论】:

      【解决方案3】:
      1. 检查表单是否已提交
      2. 调试提交的数据(打印)
      3. 验证 // 清理数据
      4. 构建查询调试它(打印)
      5. 将查询推送到数据库
      6. 打印错误(如果有)

      如果这样做,您会发现enquiry(Companyname 之间缺少一个空格

      function debug($var, $label = '') {
          echo $label
              . '<pre>'
              . print_r($var, true)
              . '</pre>';
      }
      
      if (array_key_exists('submit', $_POST)) {
          debug($_POST, '_POST');
          $_dbCompany = mysql_real_escape_string($_POST['txtcompname']);
          $_dbName        = mysql_real_escape_string($_POST['txtname']);
          $_dbPhone       = mysql_real_escape_string($_POST['txtphno']);
          $_dbEmail       = mysql_real_escape_string($_POST['txtemail']);
          $_dbAdress      = mysql_real_escape_string($_POST['txtaddress']);
          $_dbComments    = mysql_real_escape_string($_POST['txtcomments']);
      
          $_prepareSQL = "INSERT INTO 
              enquiry (Companyname,Name,Phno,Email,Address,Comments) 
              VALUES ('%s', '%s', '%s', '%s', '%s', '%s')";
          $statement = sprintf($_prepareSQL, $_dbCompany, $_dbName, $_dbPhone, $_dbEmail, $_dbAdress, $_dbComments);
          debug($statement, 'SQL-Query');
      
          $result = mysql_query($statement) || trigger_error(mysql_error(), E_USER_ERROR);
      }
      

      【讨论】:

        【解决方案4】:

        $_POST[txtcompname] 和所有其他变量都应该被引用。尝试使用 $_POST['txtcompname']。另外,请执行 var_dump($_POST) 并检查您是否拥有要引用的所有值。

        【讨论】:

        • 报价与空提交无关。
        猜你喜欢
        • 2016-11-28
        • 2023-03-20
        • 1970-01-01
        • 2022-12-19
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-06
        相关资源
        最近更新 更多