为什么我的表单不会在PHP中发布?

时间:2010-09-22 10:11:25

标签: php forms submit

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

<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

4 个答案:

答案 0 :(得分:4)

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

你应该问的问题 - 是$ _POST ['submit']设置?在if中查找输出内容。例如,您的提交按钮值是“提交”而不是“提交”。

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

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

此外,如果这是一个面向公众的网站,那么您正在设置SQL注入问题,因为您没有转义或以其他方式清理您的输入。如果您的输入中包含“字符”,则查询将会中断。

答案 1 :(得分:1)

我发现你的代码中有一些错误只是通过考虑它...确保你有所有警告,所以你可以看到它们

1)在提交表单后,将执行if后的括号,或者仅执行$ des变量的赋值

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

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

祝你好运

答案 2 :(得分:1)

  1. 检查表格是否已提交
  2. 调试提交的数据(打印)
  3. 验证//清理数据
  4. 构建查询调试(打印)
  5. 将查询推送到数据库
  6. 打印错误(如果有)
  7. 如果这样做,您就会发现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);
    }
    

答案 3 :(得分:0)

$ _ POST [txtcompname]和所有其他变量应该被引用。尝试使用$ _POST ['txtcompname']。另外,执行var_dump($ _ POST)并检查是否有你正在提供的所有值。