[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с поиском записи
Frost-56
Всем привет.
Есть БД с одним полем (ip).
Надо сделать так:
1. Юзер посещает сайт и его ip автоматически пишется в БД, если такого ещё нету.
2. Если такой ip уже есть в базе, то отправить его по URL.
3. Если такого ip нету в БД, то просто оставить его не забыв записать ip.


Попробовал, не получилось.
Код:
<? 
include "bd.php";
$ipuser = $_SERVER['REMOTE_ADDR'];
$URL="http://site.org/";
$uzhe = mysql_query("SELECT ip FROM adress",$db);

while($rowc=mysql_fetch_array($uzhe))
{
$ips = $rowc['ip'];
if ($ips == $ipuser)
{
header ("Location: $URL");
}
else
{
mysql_query("INSERT INTO adress (ip) VALUES ('$ipuser')");
}
}

?>


Прошу у Вас помощи.



Спустя 2 минуты, 5 секунд (24.09.2012 - 14:04) sergeiss написал(а):
Тебе для начала надо почитать про то, как правильно сделать выборку из БД. А именно, условие WHERE. Чтобы выбирать не всю таблицу, а только нужные данные.

Спустя 3 минуты, 41 секунда (24.09.2012 - 14:07) Frost-56 написал(а):
WHERE я думаю не имеет отношения к моей проблеме.

Спустя 2 минуты, 10 секунд (24.09.2012 - 14:09) neadekvat написал(а):
Цитата (Frost-56 @ 24.09.2012 - 15:07)
я думаю не имеет отношения к моей проблеме.

Имеет.

Спустя 5 минут, 24 секунды (24.09.2012 - 14:15) Shuriken написал(а):
Алгоритм таков:

Сначала надо сделать селект с where ip=айпи_пользователя, если такой записи нет, то выполняется инсерт, если есть, то отправляешь по урл.

Попробуй сделать ещё вот так:

mysql_query("INSERT INTO adress (ip) VALUES ('".$ipuser."')");

Спустя 4 минуты, 17 секунд (24.09.2012 - 14:19) Frost-56 написал(а):
Цитата (Shuriken @ 24.09.2012 - 16:15)
Алгоритм таков:

Сначала надо сделать селект с where ip=айпи_пользователя, если такой записи нет, то выполняется инсерт, если есть, то отправляешь по урл

$uzhe = mysql_query("SELECT ip FROM adress WHERE ip = $ipuser");

Верно ?

Спустя 3 минуты, 39 секунд (24.09.2012 - 14:23) sergeiss написал(а):
Цитата (Frost-56 @ 24.09.2012 - 15:07)
WHERE я думаю не имеет отношения к моей проблеме.

Мало того, что имеет самое прямое отношение (чуть ранее уже подробно об этом написали), так еще ты время тратишь лишнее и ресурсы БД, на выполнение лишней работы. Представь, что у тебя в таблице хотя бы 100000 строк. Сначала их надо все выбрать - при этом создается временная таблица, которая и передается в ПХП для обработки. Затем ПХП бегает по всем строкам, ища нужную строку. И ищет не оптимально, как было бы с индексом, а ПОСЛЕДОВАТЕЛЬНО!
В итоге выборка займет много времени.

Спустя 2 минуты, 21 секунда (24.09.2012 - 14:25) Shuriken написал(а):
Цитата (Frost-56 @ 24.09.2012 - 11:19)
Цитата (Shuriken @ 24.09.2012 - 16:15)
Алгоритм таков:

Сначала надо сделать селект с where ip=айпи_пользователя, если такой записи нет, то выполняется инсерт, если есть, то отправляешь по урл

$uzhe = mysql_query("SELECT ip FROM adress WHERE ip = $ipuser");

Верно ?

Лучше так:

$res = mysql_query("SELECT COUNT(*) FROM adress WHERE ip = $ipuser"; 

if(mysql_result($res) == 0) {выполняешь инсерт} else {отправк по урл}

Спустя 17 минут, 56 секунд (24.09.2012 - 14:43) Frost-56 написал(а):
Shuriken
sergeiss

Спасибо Вам большое, за разъяснение и помощь.

Спустя 1 час, 4 минуты, 10 секунд (24.09.2012 - 15:47) Frost-56 написал(а):
Что-то нифига не работает.

<? 
include "bd.php";
$ipuser = $_SERVER['REMOTE_ADDR'];
$URL="http://site.org/";

$res = mysql_query("SELECT COUNT(*) FROM adress WHERE ip = $ipuser");

if(mysql_result($res) == 0)
{
mysql_query("INSERT INTO adress (ip) VALUES ('$ipuser')");
echo "Ваш ip добавлен";
}
else
{
header ("Location: $URL");
echo "Пшел нах!!!";
}

?>


При каждом обновлении страницы добавляет тот же ip в базу.

Спустя 1 час, 3 минуты, 54 секунды (24.09.2012 - 16:51) Shuriken написал(а):
Добавь редирект

echo "Ваш ip добавлен";
header ("Location: ");
exit();

Спустя 1 минута, 41 секунда (24.09.2012 - 16:53) Shuriken написал(а):
А вообще реши вот эту задачку http://phpforum.ru/index.php?showtopic=19168
Когда её решишь, выложишь условие, тебе укажут на ошибки и ты их исправишь, то у тебя отпадёт очень много вопросов. Если б ты решил бы эту задачу, то этой темы б не было

Спустя 1 минута, 36 секунд (24.09.2012 - 16:54) Frost-56 написал(а):
Цитата (Shuriken @ 24.09.2012 - 18:51)
Добавь редирект

echo "Ваш ip добавлен";
header ("Location: ");
exit();

Зачем сообщение что ip добавлен над хэдером ?
Мне надо послать подальше и редиректнуть если ip не был занесен в бд потому что он там уже есть.

Спустя 3 минуты, 15 секунд (24.09.2012 - 16:58) Shuriken написал(а):
Цитата (Frost-56 @ 24.09.2012 - 13:54)
Цитата (Shuriken @ 24.09.2012 - 18:51)
Добавь редирект

echo "Ваш ip добавлен";
header ("Location: ");
exit();

Зачем сообщение что ip добавлен над хэдером ?
Мне надо послать подальше и редиректнуть если ip не был занесен в бд потому что он там уже есть.

Блин, точно. После того, как добавляешь какие-либо данные в базу необходимо делать редирект, чтоб обнулить массивы пост и гет, иначе при нажатии на F5 данные будут заносится в базу

Спустя 8 минут, 32 секунды (24.09.2012 - 17:06) Frost-56 написал(а):
Ничего не изменилось, так же добавляет один и тот же ip в новые строки и нету редиректа

Спустя 14 минут, 22 секунды (24.09.2012 - 17:20) Frost-56 написал(а):
Появилось 2 варнинга:



Warning: mysql_result() expects at least 2 parameters, 1 given in (9 строка)

Warning: Cannot modify header information - headers already sent by (12 строка)

<?
include "bd.php";
$ipuser = $_SERVER['REMOTE_ADDR'];
$URL="http://site.org/";
$URLS = "http://kcivi.org/test.php";

$res = mysql_query("SELECT COUNT(*) FROM adress WHERE ip = $ipuser");

if(mysql_result($res) == 0)
{
mysql_query("INSERT INTO adress (ip) VALUES ('$ipuser')");
header ("Location: $URLS");
exit();
}
else
{
header ("Location: $URL");
exit();
}
?>

Спустя 10 минут, 28 секунд (24.09.2012 - 17:31) inpost написал(а):
Вообще, что такое mysql_result ? какие параметры принимает, что возвращает? Вот поставил функцию, разберись в ней...

Спустя 1 минута, 43 секунды (24.09.2012 - 17:33) Frost-56 написал(а):
Читал, делал так
if(mysql_result($res,0) == 0)
вместо
if(mysql_result($res) == 0)

Но ничего не изменилось, даже если выставить все 3 параметра.

Спустя 4 часа, 33 секунды (24.09.2012 - 21:33) Frost-56 написал(а):
sad.gif

Спустя 18 часов, 38 минут, 51 секунда (25.09.2012 - 16:12) Frost-56 написал(а):
поможет кто ? ведь задача не сложная )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.