无法将数据从注册页面(php)插入到mysql中

时间:2010-12-19 16:46:45

标签: php mysql

无法将.php文件中的数据插入mysql。不知道是什么问题。我有两个主要的.php文件。第一个是主页:

   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"     "http://www.w3.org/TR/html4/frameset.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="jmtoday" class="   no_js">
    <html>
    <head>
    <link href='icon.jpg' rel='icon' type='image/jpg'/>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-language" content="en" />
    <LINK REL=StyleSheet HREF="Mainstyles.css" TYPE="text/css"></link>
    <Title>Welcome to JM Today</title>
    </head>
    <body>
    <div class="container">
    <div class="header"><a class="logo" HREF="Homepage.html"><img src="Logo.png" alt="[JM   Today]" ></a></div>
    <div class="navbar">
   <ul class="navbar"><li class="navbar"><a class="navbar" HREF="Homepage.html">Homepage</a>   </li>
    <li class="navbar"><a class="navbar" HREF="Classes.html">Classes</a></li>
    <li class="navbar"><a class="navbar" HREF="Calendar.html">Calendar</a></li>
    <li class="navbar"><a href="Tutoring.html" class="navbar">Tutoring</a></li>
    <li class="navbar"><a href="News.html" class="navbar" >News</a></li>
    <li class="navbar"><a href="Aboutus.html" class="navbar">About Us</a></li></div>
    <div class="left"></div>
    <div class="content"><h2 class="homepage">For Students. By Students.</h2><p>Welcome to     JM Today, where you could find anything about your school, your classmates, and everything else. Online.<br/><br/><br/><br/><br/><br/></p></div>
<div class="signup"><h2 class="homepage">Sign Up Now</h2><h3 class="homepage">It's free, as you expected.</h3>
    <form name="registration_form" method="post" action="register.php" onsubmit="return  Validate();"><input type=hidden name=todo value=post>
    <table>
 <tr><td class="label">First Name:</td><td><input type="text" name="fname"></td></tr>
 <tr><td class="label">Last Name:</td><td><input type="text" name="lname"></td></tr>
 <tr><td class="label">E-Mail Address:</td><td><input type="text" name="email"></td>   </tr>
 <tr><td class="label">Username:</td><td><input type="text" name="username"></td></tr>
 <tr><td class="label">Password:</td><td><input type="password" name="password"></td></tr>
 <tr><td class="label">Password Confirmation:</td><td><input type="password"   name="password_confirmation"></td></tr>
 <tr><td class="label"><input type="submit" value="Register"></td></tr>
 </form>
 </table>
 <script language = "Javascript">

    function Validate()
    {
        if (document.registration_form.fname.value == '') 
        {
            alert('Please fill in your  first name!');
            return false;
        }
        if (document.registration_form.lname.value == '') 
        {
            alert('Please fill in your last name!');
            return false;
        }
        if (document.registration_form.email.value == '') 
        {
           alert('Please fill in your email address!');
           return false;
        }
        if (document.registration_form.username.value == '') 
        {
            alert('Please fill in your desired username!');
            return false;
        }
        if (document.registration_form.password.value == '') 
        {
           alert('Please fill in your desired password!');
          return false;
        }
        if (document.registration_form.password_confirmation.value == '') 
        {
           alert('Please fill in your password again for confirmation!');
          return false;
        }
        if (document.registration_form.password.value != 
        document.registration_form.password_confirmation.value) 
        {
            alert("The two passwords are not identical! "+
            "Please enter the same password again for confirmation");
            return false;
        }

        return true;
    }
    </script>

    </div>
    </div>

    <div class="footer"><p class="copyright">JMToday &copy; 2010</p><p class="right">A Samir    Ghobril Production</p></div>
    </body>

第二个是register.php

    !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"    "http://www.w3.org/TR/html4/frameset.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="jmtoday" class="    no_js">
    <html>
    <head>
    <link href='icon.jpg' rel='icon' type='image/jpg'/>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-language" content="en" />
    <LINK REL=StyleSheet HREF="Mainstyles.css" TYPE="text/css"></link>
    <Title>Sign up to JM Today</title>
    </head>
    <body>
    <?php 
    $dbservertype='mysql';
    $servername='localhost';
    $dbusername='root';
    $dbpassword='****';
    $dbname='jmtdy';
    connecttodb($servername,$dbname,$dbusername,$dbpassword);
    function connecttodb($servername,$dbname,$dbuser,$dbpassword)
    {
    global $link;
    $link=mysql_connect ("$servername","$dbuser","$dbpassword");
    if(!$link){die("Could not connect to MySQL");}
    mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());
    }
    ?>

    <?php

    $username=$_POST['username'];
    $password=$_POST['password'];
    $password2=$_POST['password_confirmation'];
    $todo=$_POST['todo'];
    $email=$_POST['email'];
    $fname=$_POST['fname'];
    $lname=$_POST['lname'];



    if(isset($todo) and $todo=="post"){

    $status = "OK";
    $msg="";


if(!isset($username) OR strlen($userid) <3){
$msg=$msg."Username should be equal to or more than 3 characters long<BR/>";
$status= "NOTOK";}     

    if(mysql_num_rows(mysql_query("SELECT username FROM users WHERE username =    '$username'"))){
    $msg=$msg."Username already exists. Please try another one<BR/>";
    $status= "NOTOK";}     


    if ( strlen($password) < 3 ){
    $msg=$msg."Password must be more than 3 charactors long<BR/>";
    $status= "NOTOK";}     

    if ( $password <> $password2 ){
    $msg=$msg."Passwords are not identical.<BR/>";
    $status= "NOTOK";}     


    if($status<>"OK"){
    echo "$msg<br/><input type='button' value='Retry' onClick='history.go(-1)'>";
    }else{
    if(mysql_query("insert into users(username,password,email,fname,lname)      values('$username','$password','$email','$fname','$lname')")){
    echo "Welcome, You have successfully signed up";}
    else{ echo "Database Problem, please contact Site admin";

    }

    }
    }
    ?>
    </body>
    </html>

