您的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']);
}
如您所见,代码现在更易于阅读。