0

所以我有以下PHP代码

<?php 

error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

    $poscote = $_POST['postcode'];

    mysql_real_escape_string($poscote);

    //! Checks for direct access to page

    if (empty($_POST)) {
        header('location:index.php?nothingentered');
        die();
    }


    require_once('../Connections/PropSuite.php'); 


    mysql_select_db($database_Takeaway, $Takeaway);
    $query_PC = "SELECT * FROM Postcodes WHERE pc = '$postcode'";
    $PC = mysql_query($query_PC, $Takeaway) or die(mysql_error());
    $row_PC = mysql_fetch_assoc($PC);

    if( mysql_errno() != 0){
     // mysql error
     // note: message like this should never appear to user, should be only stored in log
     echo "Mysql error: " . htmlspecialchars( mysql_error());
     die();
     }

    else {

    echo $row_PC['oc'];

    }

?>

这是使用以下代码处理表单

<form action="search_postcode.php" method="post">
        <input type="text" name="postcode" />
        <button>Go</button>
    </form>

奇怪的是它只是显示一个空白屏幕,没有错误,我没有检查过任何东西,似乎无法找到解决方案。

非常感谢您的帮助。

4

3 回答 3

1

除了其他答案之外,并且没有提及您应该使用PDOor mysqli,您可能遇到了字符编码问题。尝试做这样的事情:

define('DB_CHARSET', 'ISO-8859-1');
define('REPLACE_FLAGS', ENT_COMPAT | ENT_XHTML);

...

echo "Mysql error: " .  htmlentities(mysql_error(), REPLACE_FLAGS, DB_CHARSET);

DB_CHARSET用您的数据库使用的任何编码替换 的值。如果您尝试使用htmlentities()无效字符,它将产生一个空字符串。

于 2013-03-20T21:46:53.763 回答
1

由于您的$postcode变量未定义,因此您正在数据库中查找pc错误消息所在的行。

该查询可以很好地完成而没有错误,但它可能会产生 0 行,因此您没有错误,也没有结果。在这种情况下,您什么也不输出,因此您将看到一个空白屏幕。

你可能想要:

$postcode = mysql_real_escape_string($poscote);

代替:

mysql_real_escape_string($poscote);

并将其放在数据库连接部分下方。

此外,您应该切换到 PDO(或 mysqli)和准备好的语句以避免 sql 注入问题,因为这些mysql_*函数已被弃用。请注意,mysql_real_escape_string当您没有打开数据库连接时,您不会做任何事情(除了删除变量的内容......)。

于 2013-03-20T21:44:46.670 回答
0

从 php.net 开始,要使用 启用 php 错误ini_set,您必须这样做

ini_set('display_errors', '1')

这是取自此链接

于 2013-03-20T21:45:12.617 回答