php表单没有将表单数据写入mysql数据库

Posted

技术标签:

【中文标题】php表单没有将表单数据写入mysql数据库【英文标题】:php form not writing form data into mysql database 【发布时间】:2011-12-04 17:53:04 【问题描述】:

我必须在下面编写代码 - 已更新

php代码

    if(empty($_POST['formEmail'])) 
    
        $errorMessage .= "<li>You forgot to enter your email</li>";
    

    $varEmail = $_POST['formEmail'];

    if(empty($errorMessage)) 
    

        $db = mysql_connect("servername","username","password");
        if(!$db) die("Error connecting to MySQL database.");
        mysql_select_db("tableName" ,$db);



    $sql = "INSERT INTO emails(email) VALUES ('$varEmail')";

    mysql_query($sql);


echo "Details added";
$_SESSION['status'] = 'success';
 

exit();


    

function PrepSQL($value)

    // Stripslashes
    if(get_magic_quotes_gpc()) 
    
        $value = stripslashes($value);
    

    // Quote
    $value = "'" . mysql_real_escape_string($value) . "'";

    return($value);

?>

表单代码

    <?php
if(!empty($errorMessage)) 

echo("<p>There was an error with your form:</p>\n");
echo("<ul>" . $errorMessage . "</ul>\n");
    
    ?>

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<p>
<label for='formEmail'>Sign up to be notified when we go live!</label><br/>
<input type="text" name="formEmail" maxlength="50" value="<?=$varEmail;?>" />
</p>
<input type="submit" name="formSubmit" value="Submit" />
</form>

我没有收到任何错误,据我所知语法看起来不错,但它没有将电子邮件信息放入数据库。有人知道发生了什么吗?作为旁注,我是所有 php 的新手。

【问题讨论】:

永远不要在查询中注入 $_* 超级全局变量,使用 mysql_real_escape_string() 转义所有 $vars,无论它们来自您还是用户。此外,get_magic_quotes_gpc() 已损坏,不应使用。 @Johan,我对 sql 数据库了解不多,所以你说的也可能是拉丁文。你能详细说明一下吗? 当然,阅读这个问题:***.com/questions/332365/… 以及为什么魔术引号被破坏:php.net/manual/en/security.magicquotes.disabling.php 【参考方案1】:

您忘记运行查询!放

mysql_query($sql);

紧接着

$sql = "INSERT INTO emails(email) VALUES ('$varEmail')";

确保您也通过mysql_real_escape_string 运行$_POST 变量:

$varEmail = mysql_real_escape_string($_POST['formEmail']);

这将有助于保护您免受SQL Injection attacks 的侵害。

编辑

还有一件小事,我猜你想在表单提交成功后设置会话变量success。为此,您需要移动

echo "Details added";
$_SESSION['status'] = 'success';

在运行 SQL 查询的同一 if 结构中,否则将永远不会设置

【讨论】:

现在我收到错误:警告:mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket 为什么添加 mysql_real_escape 会导致有什么问题吗? @bjstone15,你需要在使用mysql_real_escape_string()之前连接到数据库,否则它会给你这个错误。【参考方案2】:

试试:

    $db = mysql_connect("servername","username","password");
    if(!$db) die("Error connecting to MySQL database.");
    mysql_select_db("tableName" ,$db);


    $sql = sprintf("INSERT INTO emails(email) VALUES ('%s')",mysql_real_escape_string($varEmail));
    $results = mysql_query($sql);

【讨论】:

-1,一个名为 tablename 的数据库很奇怪,不解决 SQL 注入漏洞是危险的。 首先是直接从他的代码中复制过来的。其次,他只需要在解决安全问题之前看看它是否有效。这不是标记答案的理由。我编辑了我的回复,用一种更好的方法来处理安全问题。 名称“tableName”不是表的名称,而只是我用作示例的名称。 @bjstone15,我明白你在做什么。我不确定为什么人们对这些事情如此具体,以至于他们标记提出合理问题的人和提供合理的下一步答案的人。如果您觉得我的回答有帮助,请随时标记我。 %s 是一个替换字符串。您可以将它们包含在 sprintf 语句中,但在字符串之后定义它们。查看php.net/manual/en/function.sprintf.php 了解更多信息...但它只是一个字符串打印格式(sprintf),它允许您定义要格式化的格式和参数。

以上是关于php表单没有将表单数据写入mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章

PHP表单数据写入MySQL代码

将 AJAX/jQuery 添加到简单的 PHP 表单

将 php 中包含的 HTML 表单信息写入 CSV 文件

连接 PHP 源代码并提交表单到 MySQL 数据库

php 如何防止表单重复提交呢

php向mysql写入数据