0

我在 PHP 中的 MySQL 查询需要一些帮助

在我再说说我使用mysql_*函数之前,我知道它们已经被贬值了,但是只有 PHP v5.5 并且我在我的服务器上安装了 PHP 5.3 并且其他mysql_*函数都在使用它。

我正在尝试将表单中的值插入表单提交的表格中,代码位于正确的位置,因为 PHP 发送电子邮件并回显“发送的邮件”。

这是我的查询:

mysql_query("INSERT INTO customers (
    name,email,telephone
) VALUES (
    ".$_POST['name'].",
    ".$_POST['email'].",
    ".$_POST['telephone'].",
)");

这是它所在的文档:

<?php

    // Database connect
    $db_host        = 'localhost';
    $db_user        = 'redjaxco';
    $db_pass        = 'CORRECT PASSWORD';
    $db_database    = 'redjaxco_website'; 

    $link = mysql_connect($db_host,$db_user,$db_pass) or die('Unable to establish a DB connection');

    mysql_select_db($db_database,$link);
    mysql_query("SET names UTF8");

    $owner_email = "contact@red-jax.com";

    $headers = 'From:' . $_POST["email"];
    $subject = 'Online Form - '. $_POST["topic"]. " : " . $_POST["name"];
    $messageBody = "";

    if($_POST['topic']!='nope'){
        $messageBody .= '<p>Subject: ' . $_POST["topic"] . '</p>' . "\n";
        $messageBody .= '<br>' . "\n";
    }
    if($_POST['name']!='nope'){
        $messageBody .= '<p>Visitor: ' . $_POST["name"] . '</p>' . "\n";
        $messageBody .= '<br>' . "\n";
    }
    if($_POST['email']!='nope'){
        $messageBody .= '<p>Email Address: ' . $_POST['email'] . '</p>' . "\n";
        $messageBody .= '<br>' . "\n";
    }else{
        $headers = '';
    }
    if($_POST['phone']!='nope'){        
        $messageBody .= '<p>Phone Number: ' . $_POST['phone'] . '</p>' . "\n";
        $messageBody .= '<br>' . "\n";
    }
    if($_POST['message']!='nope'){
        $messageBody .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n";
    }

    if($_POST["stripHTML"] == 'true'){
        $messageBody = strip_tags($messageBody);
    }

    try{
        if(!mail($owner_email, $subject, $messageBody, $headers))
        {
            throw new Exception('mail failed');
        }
        else
        {
            mysql_query("INSERT INTO customers (
                name,email,telephone
            ) VALUES (
                ".$_POST['name'].",
                ".$_POST['email'].",
                ".$_POST['telephone'].",
            )");

            echo 'mail sent';
        }
    }catch(Exception $e){
        echo $e->getMessage() ."\n";
    }
?>
4

3 回答 3

3

对于调试,通常的模式是在将 SQL 文本发送到数据库之前将其打印出来,如下所示:

$querytext = "INSERT INTO customers (
            name,email,telephone
        ) VALUES (
            '".mysql_real_escape_string($_POST['name'])."',
            '".mysql_real_escape_string($_POST['email'])."',
            '".mysql_real_escape_string($_POST['telephone'])."',
        )";
echo "querytext=" . $querytext;  // display statement for debugging
mysql_query($querytext) or die(mysql_error());

检查语句是否真的成功,如果没有,得到一些你可以使用的输出,而不是把 Dr.Evil 的小指拉到嘴角“我只是假设它会一切按计划进行。什么?

请帮自己一个大忙并清理这些输入,如下所示:

    mysql_real_escape_string($_POST['name'])

要回答您的问题,您的查询失败的最可能原因是您的语句中的字符串文字没有用引号括起来......

相比:

... VALUES (paul,paul@foo.com,5551212) 

... VALUES ('paul','paul@foo.com','5551212') 

并清理这些输入,以处理诸如'O'Reilly

... VALUES ('O'Reilly','ore@me.org','5551212')

还有更令人不安的客户,比如 Little Bobby Tables……

"Robert','',''); DROP TABLE customers; -- "
于 2013-07-15T23:42:34.010 回答
1

并不是说我喜欢这样说,但我会告诉您添加错误处理,即or die(mysql_error())您的查询,例如:

mysql_select_db($db_database,$link) or die(mysql_error());
mysql_query("SET names UTF8")or die(mysql_error());

我什至不知道第二个查询是做什么的,但是添加错误处理会给你一个可以理解的错误,你至少可以处理它。

编辑

 mysql_query("INSERT INTO customers (
                name,email,telephone
            ) VALUES (
                '".$_POST['name']."',
                '".$_POST['email']."',
                '".$_POST['telephone']."'
            )") or die(mysql_error());

编辑-2

好的,你可能默认关闭了错误,所以把它写在你的脚本顶部。

error_reporting(E_ALL);
ini_set('display_errors', '1');

EDIT-3

 if(!mail($owner_email, $subject, $messageBody, $headers))
        {
            echo 'Email not sent';
        }
        else
        {
        mysql_query("INSERT INTO customers ( name, email, telephone 
                        ) VALUES (
                        '".$_POST['name']."',
                        '".$_POST['email']."',
                        '".$_POST['telephone']."')
                    ") or die(mysql_error());

            echo 'mail sent';
        }
于 2013-07-15T23:34:20.630 回答
1

您需要将字符串括在撇号中并消除值列表末尾的逗号:

mysql_query("INSERT INTO customers (
            name,email,telephone
        ) VALUES (
            '".$_POST['name']."',
            '".$_POST['email']."',
            '".$_POST['telephone']."'
        )");
于 2013-07-15T23:42:23.650 回答