如果你能帮助我,我会非常感激。 [编辑]好吧,我修复了代码并得到了此错误消息。用户'www-data'@'localhost'拒绝访问(使用密码:NO)。这有帮助吗?

4 个答案:

答案 0 :(得分:2)

如果您要发布回复,可能会有所帮助。

在我的测试中,我得到了这个

Username should be equal to or more than 3 characters long

虽然我使用了6个字符。看一下代码很明显:

$username=$_POST['username'];

[...]

if(!isset($username) OR strlen($userid) <3){
    $msg=$msg."Username should be equal to or more than 3 characters long<BR/>";
    $status= "NOTOK";
}     

您只是使用了错误的变量$ userid而不是$ username。纠正它,脚本应该正常工作。

但是在你这样做之前,你的代码还有一些问题:

  1. 永远不要在SQL中直接使用PHP变量!使用mysql_real_escape_string封装它们或者更好地使用类似mysqli_prepare()的内容,否则您的脚本将针对SQL注入攻击而打开,并且对于像“'”这样的字符会遇到很多麻烦
  2. 永远不要将root用作脚本的数据库用户。如果SQL处理中存在漏洞,请创建一个权限较少的权限以最小化效果。

  3. 清理代码! Indention是有原因的,可以帮助您阅读您的(和其他)代码。至少在发布它并寻求帮助之前这样做。运气好的话,你会自己发现错误。

  4. 检查您的HTML。那里有很多无效的东西......

答案 1 :(得分:0)

我猜测其中一个查询正在死亡,因为您没有正确转义您插入查询的任何数据。考虑当有人填写这样的用户名时会发生什么:

$username = "Miles O'Brien"
$query = "SELECT username FROM users WHERE username =    '$username'";
然后

$ query变为:

SELECT username FROM users WHERE username = 'Miles O'Brien'
                                                     ^^^^^^-- "bad data"

'brien'部分在您与用户名字段进行比较的字符串值之外结束,并导致解析错误。换句话说,每一个查询都是等待发生的SQL注入攻击。

至少,你需要做一些事情:

$username = mysql_real_escape_string($_POST['username']);

使数据“安全”填入查询字符串。

答案 2 :(得分:0)

提示在行

  

拒绝用户访问   'WWW的数据' @ 'localhost' 的

看起来您对mysql数据库的访问是以www用户身份进行的,而不是用户samaniac

你可以在你的页面上尝试以下

$link = mysql_connect('localhost', 'samaniac', 'your password here');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);

并告诉我你得到了什么......

答案 3 :(得分:-1)

好的,我已经编辑了registration.php代码。看看它。我收到一个错误:访问被拒绝用户'www-data'@'localhost'(使用密码:NO)。我想这意味着它没有识别我的sql用户名/密码或类似的东西。无论如何,这是我的php文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="jmtoday" class=" no_js">
<head>
<link href='icon.jpg' rel='icon' type='image/jpg'/>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-language" content="en" />
<LINK REL=StyleSheet HREF="Mainstyles.css" TYPE="text/css"></link>
<Title>Sign up to JM Today</title>
</head>
<body>
<?php 
    $dbservertype='mysql';
    $servername='localhost';
    $dbusername='samaniac';
    $dbpassword='*****';
    $dbname='jmtdy';
    function connecttodb($servername,$dbname,$dbuser,$dbpassword)
    {
        global $link;
        $link=mysql_connect("$servername","$dbuser","$dbpassword");
        if(!$link){
            die("Could not connect to MySQL");
                }
    connecttodb($servername,$dbname,$dbusername,$dbpassword);           
mysql_select_db("$dbusername",$link) or die ("could not open db".mysql_error());
}
?>


<?php

    $username=mysql_real_escape_string($_POST['username']);
    $password=mysql_real_escape_string($_POST['password']);
    $password2=mysql_real_escape_string($_POST['password_confirmation']);
    $todo=mysql_real_escape_string($_POST['todo']);
    $email=mysql_real_escape_string($_POST['email']);
    $fname=mysql_real_escape_string($_POST['fname']);
    $lname=mysql_real_escape_string($_POST['lname']);



if(isset($todo) and $todo=="post"){

    $status = "OK";
    $msg="";
    }

if(!isset($username) OR strlen($username) <3){
    $msg=$msg."Username should be equal to or more than 3 characters long<BR/>";
    $status= "NOTOK";
    }                   

if(mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = '$username'")or die (mysql_error ()))){
$msg=$msg."Username already exists. Please try another one<BR/>";
$status= "NOTOK";}                  


if ( strlen($password) < 3 ){
    $msg=$msg."Password must be more than 3 charactors long<BR/>";
    $status= "NOTOK";
    }                   

if ( $password <> $password2 ){
    $msg=$msg."Passwords are not identical.<BR/>";
    $status= "NOTOK";
    }                   


if($status<>"OK"){
    echo "$msg<br/><input type='button' value='Retry' onClick='history.go(-1)'>";
}
    else {
if(mysql_query("insert into users(username,password,email,fname,lname) values('$username','$password','$email','$fname','$lname')")or die (mysql_error ())){
    echo "Welcome, You have successfully signed up";
    }
else { 
echo "Database Problem, please contact Site admin";
}

}
?>
</body>
</html>