【问题标题】:PHP MySQL: Why is my form loading a plaintext page?PHP MySQL:为什么我的表单加载纯文本页面?
【发布时间】:2013-03-09 11:44:49
【问题描述】:

我试图实现一个在数据库中更改密码的表单,但是,当我在表单上提交详细信息时,它只是将我定向到目标页面......但显示出来并且浏览器上的明文代码....为什么要这样做!

形式:

    <h1 align="center">Change Password</h1>

            <form method="POST" action="reset_pwd.php">
                <table class='altrowstable' id='alternatecolor' >
                    <tr>
                        <td align="right">Username: </td>
                        <td><input type="TEXT" name="username" value=""/></td>
                    </tr>
                    <tr>
                        <td align="right">Current Password: </td>
                        <td><input type="password" name="password" value=""/></td>
                    </tr>
                    <tr>
                        <td align="right">New Password: </td>
                        <td><input type="password" name="npassword" value=""/></td>
                    </tr>
                    <tr>
                        <td align="right">Repeat New Password: </td>
                        <td><input type="password" name="rpassword" value=""/></td>
                    </tr>
                    <tr><td align="center">
                        <a href="forgot_password.php">Forgot password</a>
                        </td>
                   <td>
                        <input type="submit" name="submit" value="Change Password"/>
                        </td>
                    </tr>
                </table>

            </form>
        <br>
 <?php echo $msg; ?>

和目标php页面:

<?php
include('dbconfig.php');


$msg = "";


if (mysql_real_escape_string($_POST['submit'])):


    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string(md5($_POST['password']));
    $npassword = mysql_real_escape_string(md5($_POST['npassword']));
    $rpassword = mysql_real_escape_string(md5($_POST['rpassword']));





    $sql = "SELECT * FROM user_info WHERE user_id = '$username' ";
    $query = mysql_query($sql);
    $numrows = mysql_num_rows($query);


    while ($rows = mysql_fetch_array($query)):

        $dbusername = $rows['username'];
        $dbpassword = $rows['password'];
        $dbfirstname = $rows ['firstname'];
        $dblastname = $rows ['lastname'];

    endwhile;


    if (empty($username) || empty($password) || empty($npassword) || 
    empty($rpassword)):

        $msg = "All fields are required";

    elseif ($numrows == 0):

        $msg = "This username does not exist";

    elseif ($password != $dbpassword):

        $msg = "The CURRENT password you entered is incorrect.";

    elseif ($npassword != $rpassword):

        $msg = "Your new passwords do not match";

    elseif ($npassword == $password):

        $msg = "Your new password cannot match your old password";

    else:


        mysql_query("UPDATE user_info SET password = '$npassword' WHERE user_id = 
         '$username'");

        $to = $email;

        $subject = "YOUR PASSWORD HAS BEEN CHANGED";

        $message = "<p>Hello $dbfirstname $dblastname. You've received this E-Mail
        because you have requested a PASSWORD CHANGE. ";

        $from = "myemail@.com";

        $headers = "From: $from";


        mail($to,$subject,$message,$headers);

        endif;
  endif;

 ?>

【问题讨论】:

  • 你根本没有从动作函数重定向控制。
  • 意思是在浏览器中显示php代码?
  • 纯文本是指来自目标页面的验证消息?
  • 您的网络服务器配置错误(将 php 文件视为纯文本)和/或 php 丢失
  • @Kautil 我不明白我做错了什么,请您详细说明。是的,它会打开目标页面并显示整个页面,就好像它在记事本中一样。

标签: php mysql database passwords


【解决方案1】:

请检查...“user_info”表中“user_id”的类型是什么...以及您在表单中的用户名字段中得到什么。

我正在询问这个查询...

$sql = "SELECT * FROM user_info WHERE user_id = '$username' ";

【讨论】:

    【解决方案2】:

    目标 php 中的第一个 $msg 仅用于目标 php,不会将值返回给表单

    其次,您可能正在寻找 if (isset($_POST['submit'])): 而不是 if (mysql_real_escape_string($_POST['submit'])):

    【讨论】:

      【解决方案3】:

      在浏览器中显示的目标页面没有 html 响应。为了显示内容,您需要形成正确的 html 以便它可以在浏览器中显示。

      在目标页面末尾添加以下html代码,以便显示消息(验证或成功)。

      <html><body>put your message here</body></htm>
      

      【讨论】:

      • 这应该是评论而不是回答兄弟
      【解决方案4】:

      您可能在包含的文件“dbconfig.php”的末尾忘记了一个额外的?>,因此将您的目标 php 页面视为 html。

      【讨论】:

      • 我不知道,这似乎是唯一的问题。为什么不在开始时在目标文件中尝试这样,看看会发生什么:
      • th trailing ?> 在 php 中是可选的,手册建议不要使用它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2020-01-16
      • 1970-01-01
      • 2012-08-10
      • 2016-11-23
      相关资源
      最近更新 更多