gpt4 book ai didi

php - 提交表单,mysql和php

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:32 25 4
gpt4 key购买 nike

我是 php 和 sql 以及所有这些东西的新手,我在 youtube 上观看了一个关于 php 论坛的教程,想知道为什么在提交表单时这段代码没有回显“成功”。我还想知道为什么它在我提交表单之前回显失败。我已成功连接到数据库。

<!DOCTYPE HTML>
<html>
<head>
<title>Register</title>
</head>
<body>
<form action="register.php" method="POST">
Username: <input type="text" name="username">
<br/>
Password: <input type="password" name="password">
<br/>
Confirm Password: <input type="password" name="confirmPassword">
<br/>
Email: <input type="text" name="email">
<br/>
<input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
</form>
</body>
</html>
<?php
require('connect.php');
$username = $_POST['username'];
$password = $_POST['password'];
$confirmPassword = $_POST['confirmPassword'];
$email = $_POST['email'];

if(isset($_POST["submit"])){
if($query = mysql_query("INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
echo "Success";
}else{
echo "Failure" . mysql_error();
}
}
?>

连接.php

<?php

$connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");

?>

最佳答案

这里有一些问题。

你用错了identifiers对于您的专栏(并被引用):

('id', 'username', 'password', 'email')

删除它们

(id, username, password, email)

或者使用反引号

(`id`, `username`, `password`, `email`)

mysql_error() 应该向您抛出一个错误,但它没有抛出错误,因为:

  • 您正在混合使用 MySQL API 与 mysqli_ 进行连接,然后在您的查询中使用 mysql_

这两个不同的 API 不会相互混合。

专门使用 mysqli_ 并将您当前的查询更改为:

if($query = mysqli_query($connect, "INSERT...

并将mysql_error()更改为mysqli_error($connect)

作为该 block 的重写:

if(isset($_POST["submit"])){
if($query = mysqli_query($connect,"INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
echo "Success";
}else{
echo "Failure" . mysqli_error($connect);
}
}

只是为了测试错误,按照我上面概述的方式进行更改,同时保持列周围的引号保持现在的方式。然后您将看到 MySQL 将抛出的错误。然后,您可以按照我在上面概述的方式进行操作,删除列名称周围的引号,或将其替换为反引号。

您看到的教程可能很好地使用了反引号,但可能不足以让您分辨出它们确实是反引号而不是单引号。

但是,你现在的代码是开放给SQL injection的.使用 mysqli with prepared statements , 或 PDO with prepared statements它们更安全


我注意到您可能以纯文本形式存储密码。如果是这种情况,非常不鼓励。

我建议您使用 CRYPT_BLOWFISH或 PHP 5.5 的 password_hash()功能。对于 PHP < 5.5,使用 password_hash() compatibility pack .


此外,而不是做:

$connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");

您应该检查错误,正如手册所述

$link = mysqli_connect("myhost","myuser","mypassw","mybd") 
or die("Error " . mysqli_error($link));

所以在你的情况下:

$connect = mysqli_connect("localhost", "root", "","php_forum") 
or die("Error " . mysqli_error($connect));

编辑:我将 action="register.php" 更改为 action="" 因为您正在使用其中的全部代码同一页。

<!DOCTYPE HTML>
<html>
<head>
<title>Register</title>
</head>
<body>
<form action="" method="POST">
Username: <input type="text" name="username">
<br/>
Password: <input type="password" name="password">
<br/>
Confirm Password: <input type="password" name="confirmPassword">
<br/>
Email: <input type="text" name="email">
<br/>
<input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
</form>
</body>
</html>
<?php
require('connect.php');
$username = $_POST['username'];
$password = $_POST['password'];
$confirmPassword = $_POST['confirmPassword'];
$email = $_POST['email'];

if(isset($_POST["submit"])){
if($query = mysqli_query($connect,"INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$email."')")){
echo "Success";
}else{
echo "Failure" . mysqli_error($connect);
}
}
?>

关于php - 提交表单,mysql和php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com