当我在php中从一个页面发布信息到另一个页面时没有任何反应

时间:2012-09-18 15:47:16

标签: php html login system profile

我正在使用php登录系统。登录和注册本身是有效的,但我登录后是这样的,页面使用php打印带有用户名和密码的隐藏输入的html表单,并且提交按钮将这些输入发布到'profile'php页面,显示来自该用户的消息,并允许用户发布新消息。 的login.php:

<html>
<head>
<title>Login</title>
<?php
if(isset($_POST['submit1'])){
    $canconnect=false;
    $user_name="root";
    $password="";
    $database="users";
    $server="localhost";
    $user=$_POST['username'];
    $pass=$_POST['pass'];
    $db_handle=mysql_connect($server,$user_name,$password);
    $db_found=mysql_select_db($database,$db_handle);
    if($db_found){
        $SQL="SELECT * FROM users";
        $result=mysql_query($SQL);
        while($db_field=mysql_fetch_assoc($result)){
            if(($user==$db_field['Username'])&&($pass==$db_field['Password'])){
                $canconnect=true;
            }
        }
        mysql_close($db_handle);
        if($canconnect){
            print("Welcome, ".$user."<br><form name='ftoprof' method='post' action='profile.php'><input type='hidden' name='hiduser' value='<?php echo $user;?>'/><input type='hidden' name='hidpass' value='<?php echo $pass;?>'/><input type='submit' name='profsub' value='View Profile'/></form>");
        }else{
            print("Username or password incorrect, please try again.");
        }
    }else{
        print("Users Database not found.");
        mysql_close($db_handle);
    }
}else{
    print("Enter Username and corresponding Password.");
}
?>
</head>
<body>
<form name="form1" method="post" action="login.php">
<input type="text" name="username" value="User"/>
<input type="text" name="pass" value="password"/>
<input type="submit" name="submit1" value="Submit"/>
</form>
Don't have an account? <a href="signup.php">Sing Up</a>
</body>
</html>

我不知道问题是在这里还是在profile.php上:

<html>
<head>
<title>Profile</title>
<?php
if(isset($_POST['profsub'])){
$user=$_POST['hiduser'];
$pass=$_POST['hidpass'];
$canconnect=false;
$username="root";
$password="";
$server="localhost";
$database="users";
$db_handle=mysql_connect($server,$username,$password);
$db_found=mysql_select_db($database,$db_handle);
if($db_found){
    $SQL="SELECT * FROM users";
    $result=mysql_query($SQL);
    while($db_field=mysql_fetch_assoc($result)){
    if(($user==$db_field['Username'])&&($pass==$db_field['Password'])){
        $canconnect=true;
    }
    }
    $SQL="SELECT * FROM messages";
    $result=mysql_query($SQL);
    while($db_field=mysql_fetch_assoc($result)){
    print($db_field['message']."<br><br>");
    }if($canconnect){
    print("<form name='mesform' method='post' action='profile.php'><input type='hidden' name='user' value='<?php echo $user; ?>'/><input type='text' name='message' value='message'/><input type='submit' name='messub' value='submit'/></form>");
    }
}else{
    print("Database not found");
}
}elseif(isset($_POST['messub'])){
$mes=$_POST['message'];
$user=$_POST['user'];
$server="localhost";
$username="root";
$password="";
$database="users";
$db_handle=mysql_connect($server,$username,$password);
$db_found=mysql_select_db($database,$db_handle);
if($db_found){
        $SQL="INSERT INTO messages (User, Message) VALUES ('{$user}','{$mes}')";
        $result=mysql_query($SQL);
    }else{
        print("Database not found");
    }

}else{
print("No user's profile to display");
}
?>
</head>
<body>
</body>
</html>

我在登录页面输入用户名和密码,然后会弹出一个“查看个人资料”按钮。用户数据库表具有用户名密码电子邮件和电源(管理员)。消息数据库表只有消息和用户(发布它)。 当我点击“查看个人资料”按钮时,它会将我带到个人资料页面,但在该页面上根本没有显示,我无法分辨出问题是什么,我无法分辨出任何可能导致的情况在这。请告诉我我需要对我的代码做些什么来完成这项工作。顺便说一下,我在我的电脑上运行一个带有wamp的“服务器”,因此我使用了localhost。这是我的第一个php项目,所以我没想到在没有任何帮助的情况下第一次尝试是完美的,是的我知道密码使用文本我会改变它,如果我让它工作(输入类型=“密码”右?) 谢谢你提前

2 个答案:

答案 0 :(得分:2)

print("Welcome, $user <br><form name='ftoprof' method='post' action='profile.php'><input type='hidden' name='hiduser' value='$user'/><input type='hidden' name='hidpass' value='$pass'/><input type='submit' name='profsub' value='View Profile'/></form>");

替换

之后的行
if($canconnect){ 

上面的行可能会解决问题

答案 1 :(得分:1)

请!为了安全的爱,请不要使用此代码!

正如@TimG在评论中所说的“PDO,PDO,PDO”

为了帮助教育你,让我提一下这段代码的两个主要问题:

<强> ISSUE1

此select语句要求所有用户,然后循环访问它们。数据库查询应该使用WHERE子句来限制它移动的数据量。

$SQL="SELECT * FROM users";
while($db_field=mysql_fetch_assoc($result)){
  if(($user==$db_field['Username'])&&($pass==$db_field['Password'])){
      $canconnect=true;
  }
}

ISSUE2 真正的杀手:

$SQL="INSERT INTO messages (User, Message) VALUES ('{$user}','{$mes}')";

这是一个等待发生的SQL注入攻击。您可以在该术语上进行更多搜索,但简而言之 - SQL注入攻击是最常见,最容易和最危险的漏洞之一。从字面上看,这段代码是对数据库其余部分的一扇门。

第3期纯文本密码

以纯文本格式存储密码是一个非常糟糕的主意。关于如何对密码进行加密和加密,这里有很多关于SO的讨论。

如果您要学习PHP中的数据库编程,请不要自费学习垃圾,并从一开始就学习PDO和安全性。