php if else - 多个变量不起作用

时间:2013-04-03 14:20:30

标签: php if-statement

我是非常新的php,并且想知道是否有人想要权衡这一点。我快到了,但3天后我几乎放弃了:(。我有一张桌子,我有电子邮件地址,姓名和电话号码。如果这个人没有电子邮件地址,我会比如使用电子邮件链接打印出姓名和地址的代码。听起来很简单,直到我尝试这样做:)

这是我几乎正在使用的代码:(我已经建立了连接 - 只要我试图消除删除电子邮件链接部分,我工作正常。)提前感谢您的时间。

    <?php
    $data = mysql_query("SELECT first,last,email,phone FROM church_staff WHERE   
    display='yes' AND pull_justice='yes' ORDER BY last ASC")
    or die(mysql_error());  
    while($info = mysql_fetch_array( $data ))
    Print " <tr><td class=\"low\"> ";
    // Evaluates to true because $email is empty
    if (empty($email)) {
    Print " ".$info['first']." ".$info['last']."  ";
    }
    // Evaluates as true because $email is set
    if (isset($email)) {
    }
    Print " <img src=\"images/email.gif\" alt=\"email\">
    <a  href=\"mailto:".$info['email']." >".$info['first']." ".$info['last']."</a> ";
    Print " </td><td class=\"low\">".$info['phone']."</td></tr> ";
    ?>

5 个答案:

答案 0 :(得分:1)

您应该使用$info['email']代替$email,因为此变量$email永远不会设置。

您忘记在while条件后添加括号:

    while ($info = mysql_fetch_array ($data))
{
 // process on $info
}

所以在您的代码中,您打印" <tr><td class=\"low\"> "; n次(n查询返回的行数)

答案 1 :(得分:1)

首先,未设置$ email。这是$ info ['email']。您将始终拥有$ info ['email'],但该值可能为null或“”。因此,您需要做的就是检查是否($ info ['email'] ==“”)查看是否未设置。从技术上讲,我会检查是否(trim($ info ['email'])==“”)因为我不信任数据录入人员。他们可能会在那里留空格或标签。

现在,你想要一个if else:

if(trim($info['email')=="")
{
    //do what you want when there is no email
}
else
{
    //do what you want there this an email
}

答案 2 :(得分:0)

**查看代码纠正错误**

<?php
$data = mysql_query("SELECT first,last,email,phone FROM church_staff WHERE   
display='yes' AND pull_justice='yes' ORDER BY last ASC")
or die(mysql_error());  
while($info = mysql_fetch_array( $data ))
{
    // Confirm if $data is having 1d array of required index and value
    Print " <tr><td class=\"low\"> ";
    // Evaluates to true because $email is empty
    if (empty($data['email'])) {
        Print " ".$info['first']." ".$info['last']."  ";
    }
    else
    {
        Print " <img src=\"images/email.gif\" alt=\"email\">
        <a  href=\"mailto:".$info['email']." >".$info['first']." ".$info['last']."</a> ";
        Print " </td><td class=\"low\">".$info['phone']."</td></tr> ";
    }
}
?>

更好地学习delve中的php语法...即isset()是空的子集。

答案 3 :(得分:0)

我不确定你要做什么,看起来我错过了什么。但首先你的代码会更好:

<?php
$data = mysql_query("SELECT first,last,email,phone FROM church_staff WHERE   
display='yes' AND pull_justice='yes' ORDER BY last ASC")
or die(mysql_error());  
while($info = mysql_fetch_array( $data ))
{
    Print " <tr><td class=\"low\"> ";
    // Evaluates to true because $email is empty
    // Evaluates as true because $email is set
    if (isset($email)) {        
        if (empty($email)) {
            Print " ".$info['first']." ".$info['last']."  ";
        }
    }
    Print " <img src=\"images/email.gif\" alt=\"email\">
    <a  href=\"mailto:".$info['email']." >".$info['first']." ".$info['last']."</a> ";
    Print " </td><td class=\"low\">".$info['phone']."</td></tr> ";
}
?>

实际上,如果没有定义范围,While循环将在声明后使用第一行。另外,在检查是否有空之前,最好先检查是否有东西。

希望我回答你的问题。

答案 4 :(得分:0)

while 循环只包含一个 print 语句;其他一切都在它之外,因为你忘记了花括号。接下来,第二个 if 的正文的结束大括号来得太早了。在纠正之后,你的循环看起来像:

while ($info = mysql_fetch_array($data)) {
    print " <tr><td class=\"low\"> ";
    if (empty($email)) {
        print " ".$info['first']." ".$info['last']."  ";
    }
    if (isset($email)) {
        print " <img src=\"images/email.gif\" alt=\"email\"><a  href=\"mailto:".$info['email']." >".$info['first']." ".$info['last']."</a> ";
    }
    print " </td><td class=\"low\">".$info['phone']."</td></tr> ";
}

如果您将* error_reporting *转换为 E_ALL ,就像您应该一样,在开发时,您会看到 $ email 未定义。显然,它应该是 $ info ['email'] 而不是:

while ($info = mysql_fetch_array($data)) {
    print " <tr><td class=\"low\"> ";
    if (empty($info['email'])) {
        print " ".$info['first']." ".$info['last']."  ";
    }
    if (isset($info['email'])) {
        print " <img src=\"images/email.gif\" alt=\"email\"><a  href=\"mailto:".$info['email']." >".$info['first']." ".$info['last']."</a> ";
    }
    print " </td><td class=\"low\">".$info['phone']."</td></tr> ";
}

现在,PHP中的变量既可以设置也可以为空,因此名称可能会打印两次。要避免这种情况,请将第二个 if 转换为 else 分支。

while ($info = mysql_fetch_array($data)) {
    print " <tr><td class=\"low\"> ";
    if (empty($info['email'])) {
        print " ".$info['first']." ".$info['last']."  ";
    } else {
        print " <img src=\"images/email.gif\" alt=\"email\"><a  href=\"mailto:".$info['email']." >".$info['first']." ".$info['last']."</a> ";
    }
    print " </td><td class=\"low\">".$info['phone']."</td></tr> ";
}

为了保持清晰,您应该始终尽量避免混合代码和布局。下一步是提取HTML模板并使用CSS将图像添加到 a.mail

$template_container = '<tr><td class="low">%s</td><td class="low">%s</td></tr>';
$template_mail      = '<a href="mailto:%s">%s</a>';

while ($info = mysql_fetch_array($data)) {
    $name = $info['first']." ".$info['last'];
    if (!empty($info['email'])) {
        $name = sprintf($template_mail, $info['email'], $name);
    }
    printf($template_container, $name, $info['phone']);
}

如您所见,代码现在更容易阅读。