我正在为我的大学编写项目,我可以从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');
}
?>
当我点击注册按钮时,注意到发生并且页面只是刷新!
问题在哪里?
答案 0 :(得分:1)
您应该在使用之前定义变量,如下所示:
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')");
很少有事情需要注意:
始终检查您尝试访问的$_POST
变量是否已设置。否则,您将遇到错误。
if(isset($_POST['name']) && isset($_POST['username']) && isset($_POST['password']) && isset($_POST['rePassword']) && isset($_POST['email'])) {
// do stuff here
} else {
// show error here
}
执行此类代码会导致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']);
永远不要使用root用户连接到数据库,因为它会授予攻击者对数据库的无限制访问权限。对于将访问您的数据库的每个应用程序始终setup a dedicated user。
虽然从学习的角度来看代码是好的,但最好停止使用mysql_
函数集they have been deprecated。使用mysqli类更好,因为它支持parameterized queries that prevent sql injection。