Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我无法使用HTML表单和PHP将记录插入数据库_Php_Html_Mysql_Apache_Easyphp - Fatal编程技术网

我无法使用HTML表单和PHP将记录插入数据库

我无法使用HTML表单和PHP将记录插入数据库,php,html,mysql,apache,easyphp,Php,Html,Mysql,Apache,Easyphp,运行这些脚本时,MyPHP数据库中没有显示任何记录 我正在跑步: 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"/&g

运行这些脚本时,MyPHP数据库中没有显示任何记录

我正在跑步: 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\u 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 . ']');
}

?>

您没有正确实例化mysqli类。您需要将对象实例保存到变量中:

$mysqli = new mysqli('localhost',$username,$password,$database);

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
代码中还有一个严重的安全问题,因为您没有转义输入变量。最好的解决方案是研究PDO:和参数绑定

如果您真的想用mysqli实现这一点,您应该首先在所有输入变量上使用:

$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().")";

如果你不逃避用户的输入,用一个简单的方法就很容易破解你的数据库。

试着通过If条件来调试它。成功了!非常感谢你!对不起,我不能投赞成票。。我没有足够的声誉。@MattG也看看Schlaus的答案,以防止出现安全问题(sql注入)。我在向数据库添加第二条记录时仍然遇到问题。似乎不允许超过1条记录。有什么想法吗?@MattG嗯,你有没有设置一个
id
?可能是您一直试图插入一条id为1的记录,但由于该记录现在已经存在,您需要将下一条记录的id设置为2。您可以让
MySQL
通过在字段上使用
AI-Auto Increment
选项自动为您执行此操作。如果没有任何错误或更多细节,我真的无法做出任何其他猜测;)哦,好吧,可能就是这样。几天前设置字段时,我找不到自动递增选项。我将看一看文档,我相信这会解决它!谢谢,AgainIt返回了一些错误,但是你说得对,我需要mysqli。我想我需要温习一下+1关于注射漏洞,我自己忘了提及。谢谢提醒!这只是一个课堂专题,但知道这一点肯定很好!