Php 为什么不执行这个echo命令?

Php 为什么不执行这个echo命令?,php,html,mysql,forms,Php,Html,Mysql,Forms,请有人帮我理解为什么echo命令“会员号码不正确,请再试一次”不起作用 其他一切似乎都运转正常 <?php define('DB_HOST', 'localhost'); define('DB_NAME', 'DBNAME'); define('DB_USER', 'USER'); define('DB_PASSWORD', 'PASS'); $con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die("Failed to conn

请有人帮我理解为什么echo命令“会员号码不正确,请再试一次”不起作用

其他一切似乎都运转正常

<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'DBNAME');
define('DB_USER', 'USER');
define('DB_PASSWORD', 'PASS');
$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());
$db = mysql_select_db(DB_NAME, $con) or die("Failed to connect to MySQL: " . mysql_error());
$mem_no = $_POST['mem_no'];

function SignIn()
{
    session_start();
    if (!empty($_POST['mem_no'])) {
        $query = mysql_query("SELECT * FROM members where mem_no = '$_POST[mem_no]'") or die(mysql_error());
        $row = mysql_fetch_array($query) or die(mysql_error());
        if (!empty($row['mem_no'])) {
            $_SESSION['mem_no'] = $row['mem_no'];
            header("Location: " . $_POST['cat_link']);
        } else {
            echo "Incorrect Membership Number, please try again.";
        } // This line is not executing
    } else {
        echo "Please go back and enter a Membership Number";
    }
}

if (isset($_POST['submit'])) {
    SignIn();
}
HTML格式如下:

<form method="post" action="/check.php">
<p>Membership No.</p>
<input name="mem_no" type="text" id="mem_no">
<input name="cat_link" type="hidden" value="https://www.redirectlink.com">
<input name="submit" type="submit" id="submit" value="AELP Member Rate">
</form>
链接到测试:如果您希望测试,有效的“会员编号”是1234

将表格留空会给出正确的错误信息,输入有效数字会正确重定向我,但输入无效数字9999(例如)不会给出正确的输出信息

提前感谢您的回复

问候,,
Ash

您需要计算行数,因为即使sql查询没有结果,它也不是空的。数一数

function SignIn()
{
    session_start();
    if (!empty($_POST['mem_no'])) {
        $query = mysql_query("SELECT * FROM members where mem_no = '". $_POST['mem_no'] ."'") or die(mysql_error());

        #count rows
        $count = mysql_num_rows($query);
        $row = mysql_fetch_array($query) or die(mysql_error());

        #check count
        if ($count != 0) {
            $_SESSION['mem_no'] = $row['mem_no'];
            header("Location: " . $_POST['cat_link']);
        } else {
            echo "Incorrect Membership Number, please try again.";
        } 

    } else {
        echo "Please go back and enter a Membership Number";
    }
}

只是一个小小的提醒。PHP中的mysql_uu类已被弃用,将在下一个版本中删除,我建议您使用mysqli_uu或使用PDO的

将两个else语句放在一行是没有意义的。从内部if块中取出最后一个else块

   if(!empty($_POST['mem_no'])) {
        //code

         }else{

             echo "Please go back and enter a Membership Number";
         } 

这应该可以很好地执行

由于以下几个原因,您的脚本很难调试:

没关系,我已经帮你解决了这个问题 您正在使用已弃用的mysql函数,请参见。切换到PDO或mysqli。 脚本中有几个退出点。每次你打电话到数据库,如果你失败了,你就死定了。那不好
不管怎样,我怀疑其中一个会让你的脚本过早结束。不要使用die,而是自己处理错误。

我认为这应该可以:

也把错误报告放在最上面

<?php
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
?>

<?php
    session_start();

    define('DB_HOST', 'localhost');
    define('DB_NAME', 'DBNAME');
    define('DB_USER', 'USER');
    define('DB_PASSWORD', 'PASS');

    $con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());
    //$db = mysql_select_db(DB_NAME, $con) or die("Failed to connect to MySQL: " . mysql_error()); //Useless

    $mem_no = $_POST['mem_no'];

    function SignIn() {

        if (!empty($_POST['mem_no'])) {
            $query = mysql_query("SELECT * FROM members WHERE mem_no = '" . $_POST['mem_no'] . "'") or die(mysql_error());
            $row = mysql_fetch_array($query) or die(mysql_error());
            $count = mysql_num_rows($query);

            if ($count >= 1) {
                $_SESSION['mem_no'] = $row['mem_no'];
                header("Location: " . $_POST['cat_link']);
            } else {
                echo "Incorrect Membership Number, please try again.";
            } // This line is not executing
        } else {
            echo "Please go back and enter a Membership Number";
        }
    }

    if (isset($_POST['submit'])) {
        SignIn();
    }
?>

@Rizier123它们属于两个不同的ifs,这很难看到,因为这段代码根本没有缩进。不要使用mysql,它已弃用,不久将被删除。您应该使用mysqli_uuu,或者最好是它还没有修复它?它会给出某种错误吗?如果没有,请检查显示错误设置以确保它们已启用。这还没有修复它?输出是什么样子的。它仍然像以前一样工作吗?为什么数据库选择是无用的?我的答案有什么不同?我正在努力从mysql转换到mysql或PDO,有没有傻瓜指南?另外,我如何交换出口点,以便自己处理它们?