|
|
|
| Мне не удаётся организовать логику кода, прошу вашей помощи
Хочу сделать одну переменную как контейнер, то есть она будет принимать несколько разных значений которые я буду заносить в БД, пускай это будет LOGIN и NAME. По условию мы LOGIN принимаем на нашу переменную data первым и заносим его в БД в колонку login. Так же заносим и ip клиента из переменной IP, он будет идти как primary key. Дальше если этот IP есть, то тогда переменная data приняла не LOGIN, а NAME и его следует занести в колонку name. По условию login, name и данный IP должны быть в одной строке.
Если схематично, то работа скрипта должна выглядеть так:
- заносим login из переменной data и IP из переменной ip в БД (это просто, эта часть кода есть)
$check1 = @ mysql_query ( "INSERT INTO `id` ( IP, login ) VALUES( $ip, $data)");
|
- если IP есть в БД, то переменная data приняла name (а не login как в первый раз)
Я знаю и понимаю что это глупо, проще и рациональней сделать сессию и две переменных
Как такое реализовать? | |
|
|
|
|
|
|
|
для: wtf bro
(28.11.2013 в 18:48)
| | Рассказано, что не понять что к чему
IP не всегда есть, и по нему первичный ключ.... И что значит По условию login, name и данный IP должны быть в одной строке.?
А вообще то, кто вам мешает получать то что есть пересечениями массивов? Допустим у вас имена полей формы имеют какие вам вздумается значения, допустим "log' и 'nam'. Есть массив описывающий имена полей сопоставленный ключами с полями формы. Тогда:
<?
$fields = array('ip'=>'user_ip', 'nam'=>'user_name', 'log'=>'user_login');
if(isset($ip)) $_POST + + array('ip'=>$ip);
$fields = implode(',', array_intersect_key($ields, $_POST));
$values = '"'.implode('","', array_map('mysql_real_escape_string', $_POST)).'"';
$sql = 'INSERT INTO tbl ('.$fields.') VALUES ('.$values.')';
|
А уж перетасовать значения между ключами, или сменить ключ можно по условию, но в том кошмаре что вы описали не понять, что за рокировки... | |
|
|
|
|
|
|
|
для: confirm
(28.11.2013 в 19:18)
| | Я извиняюсь что описал суть вопроса как колхоз, а фраза "По условию login, name и данный IP должны быть в одной строке", означает что в БД данные от одного пользователя должны быть такого вида: IP|name|login . Я просто не могу на профессиональном уровне объяснить это красиво и правильно
Пересечение массивов я сделать тоже не могу, потому что данные отправляются так же через одну форму, так само как и принимаются | |
|
|
|
|
|
|
|
для: wtf bro
(28.11.2013 в 22:59)
| | >в БД данные от одного пользователя должны быть такого вида: IP|name|login
Это еще хуже, чем объяснение. Выбросите эту идею сразу в помойку и храните каждое из этого в отдельном поле таблицы.
А я разве вам говорил, что приведенный мной пример показывает прием POST данных из многочисленных форм? Вы даже, если бы захотели, не смогли бы получить в массиве POST одновременно данные из нескольких форм. | |
|
|
|
|
|
|
|
для: confirm
(28.11.2013 в 19:18)
| | [OFFTOP]
> $_POST + + array('ip'=>$ip);
А что это значит? Я первый раз такую конструкцию вижу..... | |
|
|
|
|
|
|
|
для: Sfinks
(28.11.2013 в 23:43)
| | Да вот сам первый раз увидел :) Лишний плюс не заметил. | |
|
|
|
|
|
|
|
для: confirm
(28.11.2013 в 23:56)
| | Тьфу! Я думал что-то новое =) | |
|
|
|
|
|
|
|
для: wtf bro
(28.11.2013 в 18:48)
| |
INSERT INTO `id` ( IP, login ) VALUES( $ip, $data)
ON DUPLICATE KEY UPDATE name = VALUES(login)
|
| |
|
|
|