在PHP中从CSV读取数据,然后转发到网页

时间:2011-06-14 18:07:42

标签: php csv header

我要根据用户名和日期将用户重定向到网页。如果他的名字不匹配或他的身份证已过期,我需要将他送到另一页。如果他通过这两个条件,我需要将他重定向到一个网页,例如。 www.google.com

$name_value=$_GET['query'];
$fh = fopen('db.csv', 'r');
$now = date(); 
$data=fgetcsv($fh); 
$name=$data[0];
$date=$data[1];
$url=$data[2];
if($name_value == $name)
{
  if($date==$now)
  {
   header("Location:".$data[2]);
  }
}
else
  {
   echo("not successful");
  }
exit;

这是CSV文件内容

 merch,26.06.2011,http://www.google.com

我的问题是Header没有重定向到网页。任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:4)

首先,你的警告是否开启?这不应该是默默失败。

其次,您可能是date("m.d.Y");而不是date();

答案 1 :(得分:2)

date(),没有任何参数,在我的服务器上产生这个:

Warning: date() expects at least 1 parameter, 0 given in test.php on line 1

我建议您将错误报告用于测试目的:

error_reporting(E_ALL|E_STRICT);
ini_set("display_errors", "On");

要匹配CSV文件中的格式,您需要:

$now = date("d.m.Y");

答案 2 :(得分:1)

这样做的一种肮脏方式是使用Meta refresh重定向到所需的网站(但不要打败我:D)。

此外:

if($name_value == $name && $date==$now)

您不需要使用两个if语句。使用逻辑AND绑定这两个条件。

答案 3 :(得分:1)

此csv文件中是否列出了多个用户? fgetcsv()一次只读取一行,因此对于多个用户,您必须使用循环首先找到用户所在的行,然后检查到期日期。


对于多个用户,您需要执行此操作:

$fh = fopen('db.csv', 'rb');
while(list($name, $date, $url) = fgetcsv($fh)) {
   if (($name === $name_value) && ($date === $now)) 
       header("Location: $url");
       exit();
   }
}
echo "not successful";

答案 4 :(得分:1)

在向用户发送任何其他内容之前,您必须指定标题位置;否则,标题不会重定向。

答案 5 :(得分:1)

您在没有任何参数的情况下致电date(),这意味着$date设置为false,且只会匹配$now也可能被视为错误的值。

  

返回格式化的日期字符串。如果一个   非数字值用于   时间戳,返回FALSE和   发出E_WARNING级别错误。

Source