我开始学习SQL和PHP代码的基础知识。
我正在尝试创建一个简单的简报订阅页面。这将要求用户输入他们的电子邮件并提交。然后,这将被添加到我的数据库中。
现在,当HTML和PHP代码是分开的并且提交发生但是重定向到带有echo的PHP页面时,这很有效。
我想在同一页面上收到消息,我尝试在页面中合并PHP代码,如下所示
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){
mysql_connect("hostname", "username", "password");
mysql_select_db("db name");
$user = $_POST['email'];
$query = "INSERT INTO tablename(columname)VALUES('$email')";
echo "inserted";
}
?>
<html>
<form method="POST" action="" >
<label>Email:</label> <input name="email" type="text"/>
<input type="submit" name="submit" value="Insert" /> <br>
</form>
</html>
无论使用此代码,它都不会做任何事情。
我在这里做错了什么?感谢您的专业建议。
答案 0 :(得分:0)
请使用prepare语句来阻止Sql注入。
以下是示例代码尝试此操作。
ini_set('display_errors', 1);
ini_set('log_errors', 1);
error_reporting(E_ALL);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$connect = new mysqli ("localhost", "root", "usbw", "test");
if (mysqli_connect_errno()) {
echo 'Failed to connect to MySQL:' . mysqli_connect_error();
}
if (isset($_POST['submit'])) {
$email = filter_input(FILTER_VALIDATE_EMAIL, $_POST['email']);
$sql = "INSERT INTO table (email) VALUES (?)";
$stmt = $connect->prepare($sql);
$stmt->bind_param('s', $email);
$result = $stmt->execute();
if ($result) {
$msg = 'Succesfully added';
} else {
$msg = 'OOPS Error Occured';
}
}
?>
<html>
<form method="POST" action="" >
<label>Email:</label> <input name="email" type="text"/>
<input type="submit" name="submit" value="Insert" /> <br>
</form>
</html>
答案 1 :(得分:0)
代码中的错误很少,您可以通过执行以下操作来修复它们:
首先将文件另存为php文件。例如,将其命名为“email.php”。
制作表格action =“email.php”
不要在同一个文件中写两个完整的单独代码,一个用于php文件,另一个用于html文件,就像你一样。您可以使用heredoc语法在PHP代码中包含html代码,该语法允许您包含如下所示的长html代码:
echo<<<_HTMLCODE
<form method="POST" action="" >
<label>Email:</label> <input name="email" type="text"/>
<input type="submit" name="submit" value="Insert" /> <br>
</form>
_HTMLCODE;
在查询语法中,添加$ user而不是$ email,因为变量$ user包含表单提交的值。
添加代码以执行插入的查询。例如: 的mysql_query($查询);
所以你的最终代码将是这样的:
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){
mysql_connect("hostname", "username", "password");
mysql_select_db("db name");
$user = $_POST['email'];
$query = "INSERT INTO tablename VALUES('$user')";
mysql_query($query);
echo "inserted";
}
echo<<<_HTMLCODE
<form method="POST" action="email.php" >
<label>Email:</label> <input name="email" type="text"/>
<input type="submit" name="submit" value="Insert" /> <br>
</form>
_HTMLCODE;
?>
在我在localhost上添加数据库的数据后,我已经尝试了上面的代码,之后我为电子邮件创建了一个表,并且它有效。以下是我的代码编辑器中包含数据库访问信息和表名的已编辑代码:
当我在数据库中打开表格电子邮件时,我找到了使用表单提交的电子邮件(修改后的代码):
(建议:使用mysqli而不是mysql)