我无法使用HTML表单和PHP将记录插入到数据库中
问题描述:
当我运行这些脚本时,MyPHP数据库中没有任何记录显示。我无法使用HTML表单和PHP将记录插入到数据库中
我运行: APACHE 2.4.7 MYSQL 5.6.15 PHP 5.5.8
首先HTML代码...
<html>
<center>
<font face="Helvetica">
<u><b>Matthew Gieger's Guestbook</b></u>
<form action="link.php" method="post"/>
<p>Name: </p>
<input type="text" name="Name" required/>
<p>Email: </p>
<input type="email" name="Email" required />
<p>Message: </p>
<p><textarea rows="4" cols="50" name="Message"> </textarea></p>
<input type="submit" value="Submit" />
<input type="reset" value="Reset" />
</form>
</center>
</html>
而且PHP脚本。这是我认为问题所在的地方...
<?php
$username='root';
$password='';
$database='guestbook';
$name= $_POST['Name'];
$email= $_POST['Email'];
$message= $_POST['Message'];
new mysqli('localhost',$username,$password,$database) or die("could not connect to localhost");
echo"connected";
mysqli:"insert into contacts (Name,Email,Message,Timestamp) values ($name,$email,$message,date())";
?>
我在运行代码时没有收到任何错误。我只是得到预期的 “连接”
答
您没有任何地方定义的mysqli
对象。而且你没有在任何地方使用mysqli_query()
。
尝试是这样的:
$mysqli = new mysqli('localhost', $username, $password, $database);
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$mysqli->query("INSERT INTO `contacts`(`Name`, `Email`, `Message`, `Timestamp`) VALUES ('". $name ."', '". $email ."', '". $message ."', '". $timestamp ."')");
答
最有可能是格式问题,尝试这样的:
<?php
$username='root';
$password='';
$database='guestbook';
$name= $_POST['Name'];
$email= $_POST['Email'];
$message= $_POST['Message'];
$db = new mysqli('localhost',$username,$password,$database) or die("could not connect to localhost");
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
$currentDate=date();
$sql = "insert into contacts (Name,Email,Message,Timestamp) values ($name,$email,$message,$currentDate)";
if(!$result = $db->query($sql)){
die('There was an error running the query [' . $db->error . ']');
}
?>
+0
它返回了一些错误,但你说得对,我需要mysqli。我想我需要刷牙! – meichthys 2014-09-26 22:09:55
答
你没有正确实例化的mysqli类。您需要将对象实例保存到一个变量:
$mysqli = new mysqli('localhost',$username,$password,$database);
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
还有代码中的严重的安全问题,因为你不逃避你的输入变量。最好的解决方案是研究PDO:http://php.net/manual/en/pdo.construct.php和参数绑定。
如果你真的想与mysqli的做到这一点,你应该先用mysqli_real_escape_string在您所有的输入变量:
$name = mysqli_real_escape_string($mysqli, $_POST['Name']);
$email = mysqli_real_escape_string($mysqli, $_POST['Email']);
$message = mysqli_real_escape_string($mysqli, $_POST['Message']);
然后正常运行查询:
$mysqli->query("insert into contacts (Name,Email,Message,Timestamp) values ('$name','$email','$message',".date().")";
如果你不” t逃避用户输入,使用简单的SQL injection就可以轻松破解数据库。
尝试通过if条件进行调试。 – 2014-09-26 21:53:54