联系表单不上传到数据库(MySQL)

时间:2014-04-20 04:51:23

标签: php mysql database forms

我有这个联系表单,我试图输入 从我的网站到指定表格的信息 我的数据库。有谁知道我需要得到这个 代码运行正常?我可以输入信息 在我的网站上的文本域和命中提交,但对于一些人 原因,名字,姓氏,电子邮件等没有 完全出现在数据库中。当我点击提交时,我的 “谢谢”消息确实显示出来。我会包括我的 联系表单,php和数据库看起来像,也许是这样 会有所帮助。

联系表格contactus.php

<!DOCTYPE html>

<html>
    <head>
        <meta charset = "utf-8">
        <title>Contact</title>
        <style type = "text/css">
            em  { font-weight: bold;
                  color: black; }
            p   { font-size: 12pt; 
                  font-family: times new roman, sans-serif; color: black; }
        </style>
    </head>
    <body>
    <?php include ('menu.html'); ?>
    <? include ("form_process.php"); ?>
    <br> Please fill out the form below with your contact information.<br> 
    <form action= "form_process.php" method= "post" name= "contact_form"><br>
    <p>First Name:
    <input name= "first_name" type= "text" id= "first_name"/>
    </p><br>
    <p>Last Name:
    <input name= "last_name" type= "text" id= "last_name"/>
    </p><br>
    <p>Email:
    <input name= "email" type= "text" id= "email"/>
    </p><br> 
    <p>Phone:
    <input name= "phone" type= "text" id= "phone"/>
    </p><br>
    <p>Result:
    <div>
    <select name= "result" id= "result">
    <option value="">Choose</option>
    <option value="A">A</option>
    <option value="B">B</option>
    <option value="C">C</option>
    <option value="D">D</option>
    </select>
    </div>
    </p><br>
    <p>Comments: 
    <textarea name= "comments" id= "comments" placeholder= "Comment here" cols="25", rows="3"></textarea>
    </p><br>
    <p>Thank you for visiting our site!</p><br> 
    <p>
    <input type= "submit" name= "submit" id= "submit" value= "Submit" />
    <input type= "reset" name= "Reset" id= "reset" value= "Reset" />
    </p>
    </form>

    <div class="footer"><?php include('footer.html');?></div>

    </body>
</html>

数据库 我的数据库名称是project 我想要的信息表 输入称为contactform&amp;现在是 除了我创建的变量之外是空的。 在contactform表中,我有变量:

ID int(10) AUTO_INCREMENT
first_name varchar(60)
last_name varchar(60)
email varchar(60)
phone int(15)
result varchar(15)
comments varchar(255)

**更新:当我将我的php更改为此时(我试图关注@DaveCartwright建议):

<?php

$user = 'root';
$pass = '';
$db = 'project';

$db = new mysqli('localhost', $user, $pass, $db) or die("Unable to connect to database");
/*I do not know what you mean by this: mysqli_real_escape_string($db, $escapeString);*/

$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$result = $_POST['result'];
$comments = $_POST['comments'];

$first_name = mysql_real_escape_string($first_name);
$last_name = mysql_real_escape_string($last_name);
$email = mysql_real_escape_string($email);
$phone = mysql_real_escape_string($phone);
$result = mysql_real_escape_string($result);
$comments = mysql_real_escape_string($comments);

$query= "INSERT INTO `project`.`contactform` (`ID`,`first_name`, `last_name`, 
`email`, `phone`, `result`, `comments`) 
VALUES (NULL, '$first_name', '$last_name', '$email', '$phone', '$result', '$comments');";

mysqli_query($db, $query) or die(mysqli_error($db));

echo "<h2>Thanks, your information has been submitted!</h2>";

?>

我收到了几个关于escapeString(第8行)未定义变量的通知,未定义索引:first_name(第10行),last_name(第11行),电子邮件(第12行),电话(第13行),结果(第14行) ,评论(第15行)。然而,好消息:当我查看我的数据库表时,我确实有一些输入。 ID正确填写,然后对于可变电话,列出的唯一内容是0&amp;每个条目的所有其他变量都是空的。这至少是一些进步 - 我之前没有看到条目出现。如何进一步解决这个问题,以便显示所有输入?

2 个答案:

答案 0 :(得分:4)

好的,我看到的主要问题是你正在混合mysql和mysqli命令。

首先,你应该明确地使用

mysqli_real_escape_string($db, $escapeString).

其次,您的查询也应该使用mysqli,如:

$query= "INSERT INTO `project`.`contactform` (`ID`,`first_name`, `last_name`, 
`email`, `phone`, `result`, `comments`) 
VALUES (NULL, '$first_name', '$last_name', '$email', '$phone', '$result', '$comments');";

mysqli_query($db, $query) or die(mysqli_error($db));

我也不确定是否有必要附上你的变量......

<强>更新

好的,因为理解mysql_real_escape_string()和mysqli_real_escape_string()是不同的函数似乎是个问题...请更改:

$first_name = mysql_real_escape_string($first_name);
$last_name = mysql_real_escape_string($last_name);
$email = mysql_real_escape_string($email);
$phone = mysql_real_escape_string($phone);
$result = mysql_real_escape_string($result);
$comments = mysql_real_escape_string($comments);

$first_name = mysqli_real_escape_string($db, $first_name);
$last_name = mysqli_real_escape_string($db, $last_name);
$email = mysqli_real_escape_string($db, $email);
$phone = mysqli_real_escape_string($db, $phone);
$result = mysqli_real_escape_string($db, $result);
$comments = mysqli_real_escape_string($db, $comments);

答案 1 :(得分:0)

在您的数据库表上,您需要一个PRIMARY KEY。

CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name varchar(60),
last_name varchar(60),
email varchar(60),
phone varchar(15),
result varchar(15),
comments varchar(255)
)

您还可以使用预准备语句来更改此内容:

$query= "INSERT INTO `project`.`contactform` (`ID`,`first_name`, `last_name`, 
`email`, `phone`, `result`, `comments`) 
VALUES (NULL, '$first_name', '$last_name', '$email', '$phone', '$result', '$comments');";

进入这个:

$stmt = $db->prepare("INSERT INTO `project`.`contactform` SET ID=?, first_name=?, last_name=?, email=?, phone=?, result=?, comments=?");
$stmt->bind_param(null,$first_name,$last_name,$email,$phone,$results,$comments);
$stmt->execute();
$stmt->close();