Здравствуйте!!!
Возникла проблема при написании программы на языке "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).
Скажите, пожалуйста, возможные проблемы и пути их устранения…
4 августа 2009 в 14:00
Спасибо всем!!!
Проблема решена.
2 августа 2009 в 21:02
#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 строке.
2 августа 2009 в 19:03
эт может и служило ошибкой в твоей первой мессаге)
2 августа 2009 в 19:02
хм, наверно потому что в в #12 под условием некорректное выражение.то есть нужно
if ($rc==mysql_connect("localhost","user","password")); а не твое, но значит до этого ифа еще сделать
$rc = mysql_connect(….), чтобы было че сравнивать в ифе))если объясняю по тупому (не всегда умею хорошо излагать свои мысли) скажи что не понял, я подробнее опишу)
2 августа 2009 в 18:05
#13.
Никакой ошибки не происходит, все нормально.
И какой можно сделать из этого вывод?
2 августа 2009 в 18:02
если хочешь проверить выполняется ли соединение с базой и идет ли выборка из таблицы, то лучше так напиши:
<?
$rc = mysql_connect ("localhost","user","password");
mysql_select_db("B19147");
$mar = mysql_query("SELECT * FROM Tabl");
if (!$mar)
{
echo "код ошибки:";
exit(mysql_error());
}
?>
2 августа 2009 в 17:04
Даже вот это не работает:
<?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!";
}
?>
Странно, почему?
2 августа 2009 в 17:01
Ошибка возникает вот здесь: "$k=mysql_fetch_array ($mar);".
2 августа 2009 в 15:05
Ребят, что-то никак не получается.
Может кто-нибудь протеститировать этот код?
Если честно, код взят из учебника. В коде ошибок нет, поэтому склоняюсь, что тут дело в чем-то другом, вот только в чем…
Ребят, выручайте!!!
30 июля 2009 в 23:04
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;
ЗЫ чето некоторые буквы поковеркались…
30 июля 2009 в 20:03
ой таблицу в смысле.
30 июля 2009 в 20:03
А скачать готовую не пробовал?Зачем изобретать велосипед?Хотя если хочешь то пожалуйста
30 июля 2009 в 19:05
$tabl="Schetchik";
$mar=mysql_query
("
SELECT *
FROM $tabl
");
может не заносить в переменную поле с которым работаешь?
30 июля 2009 в 19:03
а разве параметры myysql_query не должны быть в {} ?
30 июля 2009 в 18:01
Иван, по идее без разницы. Хотя я всегда пишу в кавычках.
Анатолий, у вас в таблице всегда одна запись? Где WHERE?
Посоветую отличный способ отладки запросов к БД. Вместо mysql_query пиши echo, копируй то что выведет и вставляй в phpmyadmin. Там тебе укажут на все ошибки в запросе. Если ошибок нет, значит беда в логике программы
30 июля 2009 в 16:03
#2.
Сделал, но все по-прежнему!!!
30 июля 2009 в 15:01
Во-первых. Сразу видна ошибка
Не верно: $k[Vsego]
Верно: $k['Vsego']
потом протестируй всё в phpMyadmin