【问题标题】:When I post info from one page to another in php nothing happens当我在 php 中将信息从一个页面发布到另一个页面时,什么也没有发生
【发布时间】:2012-09-10 22:09:38
【问题描述】:

我正在使用 php 进行登录系统。登录和注册本身可以工作,但我在登录后,页面使用 php 打印一个带有隐藏的用户名和密码输入的 html 表单,提交按钮将这些输入发布到“配置文件”php页面,它显示来自该用户的消息,并允许用户发布新消息。 登录.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>

我在登录页面输入用户名和密码,它会弹出一个按钮,上面写着“查看个人资料”。用户数据库表有用户名密码电子邮件和电源(管理员)。 Messages db 表只有 Message 和 User(发布它)。 当我单击“查看个人资料”按钮时,它会将我带到个人资料页面,但该页面上什么也没有显示,我不知道问题是什么,我不知道会导致什么情况在这。请告诉我我需要对我的代码做些什么才能使其工作。顺便说一句,我正在我的计算机上运行一个带有 wamp 的“服务器”,因此我使用了 localhost。这是我的第一个 php 项目,所以我没想到在没有任何帮助的情况下第一次尝试就完美了,是的,我意识到密码使用文本我会改变它,如果我让它工作(输入类型 =“密码”正确?) 提前谢谢

【问题讨论】:

  • 跟我说吧,“PDO, PDO, PDO, PDO” 请看看使用 PDO - PHP 中所有其他的数据库访问方法都是旧的,不应该使用。也使用参数化查询。此外,你应该散列(加盐)你的密码。

标签: php html login system profile


【解决方案1】:
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){ 

上面的那行可能会解决问题

【讨论】:

    【解决方案2】:

    请!出于对安全的热爱,请勿使用此代码!

    正如@TimG 在 cmets 中所说的“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 期纯文本密码

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

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

    【讨论】:

    • 另外,阅读一下单向加密的加盐和散列密码。一开始,单向加密是一个棘手的概念,但对于确保用户信息安全非常重要 - 特别是因为大多数用户将继续对所有内容使用相同的密码。
    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2017-10-12
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2013-05-08
    相关资源
    最近更新 更多