我有这个联系表单,我试图输入 从我的网站到指定表格的信息 我的数据库。有谁知道我需要得到这个 代码运行正常?我可以输入信息 在我的网站上的文本域和命中提交,但对于一些人 原因,名字,姓氏,电子邮件等没有 完全出现在数据库中。当我点击提交时,我的 “谢谢”消息确实显示出来。我会包括我的 联系表单,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;每个条目的所有其他变量都是空的。这至少是一些进步 - 我之前没有看到条目出现。如何进一步解决这个问题,以便显示所有输入?
答案 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();