PHP empty错误消息

问题描述

| 我刚刚开始学习,并整理了以下表格。我的困惑是,当我使用空验证用户是否选择或输入了任何信息时,代码会在下面生成错误。 我注意到我是否有以下代码
if(empty($gender)) {
        $errormessage[2] = \"Please select your gender\";
    } 
if(empty($_POST[\"gender\"])) {
        $errormessage[2] = \"Please select your gender\";
    }
if(empty($gender)) {
        $errormessage[2] = \"Please select your gender\";
    }
if(empty($_POST[\"gender\"])) {
        $errormessage[2] = \"Please select your gender\";
    }
我没有看到错误消息。我认为由于性别和媒体表单元素分别是单选按钮和复选框的代码行$ _POST而生成错误消息。但是,如果我想在顶部初始化所有变量,那么最好的方法是什么?
/* <?PHP

if(isset($_POST[\"submit\"])) {

    $fname = $_POST[\"fname\"];
    $lname = $_POST[\"lname\"];
    $gender = $_POST[\"gender\"];
    $age = $_POST[\"age\"];
    $address = $_POST[\"address\"];
    $media = $_POST[\'media\'];

    $errormessage =  array();

    if(empty($fname)) {
        $errormessage[0] = \"Please enter your first name\";
    }

    if(empty($lname)) {
        $errormessage[1] = \"Please enter your last name\";
    }

    if(empty($gender)) {
        $errormessage[2] = \"Please select your gender\";
    }

    if(empty($age)) {
        $errormessage[3] = \"Please select your age\";
    }

    if(empty($address)) {
        $errormessage[4] = \"Please enter your address\";
    }

    if(empty($media)) {
        $errormessage = \"Please select the type of media\";

    }

}
?>
<html>
<head>
    <title>Sample Registration</title>
</head>
<body>
    <h2>Sample registration</h4>
        <form name=\"registration\" method=\"post\" action=\"registration.PHP\">
            <div>
                First Name: <br />
                <input type=\"text\" name=\"fname\" value=\"\">
            </div>

            <div>
                Last Name: <br />
                <input type=\"text\" name=\"lname\" value=\"\">
            </div>

            <div>
                Gender: <br />
                male<input type=\"radio\" name=\"gender\" value=\"male\">
                female<input type=\"radio\" name=\"gender\" value=\"female\">
            </div>

            <div>
                Age: <br />
                <select name=\"age\">
                    <option value=\"\">Please select your age</option>
                    <option value=\"18-25\">18-25</option>
                    <option value=\"26-33\">26-33</option>
                </select>
            </div>

            <div>
                Address: <br />
                <textarea name=\"address\" cols=\"10\" rows=\"10\"></textarea>
            </div>

            <div>
                Sign-me up: <br />
                <input type=\"checkBox\" name=\"media[\'newsletter\']\" value=\"newsletter\"> newsletter
                <input type=\"checkBox\" name=\"media[\'specials\']\" value=\"specials\"> specials
                <input type=\"checkBox\" name=\"media[\'events\']\" value=\"events\"> events

            <div>
                <input type=\"submit\" name=\"submit\" value=\"submit\">
            </div>
        </form>
</body>
</html>

*/
/* 错误信息 */
! ) Notice: Undefined index: gender in C:\\Program Files\\EasyPHP-5.3.5.0\\www\\registration.PHP on line 7
Call Stack
#   Time    Memory  Function    Location
1   0.0004  341792  {main}( )   ..\\registration.PHP:0
Dump $_SERVER

$_SERVER[\'REMOTE_ADDR\'] =



string \'127.0.0.1\' (length=9)

$_SERVER[\'REQUEST_METHOD\'] =



string \'POST\' (length=4)

$_SERVER[\'REQUEST_URI\'] =



string \'/registration.PHP\' (length=17)

Variables in local scope (#1)

$address =

    Undefined

$age =

    Undefined

$errormessage =

    Undefined

$errormsg =

    Undefined

$fname =



string \'\' (length=0)

$gender =

    Undefined

$lname =



string \'\' (length=0)

$media =

    Undefined

( ! ) Notice: Undefined index: media in C:\\Program Files\\EasyPHP-5.3.5.0\\www\\registration.PHP on line 10
Call Stack
#   Time    Memory  Function    Location
1   0.0004  341792  {main}( )   ..\\registration.PHP:0
Variables in local scope (#1)

$address =



string \'\' (length=0)

$age =



string \'\' (length=0)

$errormessage =

    Undefined

$errormsg =

    Undefined

$fname =



string \'\' (length=0)

$gender =



null

$lname =



string \'\' (length=0)

$media =

    Undefined
    

解决方法

在访问它们之前,您需要检查HTTP POST请求中是否实际设置了those6ѭ和
$_POST[\'media\']
变量;初始化每个
$_POST
var的更好解决方案可能是这样的:
$fname = isset( $_POST[\'fname\'] ) ? $_POST[\'fname\'] : \'\';
上面的三元分配等效于对您感兴趣的每个
$_POST
变量运行以下逻辑表达式:
if( isset( $_POST[\'fname\'] ) ) {
    $fname = $_POST[\'fname\'];
} else {
    $fname = \'\';
}
如果您实现了这两种方法,那么在if13ѭ上运行
empty()
时,您不会收到通知;此外,如果未设置
$_POST[\'gender\']
,则
empty()
仍会按照您期望的方式运行。它有点冗长,但是要重写示例,您可以尝试:
if( isset( $_POST[\"submit\"] ) ) {

    $fname = isset( $_POST[\'fname\'] ) ? $_POST[\"fname\"] : \'\';
    $lname = isset( $_POST[\'lname\'] ) ? $_POST[\"lname\"] : \'\';
    $gender = isset( $_POST[\'gender\'] ) ? $_POST[\"gender\"] : \'\';
    $age = isset( $_POST[\'age\'] ) ? $_POST[\"age\"] : \'\';
    $address = isset( $_POST[\'address\'] ) ? $_POST[\"address\"] : \'\';
    $media = isset( $_POST[\'media\'] ) ? $_POST[\'media\'] : \'\';

    $errormessage =  array();
    if( empty( $fname ) )
        $errormessage[] = \"Please enter your first name\";
    if( empty( $lname ) )
        $errormessage[] = \"Please enter your last name\";
    if( empty( $gender ) )
        $errormessage[] = \"Please select your gender\";
    if( empty( $age ) )
        $errormessage[] = \"Please select your age\";
    if( empty( $address ) )
        $errormessage[] = \"Please enter your address\";
    if( empty( $media ) )
        $errormessage[] = \"Please select the type of media\";
}
当然,如果要在SQL上下文中使用数据,则需要清除数据,但这至少可以使您避免遇到的错误。 如果您有很多这样的变量-或经常重复执行此任务-您可以考虑将其汇总为一个函数!     ,尝试使用
!isset()
代替
empty()
。 附带说明一下,如果不存在
$_POST
值,则分配变量的方式将创建
warning
条通知。如果您想删除这些通知,请使用@Ryan的解决方案。