За последние 24 часа нас посетил 18261 программист и 1599 роботов. Сейчас ищут 846 программистов ...

Непонятная ситуация с rand

Тема в разделе "PHP и базы данных", создана пользователем kit, 19 июн 2015.

  1. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Ночь... Все спят... Я то же хочу!
    Но никак не смогу уснуть пока не разберусь.
    Есть простейший код:
    Код (PHP):
    1.             $ii=rand(1,8);
    2.             $query="UPDATE site SET num=".$ii.", date_time=".time(); echo $query;
    3.             $site_=mysql_query($query);
    4.             if (!$site_) exit ("Failed to write to the database! ".mysql_error());
    5.  
    Не могу понять почему на сайте пишет:
    UPDATE site SET num=7, date_time=1434668184
    а в базу записывает num значение 3 и date_time значение 1434668185.
    С чего вдруг????
    PS Причем если жестко вместо $ii=rand(1,8) прописываю $ii=5, то в базу записывается именно num=5

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Может значения sql взять в кавычки `num` = '5'
     
  3. Aleksandrbugrov

    Aleksandrbugrov Новичок

    С нами с:
    5 июн 2015
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    г. Урень
    Ты присваиваешь переменной случайное значение в диапазоне от 1 до 8, поэтому СЛУЧАЙНОЕ значение и записывается в базу.
    date_time - время в формате unix time stamp. Так-что все верно.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    rand на то и rand чтобы при повторном запуске выдать [ возможно ] другое значение. если ты видишь не то, что ожидал, вероятно запрос выполнился еще раз ))) почему бы тебе не поставить INSERT вместо UPDATE чтобы протоколировать каждый запрос?

    кстати, UPDATE без WHERE это всегда подозрительно. меняются все записи за раз, сколько бы их ни было.

    Добавлено спустя 1 минуту 15 секунд:
    Зарегистрирован: Пн дек 18, 2006 13:44

    небыстро идет процесс!
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Это он на собственном опыте узнает, когда в тестовой таблице будет более 1 строки, я гарантирую это :)
     
  6. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Н у что ж, страшная мышка Fell-x27, ты был прав. Действительно при изменении на
    Код (PHP):
    1. $query="INSERT INTO site (num, date_time) VALUES  ('".$ii."', '".time()."')";
    вносится 2 строки....
    Какого .... их там две?
    я не тороплюсь
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    это ты нам расскажешь, почем нам знать! ;) есть бесконечное число способов накосячить.
     
  8. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Откуда "бесконечное число способов" если я весь код написал, больше ничего нет (кроме подключения к БД)
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Знаю хороший способ выстрелить себе в ногу:
    - в htaccess прописать обработку всех отсутствующих файлов в index.php
    - не создать на сайте favicon.ico
    - удивляться откуда лишние запросы
    есть и другие способы.

    Хорошее правило: GET-запросы не должны изменять данные. Понятно, что этот пример это так, баловство, но всё-таки запомни это.
     
  10. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    ни UPDATE с WHERE, ни кавычки - ничего не помогает!
     
  11. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    уфффф.... разобрался!
    artoodetoo добавь в свою коллекцию еще один способ выстрелить себе в ногу:
    - установить в гугл хром расширения для проверки валидации сайтов.
    удаление оных лечит "заикание" браузера.