Есть БД с одним полем (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=айпи_пользователя, если такой записи нет, то выполняется инсерт, если есть, то отправляешь по урл.
Попробуй сделать ещё вот так:
Сначала надо сделать селект с 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) | ||
$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
Спасибо Вам большое, за разъяснение и помощь.
sergeiss
Спасибо Вам большое, за разъяснение и помощь.
Спустя 1 час, 4 минуты, 10 секунд (24.09.2012 - 15:47) Frost-56 написал(а):
Что-то нифига не работает.
При каждом обновлении страницы добавляет тот же ip в базу.
<?
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 добавлен"; |
Зачем сообщение что ip добавлен над хэдером ?
Мне надо послать подальше и редиректнуть если ip не был занесен в бд потому что он там уже есть.
Спустя 3 минуты, 15 секунд (24.09.2012 - 16:58) Shuriken написал(а):
Цитата (Frost-56 @ 24.09.2012 - 13:54) | ||
Зачем сообщение что 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 строка)
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 параметра.
if(mysql_result($res,0) == 0)
вместо
if(mysql_result($res) == 0)
Но ничего не изменилось, даже если выставить все 3 параметра.
Спустя 4 часа, 33 секунды (24.09.2012 - 21:33) Frost-56 написал(а):
Спустя 18 часов, 38 минут, 51 секунда (25.09.2012 - 16:12) Frost-56 написал(а):
поможет кто ? ведь задача не сложная )