我是非常新的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> ";
?>
答案 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']);
}
如您所见,代码现在更容易阅读。