За последние 24 часа нас посетили 18205 программистов и 1590 роботов. Сейчас ищут 1106 программистов ...

Счетчик

Тема в разделе "PHP для новичков", создана пользователем smidl, 29 ноя 2007.

  1. smidl

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

    С нами с:
    3 мар 2007
    Сообщения:
    84
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3. $db_host='localhost';
    4. $db_user='root';
    5. $db_pass='';
    6. $db_name='counter';
    7. //Настройки соединения
    8. $connect=mysql_connect($db_host,$db_user,$db_pass);
    9. mysql_select_db($db_name,$connect) or die('плохой запрос : '.  mysql_error());
    10. //Ищем в базе текущий ип
    11. $ip_user = ip2long($_SERVER['REMOTE_ADDR']);
    12. $ac=mysql_query('SELECT * FROM `ip` WHERE `ip`='.$ip_user); //лучше не называть таблицы и столбцы одним именем
    13. //Если нет в базе такого айпи, то значение $acs['ip'] пусто
    14. if (!$acs['ip']){
    15. mysql_query('INSERT INTO `ip` VALUES('.$ip_user.')');
    16. mysql_query('UPDATE users SET all=all+1');
    17. }
    18. else {
    19.  print 'А вы у нас уже не впервой))) ';
    20. }
    21. ?>
    что-то не работает) но и ошибок вроде нету...
     
  2. smidl

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

    С нами с:
    3 мар 2007
    Сообщения:
    84
    Симпатии:
    0
    хех) даже хорошо что сразу не отвечают, вот какой нашел выход:
    PHP:
    1.  
    2. <?php
    3. $db_host='localhost';
    4. $db_user='root';
    5. $db_pass='';
    6. $db_name='counter';
    7. //Настройки соединения
    8. $connect=mysql_connect($db_host,$db_user,$db_pass);
    9. mysql_select_db($db_name,$connect) or die('плохой запрос : '.  mysql_error());
    10. //Ищем в базе текущий ип
    11. $ip_user = ip2long($_SERVER['REMOTE_ADDR']);
    12. $ac=mysql_query('SELECT * FROM `ip` WHERE `ip`='.$ip_user); //лучше не называть таблицы и столбцы одним именем
    13. //Если нет в базе такого айпи, то значение $acs['ip'] пусто
    14. if (!$acs['ip']){
    15. mysql_query('INSERT INTO `ip` VALUES('.$ip_user.')');
    16. }
    17. else {
    18.  print 'А вы у нас уже не впервой)))<br>';
    19. }
    20. $result = mysql_query("SELECT * FROM ip", $connect);
    21. $cal = mysql_num_rows($result);
    22. echo " Всего нас посетило $cal пользователей";
    23. ?>
    З.Ы. Слава мануалу)))
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    3 запроса в базу ради счетчика? Не годится.
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    никогда так не делай
     
  5. smidl

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

    С нами с:
    3 мар 2007
    Сообщения:
    84
    Симпатии:
    0
    Почему так не делать и как же все-таки оптимизировать скрипт?
     
  6. smidl

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

    С нами с:
    3 мар 2007
    Сообщения:
    84
    Симпатии:
    0
    Почему так не делать и как же все-таки оптимизировать скрипт?
     
  7. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    smidl чтобы узнать количество строк у БД есть своя функция count() исользовать которую намного лучше, чем получать все данные лишь для того чтобы через mysql_num_rows() получить кол-во строк
    сам подумай что лучше получить от БД 1 строку (или несколько если используются группировки) или целую таблицу по которой потом дополнительно пройтись для достижения результата?
     
  8. smidl

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

    С нами с:
    3 мар 2007
    Сообщения:
    84
    Симпатии:
    0
    Понял саму суть но не то как реализовать, теряюсь в догадках) покажешь?мануал читал, но видно не все понял...Покажи на моему примере :oops:
     
  9. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    запрос для строки 21 твоего кода:
    select count(*) as cnt from ip;
    смотри какие данные возвращает и используй их далее.
     
  10. smidl

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

    С нами с:
    3 мар 2007
    Сообщения:
    84
    Симпатии:
    0
    PHP:
    1. <?php
    2. $db_host='localhost';
    3. $db_user='root';
    4. $db_pass='';
    5. $db_name='counter';
    6. //Настройки соединения
    7. $connect=mysql_connect($db_host,$db_user,$db_pass);
    8. mysql_select_db($db_name,$connect) or die('плохой запрос : '.  mysql_error());
    9. //Ищем в базе текущий ип
    10. $ip_user = ip2long($_SERVER['REMOTE_ADDR']);
    11. $ac=mysql_query('SELECT * FROM `ip` WHERE `ip`='.$ip_user); //лучше не называть таблицы и столбцы одним именем
    12. //Если нет в базе такого айпи, то значение $acs['ip'] пусто
    13. if (!$acs['ip']){
    14. mysql_query('INSERT INTO `ip` VALUES('.$ip_user.')');
    15. }
    16. else {
    17.  print 'А вы у нас уже не впервой)))<br>';
    18. }
    19. $result = mysql_query("SELECT * FROM ip", $connect);
    20. $cal =select count(*) as cnt from ip;
    21. echo " Всего нас посетило $cal пользователей";
    22. ?>
    ошибка:
    Код (Text):
    1.  
    2. Parse error: parse error, unexpected T_STRING in z:\home\192.168.27.116\www\1.php on line 21
     
  11. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ого! (я не про ошибку исполнения)
    вы понимаете что такое запрос? для чего он нужен и как он выполняется?
    Код (Text):
    1. $result = mysql_query("select count(*) as cnt from ip;", $connect);
    2. $row = mysql_fetch_array($result);
    3. $cal =$row['cnt'];
    4. echo " Всего нас посетило $cal пользователей";
     
  12. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    вот поэтому в частности и надо заставлять писать не mysql_query("
    а $sql='';
    mysql_query($sql);
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Не подскажите, где про CNT можно прочитать? По мануалу быстро пробежался - не нашел.
     
  14. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0