Тема: Вывод ника (Движок DCMS-Social/Общие вопросы) Энмеркар (29 Oct 2018 в 02:57) Так ответ например в чате в коме или же в гостевой как будет у тебя выглядеть если там допустим 20 Саш будет на сайте,, о5 выходит что никней нужен,, тогда уж дополнением имя должно быть а не основой:) kantry (29 Oct 2018 в 04:27) Как то так. <?php //$ank = mysql_fetch_assoc(mysql_query(\'SELECT `nick`, `ank_name`, `date_last`, `rating`, `browser` FROM `user` WHERE `id` = \"\' . $user . \'\" LIMIT 1 \')); // Вариант 2 $ank = mysql_fetch_assoc(mysql_query(\'SELECT IFNULL(ank_name, nick) AS nick, `date_last`, `rating`, `browser` FROM `user` WHERE `id` = \"\' . $user . \'\" LIMIT 1 \')); $nick = null; $online = null; $icon_medal = null; // Вывод ника if ($user == 0) { $ank = array(\'id\' => 0, \'ank_name\' => \'Cистема\', \'pol\' => \'1\', \'rating\' => 0, \'browser\' => \'wap\', \'date_last\' => time()); } elseif (!$ank) { $ank = array(\'id\' => 0, \'nick\' => \'[Удален]\', \'pol\' => \'1\', \'rating\' => 0, \'browser\' => \'wap\', \'date_last\' => time()); } // Вариант 1 // $ank[\'nick\'] = isset($ank[\'ank_name\']) ? $ank[\'ank_name\'] : $ank[\'nick\']; if ($url) { $nick = \' <a href=\"/id\' . $user . \'\">\' . $ank[\'nick\'] . \'</a> \'; } else { $nick = $ank[\'nick\']; } ?> Svat (29 Oct 2018 в 09:01) kantry, Замечательное решение вариант номер 2 Только ошибка Не так if ($user == 0)$ank = array(\'id\' => \'0\', \'ank_name\' => \'Cистема\', \'pol\' => \'1\', \'rating\' => \'0\', \'browser\' => \'wap\', \'date_last\' => time()); А вот так if ($user == 0)$ank = array(\'id\' => \'0\', \'nick\' => \'Cистема\', \'pol\' => \'1\', \'rating\' => \'0\', \'browser\' => \'wap\', \'date_last\' => time()); Почему? Ты присвоил (ank_name, nick) значение nick и так же его выбираешь. Array не найдёт поле ank_name, по причине - его нет в выборке. Проверить легко $ank = mysql_fetch_assoc(mysql_query(\'SELECT IFNULL(ank_name, nick) AS nick, `date_last`, `rating`, `browser` FROM `user` WHERE `id` = \"\' . $user . \'\" LIMIT 1 \')); var_dump( $ank ); Выводит array(4) { [\"nick\"]=> string(8) \"kantry_good_solution\" [\"date_last\"]=> string(10) \"1540791728\" [\"rating\"]=> string(1) \"0\" [\"browser\"]=> string(3) \"web\" } Можно ещё так Вместо $ank = mysql_fetch_assoc через array Через array $ank = mysql_fetch_array Тогда поле ank_name можно вывести через [0] Но это лишнее думаю. Вариант номер 2 отличный. Молодец! kantry (29 Oct 2018 в 15:14) Svat, точно, я пару дней назад как раз, кого то учил что копипастить нехорошо:D lolos (29 Oct 2018 в 16:08) kantry, А меня недоразвитый SimptomFD забанил Ума не хватило ответить - мужЫк:D https://dcms-social.ru/forum/20/44/62589/ SimptomFD (29 Oct 2018 в 16:34) lolos, Не нарушай правила, и не будет бана. Оброк (29 Oct 2018 в 17:27) SimptomFD, Ты меня ждал?!! А анкету вторую забанил зачем, что бы легче мне было ответить:D Ты думаешь что кругом дураки, и в твои бредни поверят? Ну не вышло у тебя, облажался. https://dcms-social.ru/forum/20/44/62589/ Так поступи по мужски, а не как обиженная бикса - тему закрыл а меня в бан:D Какая польза от тебя, скажи? Кроме как покрывать мошенников! Даже в темах помочь не можешь! Ходишь сюда только гадить! Тут по крупицам собираешь людей, пришло чудовище SimptomFD, обосралось само, и за это меня забанило! Ты банишь меня за то что ты даун? Такие правила не работают поверь:D Сидишь на гиксе, свои дырявые скрипты продаёшь? Вот и сиди пока я туда не добрался. Чуешь дичь, паблом запахло. MRX (29 Oct 2018 в 18:10) kantry, Чет не выходит, то не отображает ничего, то страницы не ботают, я еще добавил в анкету фамилию, хотелось что бы что бы она выводился возле имени \' . text($ank[\'ank_surname\']) . \', но не выходит сделать, вернул все по дефолту, можешь прописать в файле что бы работало? Файл [i]Добавлено:[/i] kantry (29 Oct 2018 в 19:03) MRX, я что то в таблице не нашел никакого ank_surname. Если у тебя есть такая колонка сам добавишь в запрос, и в вывод, там ничего сложного нет. [i]Добавлено:[/i] SimptomFD, вы бы хоть подчищали за собой этот срачь, ваши разборки, ну вот даже нах никому не надо:D reestr (29 Oct 2018 в 19:26) kantry, Молодец. Но скажи автору что это выводиться из класса. Например echo user::nick($ank[\'id\'], 1, 1, 1); Ато он тыкать будет не туда и как итог, писать что не работает. Бан SimptomFDУ - Волю народу:D MRX (29 Oct 2018 в 19:39) kantry, Работает, но когда у человека в анкете не заполнено поле имя то в модулях не выводит ничего, а хотелось бы что бы если поля не были заполнены то выводил обратно ник, но не так работает, я заменил свой файл на который вы мне кинули kantry (29 Oct 2018 в 20:00) MRX, а ты код с выводом ника из того модуля скинь сюда? Как бы такого не должно быть))) MRX (29 Oct 2018 в 20:04) kantry, Ну стандартная гостевая, ты у себя пробовал в анкете имя стереть?, ник снова выводило? Учитель (30 Oct 2018 в 05:50) MRX, Пробуй - работает, снимки ниже. Важно, работает только там где ник выводиться из класса. Например вот так echo user::nick($ank[\'id\'], 1, 1, 1); Бан SimptomFD-У, волю народу:D kantry (30 Oct 2018 в 05:58) MRX, я понял, это тебе надо залезть в /user/info/edit.php и заменить блок с обновлением ank_name <?php if (isset($_GET[\'set\']) && $_GET[\'set\'] == \'name\') { if (isset($_POST[\'ank_name\']) && preg_match(\'#^([A-zА-я -]*)$#ui\', $_POST[\'ank_name\'])) { $user[\'ank_name\'] = trim($_POST[\'ank_name\']); if (!empty($user[\'ank_name\'])) {// Можно(нужно) strlen($user[\'ank_name\']) > 2 использовать, чтобы короткие имена не пихали mysql_query(\"UPDATE `user` SET `ank_name` = \'\".my_esc($user[\'ank_name\']).\"\' WHERE `id` = \'$user[id]\' LIMIT 1\"); } else { mysql_query(\'UPDATE `user` SET `ank_name` = NULL WHERE `id` = \' . $user[\'id\']); } } else { $err[]=\'Неверный формат имени\'; } } ?> Учитель (30 Oct 2018 в 06:12) kantry, Зачем? В таблице user, по дефолту поле ank_name имеет null Пусть пробует тот архив что я ниже дал. Немного изменил $ank = mysql_fetch_assoc(mysql_query(\" SELECT IF ( ank_name <> \'\', ank_name, nick ) AS nick, date_last, rating, browser FROM user WHERE id = $user \")); и всё заработало. Или ты о чём? [i]Добавлено:[/i] Бан SimptomFD-У, волю народу:D kantry (30 Oct 2018 в 09:00) Учитель, о том что в edit.php пустая строка пишется в колонку ank_name, а не null. Учитель^ (30 Oct 2018 в 09:16) kantry, По идее так и должно быть... NULL отдаётся только под тождество. Ладно не буду мешать. Мои нижайшие за балаган с Симтомом. kantry (30 Oct 2018 в 09:50) Учитель^, ну так когда стираешь имя - по дефолту и должен null записываться, а там строку можно из пробелов записать. Учитель^ (30 Oct 2018 в 15:19) kantry, В данном случае значение NULL уже есть оно задаётся при создании поля. ALTER TABLE `user` CHANGE `ank_name` `ank_name` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; И важно верно извлечь Сам null, это отсутствие значения, либо неизвестное значение Вот тут собственно и расхождение, почему и упомянуто тождество. Либо истинно равно, либо всё под вопросом. Но по сути, нам не надо null искать и сравнивать, достаточно найти отсутствие У меня оператор сравнения <> под IF прекрасно справился. Ставлю пробелы - выводит ник, значение - имя... Не знаю, может скрипт подумал: достанет же окоянный, лучше буду ка работать:D kantry (30 Oct 2018 в 16:35) Учитель^, да я про твой запрос ничего не пишу, пишу про то что при редактировании имени можно вставить столько пробелов, сколько колонка в базе позволяет, при чем тут твой null? Учитель^ (30 Oct 2018 в 17:15) --Цитата-- kantry (30 Oct 2018 в 16:35): Учитель^, да я про твой запрос ничего не пишу, пишу про то что при редактировании имени можно вставить столько пробелов, сколько колонка в базе позволяет, при чем тут твой null? ---------- kantry, Возможно не верно истолковал твой пост kantry 09:50:34 Учитель^, ну так когда стираешь имя - по дефолту и должен null записываться, а там строку можно из пробелов записать. А так же низ лежащее... kantry 05:58:49 MRX, я понял, это тебе надо залезть в /user/info/edit.php и заменить блок с обновлением ank_name Колонка вроде на 32... А проверять кол-во вводимых символов, конечно надо. Вижу автор отмалчивается, возможно вопрос решён. MRX (30 Oct 2018 в 21:12) kantry, То есть в edit.php заменить это <? //----------имя------------// if (isset($_GET[\'set\']) && $_GET[\'set\']==\'name\'){ if (isset($_POST[\'ank_name\']) && preg_match(\'#^([A-zА-я -]*)$#ui\', $_POST[\'ank_name\'])) { $user[\'ank_name\']=$_POST[\'ank_name\']; mysql_query(\"UPDATE `user` SET `ank_name` = \'\".my_esc($user[\'ank_name\']).\"\' WHERE `id` = \'$user[id]\' LIMIT 1\"); } else $err[]=\'Неверный формат имени\'; } ?> На это <? if (isset($_GET[\'set\']) && $_GET[\'set\'] == \'name\') { if (isset($_POST[\'ank_name\']) && preg_match(\'#^([A-zА-я -]*)$#ui\', $_POST[\'ank_name\'])) { $user[\'ank_name\'] = trim($_POST[\'ank_name\']); if (!empty($user[\'ank_name\'])) {// Можно(нужно) strlen($user[\'ank_name\']) > 2 использовать, чтобы короткие имена не пихали mysql_query(\"UPDATE `user` SET `ank_name` = \'\".my_esc($user[\'ank_name\']).\"\' WHERE `id` = \'$user[id]\' LIMIT 1\"); } else { mysql_query(\'UPDATE `user` SET `ank_name` = NULL WHERE `id` = \' . $user[\'id\']); } } else { $err[]=\'Неверный формат имени\'; } } ?> и нельзя будет писать короткие имена? MRX (30 Oct 2018 в 23:19) Прост так и сделал), и имя все равно можно короткое) Учитель^ (31 Oct 2018 в 09:21) MRX, Понимаешь kantry устал, а когда человек устал он плохо думает. Немного усложнено... Можно проще - посчитать регулярным выражением Вот так - ([A-zА-я -]{3,20}) Где 3 это минимально допустимое количество символов А 20 максимальное. Вот так... <? //----------имя------------// if (isset($_GET[\'set\']) && $_GET[\'set\']==\'name\'){ if (isset($_POST[\'ank_name\']) && preg_match(\'#^([A-zА-я -]{3,20})$#ui\', $_POST[\'ank_name\'])) { $user[\'ank_name\']=$_POST[\'ank_name\']; mysql_query(\"UPDATE `user` SET `ank_name` = \'\".my_esc($user[\'ank_name\']).\"\' WHERE `id` = \'$user[id]\' LIMIT 1\"); } else { mysql_query(\'UPDATE `user` SET `ank_name` = NULL WHERE `id` = \' . $user[\'id\']); $err[]=\'Неверный формат имени\'; } } ?> Сибирский (31 Oct 2018 в 09:28) Учитель^, хочу поправить частую ошибку, указывая в регулярке диапазон A-z мы пропускаем символы ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz Думаю что это не тот набор, который нам нужен ^Учитель^ (31 Oct 2018 в 11:07) Сибирский, Совершенно точно. Чему мой ник живой пример. Благодарю:) Ну тогда вот так, с дефисом, на случай двойных имён. Извиняюсь за задержку. Курица SimptomFD опять забанила но в форуме. Ответить не чем, с ума сходит. <? //----------имя------------// if (isset($_GET[\'set\']) && $_GET[\'set\']==\'name\'){ if (isset($_POST[\'ank_name\']) && preg_match(\"#^([a-zа-яё-]{3,20})$#ui\", $_POST[\'ank_name\'])) { $user[\'ank_name\']=$_POST[\'ank_name\']; mysql_query(\"UPDATE `user` SET `ank_name` = \'\".my_esc($user[\'ank_name\']).\"\' WHERE `id` = \'$user[id]\' LIMIT 1\"); } else { mysql_query(\'UPDATE `user` SET `ank_name` = NULL WHERE `id` = \' . $user[\'id\']); $err[]=\'Неверный формат имени\'; } } ?> [i]Добавлено:[/i] Защита регулярку порезала. Вот... kantry (31 Oct 2018 в 12:46) MRX, я тебе закомментировал код который короткое имя не пропускает. if (!empty($user[\'ank_name\']) && strlen($user[\'ank_name\']) > 2) { // или 3 или сколько там разрешишь. [i]Добавлено:[/i] ^Учитель^, несколько раз про пробелы написал, похоже это не я устал:D MRX (31 Oct 2018 в 16:22) ^Учитель^, Спс, еще вопрос, как в вывод имени еще рядом добавить фамилию, в анкете еще есть фамилия, хотелось бы что бы она выводилась рядом с именем, таблица называется ank_surname ^Учитель^ (31 Oct 2018 в 19:15) MRX, Замени запрос к классе user файла class.user.php На этот... $ank = mysql_fetch_assoc(mysql_query(\" SELECT IF ( concat(ank_name, ank_surname) <> \'\', concat(ank_name, \' \', ank_surname), nick) AS nick, date_last, rating, browser FROM user WHERE id = $user \")); Выводиться имя и фамилия будут если оба поля заполнены Если хочешь что бы выводилось независимо от заполненности обоих полей Можешь задать приоритетность. Например. Замени это SELECT IF ( concat(ank_name, ank_surname) <> \'\', На это - по имени SELECT IF ( ank_name <> \'\', Либо - по фамилии SELECT IF ( ank_surname <> \'\', Если трудности - готовый файл sys/inc/classes/class.user.php [i]Добавлено:[/i] kantry, Я как бы тоже не машина:D Источник: http://www.dcms-social.ru/forum/13/34/62591/