if($a==$b) и mysql

danil_k

Guest
if($a==$b) и mysql

Мне необходимо произвести сверку нового IP с уже имеющимися в колонке "ip", если такого нет то дописать его в конец, если есть то ничего не менять...



Вот я попробовал написать немного но что-то не так....
ПОМОГИТЕ!

$get_ip="$REMOTE_ADDR\r\n";

$DB_view = "SELECT * from $DB_table WHERE id=1";
$DB_view_result = mysql_db_query($DB_name, $DB_view, $DB_connect);
$data = mysql_fetch_array($DB_view_result);
$ip_in_DB_base = $data[ip];
$ip_in_DB = "$data[ip]$get_ip";

$num=count($ip_in_DB_base);
if($get_ip==$ip_in_DB_base){
echo "Такой ip $get_ip уже есть в базе";
}else{
$DB_update = "UPDATE $DB_table SET ip='$ip_in_DB' WHERE id='1'";
mysql_db_query($DB_name, $DB_update, $DB_connect);
echo "Ваш ip - $get_ip добавлен к общей базе: <b>$ip_in_DB</b> добавлен вбазу";
}
 

PHPer

Новичок
Как я понял, все ip пишутся просто в строчку в базе, лучше бы их как-нить разделять. И не просто $a==$b, а $b в этом случае строка, в которой надо искать подстроку $a
 

Romantik

TeaM PHPClub
PHPer
Я как то не обратил внимание на это =)
действительно получается в строчку
danil_k
тогда нужен разделитель в базе типа | или : и потом [m]explode[/m] и [m]in_array[/m]
 

danil_k

Guest
2Mozart

Короче сравнивает оно первый айпишник нормально, если он есть в базе то его не добавляет, но если он отличается от того что в базе то тогда всё, начинается некотролируемая запись....

2 Romantik
Ну изнаём новый ip : $get_ip="$REMOTE_ADDR\r\n";

А это: $ip_in_DB = "$data[ip]$get_ip";, уже когда в базу заносим, заноси старые ip-ники и новый в конец

2ALL

Данные в базе храняться в виде: http://danilk.iatp.org.ua/problem.gif
 

Romantik

TeaM PHPClub
danil_k
у тебя разделитель ИП- это \r\n
вот от этого и отталкивайся
в твоем if сравнивается
127.0.0.1\r\n
и
127.0.0.2\r\n
127.0.0.1\r\n
127.0.0.1\r\n
Чувствуешь разницу?
 

danil_k

Guest
Воспользовался list() и explode(), теперь данные в базе хранятся в виде:
127.0.0.1|127.0.0.2|127.0.0.3|
и снова проблема....
Снова при первом внесении данных пишет что всё ок, но если поменять первые данные то тогда старая песня начинается с самого начала, добавляет и добавляет...


Вот код(может что-то неверно написал???):
$get_ip_="$REMOTE_ADDR";

$DB_view = "SELECT * from $DB_table WHERE id=1";
$DB_view_result = mysql_db_query($DB_name, $DB_view, $DB_connect);
$data = mysql_fetch_array($DB_view_result);
$ip_in_DB = $data[ip];
list($BD_ip)=explode("|", $ip_in_DB);
$ip_BD = array($BD_ip);
if (in_array($get_ip_, $ip_BD)){
echo "ip $get_ip_ уже в базе присутствует";
}else{
echo "Такой ip $get_ip_ можно добавить в базу";
}
так вот попробывал:

$get_ip_="$REMOTE_ADDR";

$DB_view = "SELECT * from $DB_table WHERE id=1";
$DB_view_result = mysql_db_query($DB_name, $DB_view, $DB_connect);
$data = mysql_fetch_array($DB_view_result);
$ip_in_DB = $data[ip];
list($ip)=explode("|", $ip_in_DB);
if(stristr($ip, $get_ip_)) {
echo "Такой ip $get_ip_ уже в базе присутствует";
}else{
echo "Такой ip $get_ip_ можно добавить в базу";
}
 

Krishna

Продался Java
Зачем такие извращенные мучения со впихиваниями нескольких ip одну ячейку?
Не любим легких решений?
Да здравствует первая нормальная форма!
 

PHPer

Новичок
Автор оригинала: danil_k
Воспользовался list() и explode(), теперь данные в базе хранятся в виде:
127.0.0.1|127.0.0.2|127.0.0.3|
и снова проблема....
Снова при первом внесении данных пишет что всё ок, но если поменять первые данные то тогда старая песня начинается с самого начала, добавляет и добавляет...


Вот код(может что-то неверно написал???):


так вот попробывал:
А как ты в базу добавляешь, напиши код. Если с \r\n всякими, то, естественно, в массиве не найдется $REMOTE_ADDR
 

[sid]

Новичок
Я знаю, что наверное, покажусь ехидным человеком, но может взглянуть на структуру БД. Вообще-то вы нарушаете первый закон нормализации базы данных (все столбцы должны быть атомарны). Я думаю надо записывать новый IP-адрес как отдельный кортеж с тем же ID (в этой ситуации есть смысл выбрать другой первичный ключ)!

Подумайте над этим. Операции с данным станут гораздо проще в этом случае!
 

danil_k

Guest
Автор оригинала: PHPer
А как ты в базу добавляешь, напиши код. Если с \r\n всякими, то, естественно, в массиве не найдется $REMOTE_ADDR
Ну при первой записи примерно так:


$get_ip="$REMOTE_ADDR|";

$DB_update = "UPDATE $DB_table SET ip='$get_ip_' WHERE id='1'";
mysql_db_query($DB_name, $DB_update, $DB_connect);

При повторной, типа после проверки так:

$ip_in_DB_base = "$data[ip]$get_ip_";
$DB_update = "UPDATE $DB_table SET ip='$ip_in_DB_base' WHERE id='1'";
mysql_db_query($DB_name, $DB_update, $DB_connect);
 

_RVK_

Новичок
[sid]
Умница!
Все остальные. Если взникает проблема подобная этой, то она может быть только следствием на этапе проектирования. Это тот случай. Зачем давать заведомо неверных советов?
 
Сверху