如何改进这个嵌套的PHP if / else结构?

时间:2011-02-14 14:08:37

标签: php

我写了一些代码,它甚至可能没有运行,还没有尝试过。但是如果需要的话,我已经用if else编写了所有内容。我想不出更好的写作方式。对你来说有更好的方法吗?

如果提交了带有“email_notification”字段的表单,代码将进入脚本的头部并拦截页面的构建。如果是这样,它确实是这样,检查他们是否已输入电子邮件地址,以及他们订阅的项目是否存在,然后添加它们,并为每个else语句提供错误状态消息。最终,它会重定向到另一个页面,其结果是发生了什么,并终止了脚本其余部分的执行。

感谢。

if (isset($_POST['email_notification'])) {
if (!empty($_POST['software_id'])) {
    if (!empty($_POST['email_address'])) {
        if ($result = mysql_query("SELECT shortname, fullname FROM soft_data WHERE shortname = '{$_POST['software_id']}'")) {
            $fullname = mysql_fetch_array($result);
            if (false !== mysql_query("INSERT INTO email_subs(soft_name, email_address) VALUES('{$_POST['software_id']}', '{$_POST['email_address']}')")) {
                $status = "Your email address will be notified when " . $fullname['fullname'];
            }
        } else {
            $status = "Software ID not found.";
        }
    } else {
        $status = "No email address entered.";
    }
} else {
    $status = "No software ID entered.";
}
header("Location: http://example.com/subscription/?status=$status");
die();
}

3 个答案:

答案 0 :(得分:1)

例如:

$errors = array();
if (empty($_POST['software_id'])) $errors[] = 'No software ID entered.';
if (empty($_POST['email_address'])) $errors[] = 'No email address entered.';
...
if (count($errors)) {
  // display errors
} else {
  // process
}

答案 1 :(得分:0)

我要么在一个方法中嵌入该批次并返回状态(字符串)或true(如果成功),或者构建一个帮助方法来输出状态并结束脚本,如下所示:

<?php
function reportStatus($status) {
    header("Location: http://example.com/subscription/?status=$status");
    exit();
}

if (!isset($_POST['email_notification']))
    reportStatus("No email address entered.");
if (empty($_POST['software_id']))
    reportStatus("No software ID entered.";
if (empty($_POST['email_address']))
    reportStatus("No email address entered.");
if (false === $result = mysql_query("SELECT shortname, fullname FROM soft_data WHERE shortname = '{$_POST['software_id']}'"))
    reportStatus("Software ID not found.");
$fullname = mysql_fetch_array($result);
if (false !== mysql_query("INSERT INTO email_subs(soft_name, email_address) VALUES('{$_POST['software_id']}', '{$_POST['email_address']}')"))
    reportStatus("Your email address will be notified when " . $fullname['fullname']);
    //Is above actual an error??
/* Rest of script processing goes here*/
?>

答案 2 :(得分:0)

您还可以执行类似的操作以进行快速变量状态检查:

function reportStatus($status) {
    header("Location: http://example.com/subscription/?status=$status");
    exit();
}

$ar = array(
    'email_notification' => null,
    'software_id'        => 'No software ID entered.',
    'email_address'      => 'No email address entered.'
);

$df = array_diff($ar, $_POST);

if (!empty($df)) {
    $status = current($df);
    if (!empty($status)) {
        report_status($status);
    }
}

而不是继续你的代码...

相关问题