Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему происходит досрочное прекращение работы цикла?
 
 автор: dima2207   (21.02.2007 в 01:03)   письмо автору
 
 

подскажите почему цыкл идет не до конца файла , а проверяет только первый эллемент ???
$new=$_POST['mail'];
$file = fopen("mail.dat","r");
if(!file)
{
echo("ошибка открытия файла ");
}
$file = file ('mail.dat');
$name = $new;
for ($i=0; $i<count($file); $i++)
{
if (trim($file[$i]) == $name)
{
print "Простите,но на этот почтовый ящик уже зарегистрован пользователь ";
break;
}
else
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=go.php?z=$_POST[mail]&z1=$_POST[name1]&z2=$_POST[password]'>
</HEAD></HTML>";
}
}
}
}
Ну короче , он проверяет только первую позицию масива файла mail.dat , а дальше выполняется условие else !!!
почему ???

   
 
 автор: cheops   (21.02.2007 в 01:13)   письмо автору
 
   для: dima2207   (21.02.2007 в 01:03)
 

Потому если условие trim($file[$i]) == $name не выполняется срабатывает else-блок с переадресацией. PHP является интерпретатором, поэтому он сразу выполняет оператор echo не дожидаясь, когда выполниться цикл, а бразуер перебрасывает пользователя на другую страницу.

   
 
 автор: dima2207   (21.02.2007 в 01:17)   письмо автору
 
   для: cheops   (21.02.2007 в 01:13)
 

а как-же мне закончить цыкл до конца ? и если нет совпадений то выполнять блок else !!!!

   
 
 автор: cheops   (21.02.2007 в 01:35)   письмо автору
 
   для: dima2207   (21.02.2007 в 01:17)
 

Вынесите содержимое блока else за пределы цикла.

   
 
 автор: dima2207   (21.02.2007 в 01:37)   письмо автору
 
   для: dima2207   (21.02.2007 в 01:17)
 

А если я буду записывать в файл флаг выполнения цыкла , а потом на другой странице проверять значение флага , короче как интерпретатор отреагирует на функцию записи ?

   
 
 автор: dima2207   (21.02.2007 в 01:42)   письмо автору
 
   для: dima2207   (21.02.2007 в 01:37)
 

вы имеете ввиду это :
$new=$_POST['mail'];
$file = fopen("mail.dat","r");
if(!file)
{
echo("ошибка открытия файла ");
}
$file = file ('mail.dat');
$name = $new;
for ($i=0; $i<count($file); $i++)
{
if (trim($file[$i]) == $name)
{
print "Простите,но на этот почтовый ящик уже зарегистрован пользователь ";
break;
}
}
}
}
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=go.php?z=$_POST[mail]&z1=$_POST[name1]&z2=$_POST[password]'>
</HEAD></HTML>";
Да , но тогда у меня полюбому будет редирект , а мне надо что-бы в случае если весь массив проверен и там нет совпадений !!!

   
 
 автор: cheops   (21.02.2007 в 01:47)   письмо автору
 
   для: dima2207   (21.02.2007 в 01:42)
 

Используйте следующий код
<?php
  $new
=$_POST['mail'];
  
$file fopen("mail.dat","r");
  if(!
file)
  {
    echo(
"ошибка открытия файла ");
  }
  
$file file ('mail.dat');
  
$name $new;
  
$flag true;
  for (
$i=0$i<count($file); $i++)
  {
    if (
trim($file[$i]) == $name)
    {
      print 
"Простите,но на этот почтовый ящик уже зарегистрован пользователь ";
      
$flag false;
      break;
    }
  }

  if(
$flag)
  {
    echo 
"<HTML><HEAD>
          <META HTTP-EQUIV='Refresh' CONTENT='0; URL=go.php?z=
$_POST[mail]&z1=$_POST[name1]&z2=$_POST[password]'>
          </HEAD></HTML>"
;
  }
?>

   
 
 автор: dima2207   (21.02.2007 в 02:02)   письмо автору
 
   для: cheops   (21.02.2007 в 01:47)
 

Ну класс , спасибо !!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования