【问题标题】:Why isn't this echo command being executed?为什么不执行此 echo 命令?
【发布时间】:2014-11-16 04:53:15
【问题描述】:

请有人帮我理解为什么 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>

测试链接:https://www.eiseverywhere.com/ehome/index.php?eventid=106953&tabid=239372,如果您想测试,有效的“会员编号”是 1234。

将表单留空确实会给出正确的错误消息,输入有效号码会正确重定向我,但输入无效号码(例如 9999)不会给我正确的输出消息。

提前感谢您的任何回复。

问候, 灰

【问题讨论】:

  • @Rizier123 它们属于两个不同的ifs,这很难看,因为这段代码根本没有缩进。
  • 不要使用 mysql_ 它已被弃用,很快将被删除。您应该使用 mysqli_ 或最好使用 PDO

标签: php html mysql forms


【解决方案1】:

您需要计算行数,因为即使 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_ 类已弃用,将在下一个版本中删除,建议您使用mysqli_ 或使用PDO

【讨论】:

  • 这还没解决?
  • 它会给出某种错误吗?如果没有,您可以检查您的display error 设置以确保它们已启用。
【解决方案2】:

您的脚本难以调试有几个原因:

  1. 它没有缩进(我已经在问题中为你解决了这个问题)
  2. 您正在使用已弃用的 mysql 函数(请参阅this)。切换到 PDO 或 mysqli。
  3. 您的脚本中有多个退出点。每次调用数据库时,如果失败,您就会“死亡”。这不好

无论如何,我怀疑其中一个“死”会使您的脚本过早结束。与其使用 die,不如自己处理错误。

【讨论】:

  • 我正在为从 mysql 到 mysql 或 PDO 的转换而苦苦挣扎,是否有任何地方的傻瓜指南?另外,我如何交换出口点以自己处理它们?
【解决方案3】:

我认为这应该可行:

(也将错误报告放在顶部!)

<?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();
    }
?>

【讨论】:

  • 为什么数据库选择没用?和我的回答有什么区别?
【解决方案4】:

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

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

         }else{

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

应该执行得很好

【讨论】:

  • 这还没解决?
  • 输出是什么样的。它是否仍然像以前一样工作
猜你喜欢
  • 1970-01-01
  • 2019-10-15
  • 2020-09-06
  • 2020-06-08
  • 2021-10-17
  • 2016-06-28
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多