0

我对 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> ";
    ?>
4

5 回答 5

1

您应该使用$info['email']而不是$email,因为这个变量$email永远不会被设置。

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

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

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

于 2013-04-03T14:28:52.540 回答
1

首先,$email 没有设置。它是 $info['email']。您将始终拥有 $info['email'],但该值可能为 null 或 ""。因此,您需要做的就是检查 if($info['email'] == "") 以查看它是否未设置。从技术上讲,我会检查 if(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
}
于 2013-04-03T14:29:16.673 回答
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() 是空的子集。

于 2013-04-03T14:34:48.473 回答
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 循环将使用声明后的第一行。另外,您最好先检查是否设置了某些内容,然后再检查它是否为空。

希望我回答了你的问题。

于 2013-04-03T14:35:08.193 回答
0

您的while循环仅包含一个打印语句;其他一切都在它之外,因为你忘记了花括号。接下来,第二个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']);
}

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

于 2013-04-03T14:51:05.910 回答