【发布时间】:2011-08-01 04:59:17
【问题描述】:
我正在尝试构建的是来自 php mysql 中的数据库查询的数组。使用 strpos 循环遍历该数组以查找某个字符串。
当注册页面加载时,我包含一个文件,这个文件源如下:
mysql_select_db($database_connBlog, $connBlog);
$query_rsBannedDomains = "SELECT * FROM banned_emailproviders";
$rsBannedDomains = mysql_query($query_rsBannedDomains, $connBlog) or die(mysql_error());
$row_rsBannedDomains = mysql_fetch_assoc($rsBannedDomains);
$totalRows_rsBannedDomains = mysql_num_rows($rsBannedDomains);
$bannedArray = array();
do {
array_push($bannedArray, $row_rsBannedDomains['domain_emailprovider']);
}
while ($row_rsBannedDomains = mysql_fetch_assoc($rsBannedDomains));
//print_r($bannedArray);
$emailaddress = $_POST['email_usr'];
foreach($bannedArray as $key => $domain){
if(strpos($emailaddress, $domain) == false){
echo (strpos($emailaddress, $domain));
} else {
header ("Location: http://www.disney.com");
}
}
注册页面提交时,提交给自己。上面源代码的包含,是注册 php 文件中的第二行。第一行是数据库连接的包含。
奇怪的是,有时当我单击返回并重新提交表单时,它会起作用。
【问题讨论】:
-
do...while 不是循环数据库结果的好方法,因为它总是会至少运行一次循环,并且查询可能会返回 0 行。改用while。
-
太添加到 GordonM 的评论中,您应该删除顶部的
$row_rsBannedDomains = mysql_fetch_assoc($rsBannedDomains);第一行。此外,array_push()在这里并不是必需的。看起来您可以在while循环中执行$bannedArray[] = $row_rsBannedDomains['domain_emailprovider'];。