Два условия добавления/проверки в БД.

kylan

Новичок
Добрый день, уважаемые знатоки!)
Мне нужна ваша помощь. Я новичок, учу PHP и наткнулся на одну проблемку, решение которой даже не смог найти через Google :)
У меня есть код.
Код:
    mysql_connect("localhost", "bazaname", "pass") or die (mysql_error ());
mysql_select_db("bazaname") or die(mysql_error());
$sel = "SELECT * FROM IP WHERE IP = '$ip'";
$sel = "SELECT * FROM IP WHERE url = '$param1'";
$res = mysql_query($sel);
$num = mysql_num_rows($res);
if($num == 0) {
    //добавляем в бд
    $sql = "insert into IP (ip, url) values ('$ip', '$param1')";
    $result = mysql_query($sql);
    if($result) {  функция;
   
    }
    else  { echo "Error"; }
}
else { echo '<script language="javascript">
    alert("Нельзя так часто!");
    document.location.href = "/";
  </script>'; }

?>
Код проверяет IP и URL пользователя, если он впервые - записывает данные. Если IP и URL совпадают, выводится ошибка.
Как можно сделать так, чтобы IP и URL не вместе проверялись, а отдельно? Т.e. IP существующий в БД с другим URL не записывался, так же наоборот URL существующий в БД с другим IP не записывался. Вероятно я плохо объяснил :) Грубо говоря нельзя в базу пускать тоже самый IP или URL.
 

WMix

герр M:)ller
Партнер клуба
и задачу не правильно себе поставил и код не смог написать и обьяснть не смог.

я соглашусь с тобой что URL должен быть уникален,
Код:
ALTER TABLE IP ADD UNIQUE (url)
но IP сегодня у меня завтра у моего соседа (он чем провинился?) в добавок всего я легко меняю IP с помощью проксей
кстати в твоей программе на IP не проверяется
 

kylan

Новичок
и задачу не правильно себе поставил и код не смог написать и обьяснть не смог.

я соглашусь с тобой что URL должен быть уникален,
Код:
ALTER TABLE IP ADD UNIQUE (url)
но IP сегодня у меня завтра у моего соседа (он чем провинился?) в добавок всего я легко меняю IP с помощью проксей
кстати в твоей программе на IP не проверяется
Это часть кода, IP проверяется. Задача поставлена правильно, вероятно вы меня не так поняли.
 

kylan

Новичок
Допустим когда пользователь пишет URL, его URL добавляется в БД. Другой человек с таким URL не должен попасть в БД.
 

WMix

герр M:)ller
Партнер клуба
Допустим когда пользователь пишет URL, его URL добавляется в БД. Другой человек с таким URL не должен попасть в БД.
глядя на твой код, я подумал бы, что это у тебя реализованно, в дополнение я предложил выше добавить уникальность на поле url

есть один момент, который я не понимаю, что значит "человек с таким URL", "URL пользователя" каким боком URL относится к человеку?
 
Последнее редактирование:

kylan

Новичок
К примеру в Анкете пользователь может указать ссылку на свою страницу в соц. сетях.
Мой код проверяет два условия вместе, т.e. Если IP и URL совпадают - не записывает. А если одно из условий не совпадает, но другое совпадает - добавляется.
Приведу пример. Пользователь, у которого IP 111.111 пишет свой URL vk.com/id1 - все правильно, добавляется.
Потом другой пользователь, у которого IP 222.222 пишет URL vk.com/id1 - не правильно, но добавляется.
 

WMix

герр M:)ller
Партнер клуба
Приведенный кусок кода проверяет только url.
то что ты хочешь должно сработать,
единственное о чем в данном случае ты не подумал, пользователь может написать URL vk.com/id1#dummy или что нибудь в этом роде
 

kylan

Новичок
Приведенный кусок кода проверяет только url.
то что ты хочешь должно сработать,
единственное о чем в данном случае ты не подумал, пользователь может написать URL vk.com/id1#dummy или что нибудь в этом роде
Спасибо за подсказку. Буду вручную банить таких пользователей, пока не найду решение)
А как можно сделать, чтобы не только URL проверялся, но и IP?
Насчет того, что IP может быть у соседа - это ничего )
 

WMix

герр M:)ller
Партнер клуба
грубо, нужно все повторить для ip и проверка больше
PHP:
//$num = mysql_num_rows($res); 
$url_exists = mysql_num_rows($res); // тут переименовал просто чтоб было понятно
if( !$ip_exists && !$url_exists){
 // insert
}
 

kylan

Новичок
Прости меня за мою неграмотность, но не могу понять, в какую часть писать это ))
 

WMix

герр M:)ller
Партнер клуба
у тебя пример уже есть! нужно разобраться самому как он работает.
 

kylan

Новичок
Если я бы мог, думаешь, я бы тут просил помощи? Я новичок и плохо разбираюсь! Пришел за помощью на форум и надеюсь на помощь с объяснением, а не прошу делать за меня что-то.
 

WMix

герр M:)ller
Партнер клуба
я не понимаю какой у тебя затык, если предыдущий код написал ты, то этих знаний достаточно,
если нет, то очень сложно обьяснить что нибудь, когда даже не понимают, как работает присвоение.
PHP:
$sel = "SELECT * FROM IP WHERE IP = '$ip'";
$sel = "SELECT * FROM IP WHERE url = '$param1'";
echo $sel;
купи книжку чтоли.
 

kylan

Новичок
Wmix, а может перестанешь пытаться "укусить" ? Если ты всем на форуме так отвечаешь, то это плохо. Мне уже подсказали, а решение было очень простое.
Код:
$sel = "SELECT * FROM IP WHERE IP = '$ip' OR url = '".mysql_real_escape_string($param1)."' ";
Всего одной строкой мне помогли, а ты написал много, но помощи как видишь мало.
 

WMix

герр M:)ller
Партнер клуба
мне кажется что по своей наивности ты не смог разобраться где тебя послали а где пытались помочь.
 

kylan

Новичок
Такое ощущение, что ты намекаешь на то, что часть кода которую мне дали - не работает.
Но все работает... Не один раз проверял))
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
kylan, молодец, теперь можешь пойти и не один раз прочитать про SQL-инъекции и плейсхолдеры.
 

kylan

Новичок
У меня стоит cron, который каждые 12 часа очищает таблицы в БД. Т.e. IP и URL записываются в базу на 12 часа. Думаю, опасность мне не грозит. А у param1 стоит
Код:
$param1 = stripslashes($param1);
    $param1 = htmlspecialchars($param1);
//удаляем лишние пробелы
    $param1 = trim($param1);
    $param1 = trim($param1);
Сделал так, потому-что мои url содержат только цифры.
Я прав или опять что-то накосячил?
 
Сверху