|
|
|
| Здравствуйте!
Проблема вот в чем. Хочу вести учет пользователей и идентифицирую их в базе по IP-адресам.написал код и возникла проблема
$addr = $_SERVER['REMOTE_ADDR'];
$queryyy = "SELECT * FROM vsecat WHERE ip='$addr' ";
$resss = mysql_query($queryyy);
$vrem = date("d.m.Y.H.i.s");
// если айпи новый то регистрируем его
if(!$resss)
{
$query1 = "INSERT INTO vsecat ( `id` , `ip`, `time`, `dost`)
VALUES ('' , '$addr', '$vrem', 'da')";
@$res1 = mysql_query($query1);
}
|
проблема:
если в запросе
$queryyy = "SELECT * FROM vsecat WHERE ip='$addr' ";
| я ставлю ' - такие кавычки у переменной $addr' то IP-адрес не заносится в базу если пользователь впервые зашел на страницу, а если ` - такие кавычки, то заносится, но впоследствии этот запрос не работает (в плане того что при наличии такого IP в базе он его не находит)
объясните пожалйуста в чем разница этих кавычек и как быть то? | |
|
|
|
|
|
|
|
для: Vincento
(15.09.2008 в 17:51)
| |
$queryyy = "SELECT * FROM vsecat WHERE ip='".$addr."' ";
|
| |
|
|
|
|
|
|
|
для: Vincento
(15.09.2008 в 17:51)
| | >ставлю ' - такие кавычки, а если ` - такие кавычки
а если без кавычек?
>объясните пожалйуста в чем разница кавычек
http://ru2.php.net/manual/ru/language.types.string.php#language.types.string.parsing | |
|
|
|
|
|
|
|
для: Mehelson
(15.09.2008 в 18:11)
| | без кавычек как в первом варианте, не записывает нового пользователя | |
|
|
|
|
|
|
|
для: Vincento
(15.09.2008 в 17:51)
| | Обратные ковычки используются для имен столбцов. А одинарные или двойные для значений.
Но проблема у вас не в кавычках.
Функция mysql_query():
Только для запросов SELECT, SHOW, EXPLAIN, DESCRIBE, mysql_query() возвращает указатель
на результат запроса, или FALSE если запрос не был выполнен. В остальных случаях,
mysql_query() возвращает TRUE в случае успешного запроса и FALSE в случае ошибки. Значение
не равное FALSE говорит о том, что запрос был выполнен успешно. Он не говорит о количестве
затронутых или возвращённых рядов. Вполне возможна ситуация, когда успешный запрос не
затронет ни одного ряда.
|
В вашем случае, если такого ip нет в базе, функция возвращает true, поскольку сам запрос был корректным.
И соответственно, проверка
будет всегда отрицательной.
Вам нужно проверять результат функции mysql_num_rows()
<?
$addr = $_SERVER['REMOTE_ADDR'];
$queryyy = "SELECT * FROM vsecat WHERE ip='$addr' ";
$resss = mysql_query($queryyy);
$rows = mysql_num_rows($resss);
$vrem = date("d.m.Y.H.i.s");
// если айпи новый то регистрируем его
if($rows < 1)
{
$query1 = "INSERT INTO vsecat ( `id` , `ip`, `time`, `dost`)
VALUES ('' , '$addr', '$vrem', 'da')";
@$res1 = mysql_query($query1);
}
?>
|
| |
|
|
|
|
|
|
|
для: Drago
(15.09.2008 в 19:28)
| | Спасибо большое!! | |
|
|
|
|
|
|
|
для: Drago
(15.09.2008 в 19:28)
| | >В вашем случае, если такого ip нет в базе, функция возвращает true, поскольку сам запрос был корректным.
Функция таки вернет дескриптор результирующего набора строк. Пустого набора. В остальном всё верно. | |
|
|
|
|
|
|
|
для: Trianon
(15.09.2008 в 19:43)
| | >Функция таки вернет дескриптор результирующего набора строк. Пустого набора. В остальном всё верно.
Да, конечно. Просто, в условиях такой проверки "if(!$resss)" дескриптор будет приравнен к true. :) | |
|
|
|