пробема с инсертом в бд через пхп, допотопный bchat

Discussion in 'PHP' started by Dj Skeleton™, 22 Dec 2009.

  1. Dj Skeleton™

    Joined:
    1 Jun 2002
    Messages:
    225
    Likes Received:
    11
    Reputations:
    1
    есть скрипт добавления вопросов в викторину чата(стандартный распространенный "bchat"):

    Code:
    <?
    $file=file("quest.txt");
    for($i=0;$i<count($file);$i++) {
    $ex=explode("::",$file[$i]);
    $vop=trim($ex[0]);
    $ans=trim($ex[1]);
    $tran=strtr(trim($ans),array("а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"i","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ш"=>"w","щ"=>"w","ц"=>"c","ч"=>"4","ь"=>".","ъ"=>".","ы"=>"y","э"=>"e","ю"=>"yu","я"=>"ya","А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D","Е"=>"E","Ё"=>"E","Ж"=>"J","З"=>"Z","И"=>"I","Й"=>"I","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"H","Ш"=>"W","Щ"=>"W","Ц"=>"C","Ч"=>"4","Ь"=>".","Ъ"=>".","Ы"=>"Y","Э"=>"E","Ю"=>"Yu","Я"=>"Ya"));
    $r=mysql_query("Select * from `vopros`");
    $k = mysql_num_rows($r);
    $k=$k+1;
    $sql="INSERT INTO `vopros` (`klu4`,`number`,`time`,`question`,`answer`,`tran`) VALUES('$k','$k','','$vop','$ans','$tran');";
    $r=mysql_query ($sql);
    }
    echo $k."<br/>";
    print count($file);
    ?>
    </p>
    суть проблемы такова:
    в файле quest.txt 1482 строки. скрипт выполняется секунд 10, потом почему-то выходит из цикла. значения счетчика $k и count($file) на момент прекращения работы скрипта составляют 128/1482.

    вот 127, 128 и 129 строка файла quest.txt
    Code:
    Плоскостной или тонкий лепной орнамент со сложным - обычно симметричным - рисунком, стилизующим растительные побеги (иногда в сочетании с геометрическими фигурами, надписями, изображениями людей и животных).::арабески
    Разрешение спорных вопросов не судебного характера с помощью арбитра.::арбитраж
    Орган, создаваемый для разрешения имущественных споров между различными предприятиями, учреждениями, организациями.::арбитраж
    в чем может быть проблема? почему цикл прерывается и завершается на 128 строке, хотя по условию был должен дойти до count($file), т.е. 1482.
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Потому что вот так надо:

    $count = count($file);
    for($i=0;$i<$count;$i++) {
    .....

    просто не успевает считать, ты заставляешь его пересчитывать массив какждую итерацию, проблема становится очевидной только при большом объеме данных прогоняемых в цикле
     
    1 person likes this.
  3. Dj Skeleton™

    Joined:
    1 Jun 2002
    Messages:
    225
    Likes Received:
    11
    Reputations:
    1
    так а почему тогда он из цикла то выходит? допустим, не успевает считать, но почему останавливается именно на 128?
    сделал, как ты написал, проблема осталась та же.

    задачу решил по-другому, просто полю ключ дал avto_increment и значение $k скрипт не считал. только вот в чем была проблема, я так и не разобрался :-/