singlepost

Разработка счетчика посещений на языках "PHP + MYSQL" << На главную или назад  

Здравствуйте!!!
Возникла проблема при написании программы на языке "PHP" с использование БД "MYSQL" – счетчик посещений сайта.
Вот код:

<?php
if ($rc=mysql_connect ("localhost", "root", ""))
{
$day=date ("Y-m-d");
mysql_select_db ("B19147");
$tabl="Schetchik";
$mar=mysql_query
("
SELECT *
FROM $tabl
");
$k=mysql_fetch_array ($mar);
$k[Vsego]=$k[Vsego]+1;
if ($day!==$k[Chislo])
{
$k[Chislo]=$day;
$k[Segodna]=1;
}
else
{
$k[Segodna]=$k[Segodna]+1;
}
mysql_query
("
UPD?1?T?1? Schetchik
SET Vsego='$k[Vsego]', Segodna='$k[Segodna]', Chislo='$k[Chislo]'
");
echo
"<table border=2 bordercolor=orange>
<tr>
<td colspan=2 align=center> Посещаемость </td>
</tr>
<tr>
<td align=center> Всего </td>
<td align=center> Сегодня </td>
</tr>
<tr>
<td align=center> $k[Vsego] </td>
<td align=center> $k[Segodna] </td>
</tr>
</table>";
}
else
{
echo "Error!";
}
?>

Проблема в том, что при запуске программы выводятся постоянно одни и те же данные, т.е. всего – 1, сегодня – 1. Ошибок совершенно никаких не вылазит.
Я так понимаю, что подключение к БД происходит, а вот различных манипуляций с этой БД нет (чтение и запись).
Название БД: "B19147". БД содержит всего 1 таблицу: "Schetchik". В этой таблице 3 поля: "Vsego" (тип INT), "Segodna" (тип INT), "Chislo" (тип DATE).
Скажите, пожалуйста, возможные проблемы и пути их устранения…

18 ответов в теме “Разработка счетчика посещений на языках "PHP + MYSQL"”

  1. 17
    Анатолий Дмитриев ответил:

    Спасибо всем!!!
    Проблема решена.

  2. 16
    Анатолий Дмитриев ответил:

    #15.
    Вы нормально излагаете, я все понял. Кстати, я еще включил в скрипт повышенный контроль за ошибками, и выявил некоторые ошибки (несколько ошибок исправил). Вот сам код:

    <?php
    ini_set ('display_errors', 1);
    error_reporting (E_ALL);
    $rc=mysql_connect ("localhost", "root", "root");
    if ($rc==mysql_connect ("localhost", "root", "root"))
    {
    $day=date ("Y-m-d");
    mysql_select_db ("B19147");
    $tabl="Schetchik";
    $mar=mysql_query
    ("
    SELECT *
    FROM $tabl
    ");
    $k=mysql_fetch_array ($mar);
    $k['Vsego']=$k['Vsego']+1;
    if ($day!==$k['Chislo'])
    {
    $k['Chislo']=$day;
    $k['Segodna']=1;
    }
    else
    {
    $k['Segodna']=$k['Segodna']+1;
    }
    mysql_query
    ("
    UPD?1?T?1? Schetchik
    SET Vsego='$k[Vsego]', Segodna='$k[Segodna]', Chislo='$k[Chislo]'
    ");
    echo
    "<table border=2 bordercolor=orange>
    <tr>
    <td colspan=2 align=center> Посещаемость </td>
    </tr>
    <tr>
    <td align=center> Всего </td>
    <td align=center> Сегодня </td>
    </tr>
    <tr>
    <td align=center> $k[Vsego] </td>
    <td align=center> $k[Segodna] </td>
    </tr>
    </table>";
    }
    else
    {
    echo "Error!";
    }
    ?>

    Ошибка появляется такая: "Undefined index: Chislo" на 17 строке.

  3. 15
    Woollen Sock ответил:

    эт может и служило ошибкой в твоей первой мессаге)

  4. 14
    Woollen Sock ответил:

    хм, наверно потому что в в #12 под условием некорректное выражение.то есть нужно
    if ($rc==mysql_connect("localhost","user","password")); а не твое, но значит до этого ифа еще сделать
    $rc = mysql_connect(….), чтобы было че сравнивать в ифе))если объясняю по тупому (не всегда умею хорошо излагать свои мысли) скажи что не понял, я подробнее опишу)

  5. 13
    Анатолий Дмитриев ответил:

    #13.
    Никакой ошибки не происходит, все нормально.
    И какой можно сделать из этого вывод?

  6. 12
    Woollen Sock ответил:

    если хочешь проверить выполняется ли соединение с базой и идет ли выборка из таблицы, то лучше так напиши:
    <?
    $rc = mysql_connect ("localhost","user","password");
    mysql_select_db("B19147");
    $mar = mysql_query("SELECT * FROM Tabl");
    if (!$mar)
    {
    echo "код ошибки:";
    exit(mysql_error());
    }
    ?>

  7. 11
    Анатолий Дмитриев ответил:

    Даже вот это не работает:

    <?php
    if ($rc=mysql_connect ("localhost", "root", "root"))
    {
    mysql_select_db ("B19147");
    $mar=mysql_query ("
    SELECT *
    FROM Tabl
    ");
    $s=mysql_result ($mar, 0, 1);
    echo $s;
    }
    else
    {
    echo "Error!";
    }
    ?>

    Странно, почему?

  8. 10
    Анатолий Дмитриев ответил:

    Ошибка возникает вот здесь: "$k=mysql_fetch_array ($mar);".

  9. 9
    Анатолий Дмитриев ответил:

    Ребят, что-то никак не получается.
    Может кто-нибудь протеститировать этот код?
    Если честно, код взят из учебника. В коде ошибок нет, поэтому склоняюсь, что тут дело в чем-то другом, вот только в чем…
    Ребят, выручайте!!!

  10. 8
    Валерий Кожевников ответил:

    USE test_db;

    DR?1?P TABLE IF EXISTS `test_db`.`counter`;

    CREATE TABLE`test_db`.`counter` (
    `ts` timestamp NOT NULL default CURRENT_TIMESTAMP,
    `count` int(10) unsigned NOT NULL,
    PRIMARY KEYUSING BTREE (`ts`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    Непосредственно сам почасовой счетчик

    insert into counter SET `ts`= FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP()/3600)*3600), `count` = 1 ON DUPLICATE KEY UPD?1?T?1? `count` = `count` + 1;

    ЗЫ чето некоторые буквы поковеркались…

  11. 7
    Woollen Sock ответил:

    ой таблицу в смысле.

  12. 6
    Paul Mort ответил:

    А скачать готовую не пробовал?Зачем изобретать велосипед?Хотя если хочешь то пожалуйста

  13. 5
    Woollen Sock ответил:

    $tabl="Schetchik";
    $mar=mysql_query
    ("
    SELECT *
    FROM $tabl
    ");

    может не заносить в переменную поле с которым работаешь?

  14. 4
    Woollen Sock ответил:

    а разве параметры myysql_query не должны быть в {} ?

  15. 3
    Владимир Муромский ответил:

    Иван, по идее без разницы. Хотя я всегда пишу в кавычках.

    Анатолий, у вас в таблице всегда одна запись? Где WHERE?
    Посоветую отличный способ отладки запросов к БД. Вместо mysql_query пиши echo, копируй то что выведет и вставляй в phpmyadmin. Там тебе укажут на все ошибки в запросе. Если ошибок нет, значит беда в логике программы

  16. 2
    Анатолий Дмитриев ответил:

    #2.
    Сделал, но все по-прежнему!!!

  17. 1
    Иван Волынкин ответил:

    Во-первых. Сразу видна ошибка
    Не верно: $k[Vsego]
    Верно: $k['Vsego']
    потом протестируй всё в phpMyadmin

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.