За последние 24 часа нас посетили 22829 программистов и 1718 роботов. Сейчас ищет 1481 программист ...

PHP-MySQL ошибка записи данных в таблицу

Тема в разделе "PHP и базы данных", создана пользователем gis, 28 ноя 2007.

  1. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Вот такой нехитрый код:


    PHP:
    1. <?php
    2. define( "DATABASE_SERVER", "" );
    3. define( "DATABASE_USERNAME", "" );
    4. define( "DATABASE_PASSWORD", "" );
    5. define( "DATABASE_NAME", "" );
    6.  
    7.  
    8. $mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
    9.  
    10. mysql_select_db( DATABASE_NAME );
    11. $dir = '/files';
    12. dirlist($dir);
    13. function dirlist($dir) {
    14. foreach(scandir($dir) as $entry)
    15. if($entry != '.' && $entry != '..')
    16. {
    17. mysql_query("INSERT INTO tbl_categories (`category_id`, `subcatENG_label`) VALUES ('', '$entry')");
    18.  
    19. }
    20.  
    21. }
    22.  
    23. ?>

    В результате в базу данных заноситься имена директорий и поддиректорий. По какой-то непонятной мне причине в базе данных создается двойной список - например, если есть две директории А и Б, то в базе данных создаетсья 4 строчки - А Б А Б.

    если сделать
    PHP:
    1. echo"INSERT INTO tbl_categories (`category_id`, `subcatENG_label`) VALUES ('', '$entry')<br>";
    в таких случаях, в случаях непосредственного вывода результатов на страничку, все нормально - т.е. записи создаються как и полагаеться в единственном числе (на страничке в единственном, в базе данных - все так же в двойном, или тройном, варианте). Т.е. я так понимаю, что должно быть что-то с самой базой данных. НО даже не придумаю, что именно.

    Кто может объяснить в чем проблема? С другиим вариантами php-кода, который тоже создавал список директорий, в базе данных оказывался тройной список..

    Спасибо за помощь.
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    скрипт рабочий. твой наверное тоже. значит дело в базе. попробуй чистить таблицу перед записью?
    в базу заносится каждый раз как ты скрипт дергаешь.

    http://440hz.ru/trash/dirlist/

    PHP:
    1.  
    2. <?
    3.  
    4. function dirlist($dir) {
    5.     foreach(scandir($dir) as $entry) {
    6.         if($entry != '.' && $entry != '..') {
    7.  
    8.             print('<br />'.$entry);
    9.  
    10.  
    11.         }
    12.     }
    13. }
    14.  
    15. $dir = './';
    16.  
    17. dirlist($dir);
    18.  
    19. ?>
    20.  
     
  3. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    В этом-то и дело - я как раз очищаю базу данных перед каждым тестированием этого кода. Фишка в том, что в пустую таблицу только за одно выполнение скрипта вносяться двойные значения. Я уже даже полностью базу данных удалял и создавал новую, и все равно тоже самое. Я тоже думаю, что это дело именно в базе данных, но где искать причину, хоть приблизительно.
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ты привел реальный пример?
     
  5. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    да, именно его я тестирую.
    т.е. тот код, только естественно со вставленными именами базы данных, таблиц и прочее, тестирую на своем хостинге. И вот такое получаеться. Кстати, рыская интернетом, я на каком-то форуме нашел такую же ошыбку, только там так ответ никто и не дал.
     
  6. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    А возможно, что дело все таки и в пхп - у меня на этом же mysql сервере и другие базы данных (блог и все такое), но там записи н едублируються.
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    вынеси scandir($dir) из цикла

    $tmp = scandir($dir)
    foreach($tmp as $entry)

    но это тупизм. если при выводе echo выдает правильно, то и записывать должна правильно. чаще всего ошибки в {} скобках и нарушении логики. причина - неформатированный код.
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    приведи РЕАЛЬНЫЙ код? просто сделай Copy+Paste
     
  9. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    1)Вынес - не помогло;
    2)Код, который я привожу в самом начале - абсолютно реальный, именно его я исспользую - буковка в буковку (все, что я убрал из него, это конкретные названия базы данных, пароля, сервера);
    3)Попробовал создать таблицу через пхп (новую) (обычно я их создавал в phpmyadmin) и уже туда вставлять значения - все тоже, дублируются
     
  10. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Да уж, я как бы причину нашел, но вот как ее решить. Оказалось, что когда страничку запускать в опере - значения дублируются, в IE - все нормально. Только вот по какой причине это происходит.
     
  11. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    В Firefox тоже все нормально.
     
  12. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    gis
    Копай HTML. Где-то там ты дважды дергаешь сервер.
     
  13. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ссылку дай? или ты все локально делаешь?
     
  14. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    html там нет, тот код, который приведен в самом начале - это единственный код на странице. Как я уже написал, оказалось, что такое происходит только в Opera, при этом в IE and Firefox все работает нормально.
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    логи покажи что и как дергается?
     
  16. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    С удовольствием, если ты скажешь, где их найти. И чего именно логи. Уж прости, если вопрос глупый, но я не знаю.
     
  17. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Страничка
    http://mumidol.com/index.php

    Текст скрипта
    http://mumidol.com/index.txt
     
  18. gis

    gis Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Если все нормально, должно возвращать 59 директорий
     
  19. antonio2000

    antonio2000 Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    11
    Симпатии:
    0
    Те же яйца. Как показало вскрытие все дело в браузере.И в сессиях.У меня при include файла который содержит seesion_start()