【问题标题】:PHP code not working and no errorsPHP代码不工作,没有错误
【发布时间】:2014-01-01 19:31:44
【问题描述】:

我编写的这段代码由于未知原因无法正常工作。 PHP 不报告任何错误或警告。

<html>
<head>
<title>PHP Blog</title>
</head>
<body>
<?php
require 'login.php';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());

mysql_select_db($db_database, $db_server)
    or die("Unable to select database: " . mysql_error());
if(isset($_POST['username']) and isset($_POST['password']))
{
    $pass = "test";
    $user = "test";
        if($_POST['username'] == "test" and $_POST['password'] == "test")
        {
            echo <<<_END
<form action="post.php" method="post"><pre>
Title: <input type="text" name="title">
Post:  <textarea rows="5" cols="64" name="post">
</textarea>
       <input type="submit" value="Submit">
</pre></form>
_END;
                if(isset($_POST['title']) and isset($_POST['post']))
                {
                    $title = $_POST['title'];
                    $post = $_POST['post'];
                    $query = "INSERT INTO blog(title,post) VALUES('$title', '$post')";
                    mysql_query($query);
                    echo 'Succesfully posted..';
                    echo '<a href="blog.php">Click here</a>';
                }

        }
        else
        {
            echo "Wrong Password!";
        }
}
?>

在我通过单击按钮设置变量 $_POST['title']$_POST['post'] 之前,一切正常。当我这样做时,我只会得到一个空白页。

【问题讨论】:

  • 天啊。我希望没有人愿意在titlepost 中加上撇号。 xkcd.com/327
  • 你在 login.php 文件中有什么?
  • @Tom 您还应该转义您的 $_POST 变量,否则 INSERT 查询最终会失败。
  • 我没有在公共场合使用此代码。我知道这是不安全的。
  • 我的帖子标题是罗伯特'; DROP TABLE 博客;--

标签: php


【解决方案1】:

如果您提供的代码是post.php,则问题出在:

当您按下提交按钮时,post.php 只会收到来自表单的$_POST['title']$_POST['post']

使$_POST['username']$_POST['password'] 为空/空。因此为 if 语句返回 FALSE,并产生一个空白页。

有很多方法可以解决这个问题,具体取决于您的实施。

  1. 您可以从表单中传递用户名和密码值。您可以根据需要使用隐藏或文本输入类型。

    <input type="hidden" name="username"><input type="hidden" name="password">
    
  2. isset() 中使用$_POST['title']$_POST['post'] 而不是$_POST['username']$_POST['password']

还有更多……

【讨论】:

  • 我的意思是这太聪明了,我为什么不发布同样的东西
【解决方案2】:

因为您的表单应该是:

echo <<<_END
    <form action="post.php" method="post"><pre>
    Username: <input type="text" name="username">
    Password: <input type="password" name="password">
    Title: <input type="text" name="title">
    Post:  <textarea rows="5" cols="64" name="post">
    </textarea>
    <input type="submit" value="Submit">
    </pre></form>
_END;

您丢失了您的 $_POST['username']$_POST['password'] 并且没有回显测试,因为您没有 else 用于:

if(isset($_POST['username']) and isset($_POST['password']))

或者您可以将您的登录信息保存在会话中并使用它们,而无需让用户再次输入他的用户名和密码。

【讨论】:

  • 我希望我能看到谁是反对者,我只想知道我做错了什么..
  • 我做到了,你的表格应该打印在body标签之后,因为IF指令;为了让他/你的代码正常工作,必须在输入 IF 条件之前设置密码和用户名
  • 我有一个 else for if(isset($_POST['username']) 和 isset($_POST['password']))
  • @Tom 不,你还有 if($_POST['username'] == "test" and $_POST['password'] == "test") 的 else
  • @IonutFlaviusPogacian ... 表单应该打印在 OP 想要的地方,为了让代码正常工作,我解释了他应该做什么。
【解决方案3】:

您必须在正文标记后立即回显登录表单。

如果没有,您将始终得到一个空白页面,因为您的用户名和密码将始终为空白。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2018-05-16
    • 1970-01-01
    • 2023-01-31
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多