Чтение данных из CSV в PHP, а затем пересылка на веб-страницу - PullRequest
1 голос
/ 14 июня 2011

Я должен перенаправить моего пользователя на веб-страницу, основываясь на его имени и дате. Если его имя не совпадает или срок его действия истек, мне нужно отправить его на другую страницу. Если он выполнит эти два условия, мне нужно перенаправить его на веб-страницу, например. 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

Моя проблема в том, что заголовок не перенаправляет на веб-страницу. Любая помощь будет принята с благодарностью.

Ответы [ 6 ]

4 голосов
/ 14 июня 2011

Во-первых, включены ли ваши предупреждения? Это не должно молчать.

Во-вторых, вы, вероятно, имеете в виду date("m.d.Y");, а не date();.

2 голосов
/ 14 июня 2011

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");
1 голос
/ 14 июня 2011

Вы вызываете date() без каких-либо параметров, что означает, что $date имеет значение false и будет соответствовать только значениям $now, которые также могут считаться ложными.

Возвращает отформатированную строку даты. Если нечисловое значение используется для метка времени, FALSE возвращается и Ошибка уровня E_WARNING.

Источник

1 голос
/ 14 июня 2011

Вы должны указать местоположение заголовка перед отправкой любого другого контента пользователю; в противном случае заголовок не перенаправляется.

1 голос
/ 14 июня 2011

У вас есть несколько пользователей, перечисленных в этом 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";
1 голос
/ 14 июня 2011

Грязный способ сделать это - использовать Meta refresh для перенаправления на нужный сайт (но не бейте меня: D).

Также:

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

Вам не нужно использовать два оператора if.Свяжите два условия с помощью логического AND.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...