无法将数据插入我的 SQL

can't insert data into my SQL

我正在为我的大学编写项目,我可以从 my_sql_query 手动插入数据,但无法从某些字段插入。

这是我的代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>

<script type="text/javascript">
function checkForm(){
    if(document.regForm.name.value=='')
    alert('لطفا نام خود را وارد کنید')
    else if(document.regForm.username.value=='')
    alert('لطفا نام کاربری خود را وارد کنید')
    else if(document.regForm.password.value=='')
    alert('لطفا رمز عبور خود را وارد کنید')
    else if(document.regForm.rePassword.value=='')
    alert('لطفا عبور خود را دوباره وارد کنید')
    else if(document.regForm.rePassword.value!=document.regForm.password.value)
    alert('رمز عبور وارد شده یکسان نیست')

    else if(document.regForm.email.value=='')
    alert('لطفا ایمیل خود را وارد کنید')
    else
    document.regForm.submit();
}
</script>
<link rel="stylesheet" href="css/bootstrap.css">
</head>

<body>

<form action="" method="post" dir="rtl" name="regForm" >
<div class="form-group">
<br> <br> <br> <br>
<label >name</label>
<input class="form-control"  type="text" name="name" placeholder="حسین محمودی">
</div>
<div class="form-group">
<label >username</label>
<input class="form-control" type="text" name="username" placeholder="iHMahmoodi">
</div>
<div class="form-group">
<label >password</label>
<input class="form-control" type="password" name="password" placeholder="رمز">
</div>
<div class="form-group">
<label >repass</label>
<input class="form-control" type="password" name="rePassword" placeholder="تکرار رمز عبور">
</div>
<div class="form-group">
<label >email</label>
<input class="form-control" type="email" name="email" placeholder="ایمیل">
</div>
<input type="submit" class="btn btn-success"  onClick="checkForm()" name="reg" value="register">

</div>


</form>
<?php
connect();
$r=mysql_query("insert into login() values('','$name','$username','$password','$email','u')");
connect();
$name=$_POST['name'];
$username=$_POST['username'];
$password=$_POST['password'];
$rePassword=$_POST['rePassword'];
$email=$_POST['email'];
if($name && $username && $password && $email)
{
connect();
$r=mysql_query("insert into login() values('','$name','$username','$password','$email','u')");

if($r)
echo '<script>alert("اطلاعات شما ثبت شد "); </script>';
}
?>
</body>
</html>

我使用 bootstrap 进行造型。
我的 connect() 代码是:

<?php
function connect()
{
   $db='ihmahmoodi';
    $connect=mysql_connect('localhost','root','');
    mysql_select_db($db,$connect);
    mysql_query('SET NAMES utf8');

}
?>

当我点击注册按钮时,出现提示并且页面刚刚刷新!
问题出在哪里?

您应该在使用变量之前定义它们,如下所示:

connect();
$name=$_POST['name'];
$username=$_POST['username'];
$password=$_POST['password'];
$rePassword=$_POST['rePassword'];
$email=$_POST['email'];
$r=mysql_query("insert into login values('','$name','$username','$password','$email','u')");

注意事项:

  1. 始终检查您尝试访问的 $_POST 变量是否已设置。否则,你会运行出错。

    if(isset($_POST['name']) && isset($_POST['username']) && isset($_POST['password']) && isset($_POST['rePassword']) && isset($_POST['email'])) { // do stuff here } else { // show error here }

  2. 像这样执行代码会导致 SQL injection vulnerability。始终假定用户提供的任何输入都是不可信的,并进行适当的验证。

    绝对的基础是像这样简单地转义用户输入:

    connect(); $name=$_POST['name']; $username=mysql_escape_string($_POST['username']); $password=mysql_escape_string($_POST['password']); $rePassword=mysql_escape_string($_POST['rePassword']); $email=mysql_escape_string($_POST['email']);

  3. 永远不要使用 root 用户连接到数据库,因为它会授予攻击者对您的数据库的不受限制的访问权限。对于将访问您的数据库的每个应用程序始终 setup a dedicated user

  4. 虽然从学习的角度来看你的代码很好,但最好停止使用 mysql_ 函数集作为 they have been deprecated. Using the mysqli class is better as it supports parameterized queries that prevent sql injection.