Значение переменной через запятую
Подскажите пожалуйста.
Есть поле, в котором значение введено через запятую: Иванов, Сидоров, Петров и т. д. Данные передаются методом PОST обработчику PHP: $name = $_POST[name]; Соответственно переменная $name имеет значение: Иванов, Сидоров, Петров и т. д. Мне нужно через оператор if вывести данные если соблюдается условие: 1. Получен только Иванов - выводим данные; 2. Получен Иванов и др. - тоже выводим данные; 4. Не получен Иванов - не выводим данные; 5. Не получен Иванов, но получены другие - не выводим данные. Делал так: if ($name=="Иванов") { echo ' <p>Иванов</p> ';} Это работает, если в поле введено только одно имя Иванов. Если же ввести несколько значений через запятую: Иванов, Сидоров, Петров. Ничего не выводит... Задача, я так понимаю элементарная, но вот гуглю уже несколько часов и никак не могу решить проблему. В PHP не силен. Возможно как то через массив это все сделать. Вся проблема в получаемом значении через запятую... То есть по сути мой вопрос заключается в том: Как выбрать из строки (которая является значением переменной), в которой данные указаны через запятую одно значение и через оператор вывести данные в зависимости от того есть это значение в строке или нет. |
explode(',',$_POST['name']) вам может помочь
|
только про пробелы не забывайте
|
Цитата:
|
ksa, а как тут это поможет? Покажи пример.
|
Цитата:
1. Если фамилия иванов присутствует - выводим 2. Не присутствует - не выводим |
Спасибо - работает!
Никогда б не догадался сформулировать запрос гуглу "Поиск подстроки в строке" :thanks: |
Цитата:
Но судя по условиям ТСа, достаточно простого вхождения "Иванов" в полученую строку для вывода информации... На COS это выглядит так if %request.Data("name",1)["Иванов" { // какой-то там вывод } |
Цитата:
$name = 'Сидоров, Иванова'; if ($strpos($name, 'Иванов') !== false) { // упс.. } |
точняк. Тогда можно регекспами взять
хотя преобразовать в массив - универсальнее. |
Ну со strpos тоже есть вариант:
$name = 'Сидоров, Иванова'; if (strpos(' ' . $name . ',', ' ' . 'Иванов' . ',') { } |
danik.js Спасибо! Так компактнее!
Только у тебя ошибка не : $strpos а: strpos:victory: |
На мой взгляд самый понятный и юзабельный вариант:
<?php $name = 'Сидоров, Иванова'; $names = array_map('trim', explode(',', $name)); if (in_array('Иванов', $names)) { } |
danik.js,
этож из _POST. Еще там может быть лишний пробел, точка вместо запятой. Танцы с Капсом....... я за регулярку... :) |
В моем случае такого не будет ибо данне приходят из мультиселекта под chosen. Юзер только выбирает их.
|
Цитата:
|
Цитата:
|
Ну судя по всему он через скрытый <select multiple> и работает. Так откуда тогда у тебя запятые берутся? Это походу ты чета намудрил..
|
Да вродь не мудрил...
Берутся видать от сюда http://cdnjs.cloudflare.com/ajax/lib....jquery.min.js Ну его наф. там копаться)) |
.val() ты не вызываешь у себя в коде?
Как отсылаются данные на сервер? |
function send() { var i1 = $('#i1').val(); var i0 = $('#i0').val(); var i7 = $('#i7').val(); $.ajax({ type: "POST", url: "Step.php", data: "i1="+i1+"&i0="+i0+"&i7="+i7, success: function(html) { $("#spi").empty(); $("#spi").append(html); } }); } |
Ну ясно теперь :D
Это делается так: дается общий класс, допустим .i и пишем: .. data: $('.i').serialize() .. Имена даем со скобочкой. То есть было names, стало names[] В php все также, только теперь в $_POST['names'] у нас будет уже готовый массив. Итог - код сократили, как js так и php а работает все также, даже лучше! |
Цитата:
|
Ок. Спасибо!
|
Цитата:
|
Да я щас уже над другим голову ломаю (эту проблему решил благодаря вам - форумчанинам)... Мне бы нет, что б готовые плагины использовать, так изобретаю велосипед как всегда, да еще и корявый...
Закончу мож. кину потом на растерзание и засвистывание всем)) А за помощь - спасибо! Съэкономил кучу времени:thanks: |
Как вот блин замутить, что бы размер imputa менялся динамически, в зависимости от количества этих импутов в родительском блоке.
А вот их количество как раз определяет мультиселект о котором давеча шла речь... Я с PHP вывожу импут, который соответствует пункту мультиселекта. То есть задаешь максимальную ширину этого импута и если он один то отображается по центру и с большей шириной, если их несколько то пропорционально размещаются в родительском блоке :blink: |
Ты описал поведение таблицы.
<!DOCTYPE html> <style> .row{ display: table; width: 100%; table-layout: fixed; } .cell{ display: table-cell; padding: 2px; } input{ box-sizing: border-box; width: 100%; </style> <div class="row" id="row"> <div class="cell"> <input> </div> <div class="cell"> <input> </div> </div> <button onclick="row.appendChild(row.firstElementChild.cloneNode(true))">Добавить</button> |
Это не совсем то, что мне нужно.
Вот как это выглядит http://ddssdd.w.pw/test.html Из выпадающего списка можно выбрать 10 наименований товара. При выборе любого пункта мультиселекта и переходе к следующему этапу PHP скрипт генерит для каждого из них отдельный инпут в который будет вводится количество по каждому пункту. При чем юзер может выбрать как один так и все десять пунктов. Задача в том, что бы отображать эти импуты пропорционально размеру блока родителя. То есть если юзер выбрал один пункт, то на следующем этапе он получает один импут большого размера (отцентрованный в родителе), выбрал десять - получил десять импутов одинаковой ширины и длины симметрично отцентрованных... и т. д.:blink: |
Цитата:
|
Ок. Ща.
|
Или тебе просто нужно чтобы инпуты себя вели как обычные div'ы, Ну width: 100%, box-sizing: border-box в помщь
|
Вложений: 3
В прикрепленных файлах.
Там вопрос весь в центровке и обтекании если их много. |
Ну когда в одну колонку - все понятно.
Когда инпутов много, на PHP бъешь их на пары, через array_chunk(). Кроме того, добавляешь особый класс строкам, чтобы назначить особые стили. |
Ниче не понял...
Я думаю, что нужно написать скрипт, который будет отслеживать количество импутов и в зависимости от их количества назначать ипутам соответствующие классы (размер, позиционирование и т д.). Так как программист с меня мягко говоря херовый - вот сижу и мудрю... Ты это же имел в виду?? Т.е. с помощью массива отслеживать выбранные пункты и назначать выводимым импутам соответствующие классы? |
Чет про array_chunk не в тему наверно. У тебя же не массив, а просто число - count, так же?
Вот пример на js: <style> div{ text-align: center; } input.wide{ width: 250px; } input.narrow{ width: 100px; } </style> <script> var count = +prompt('Число инпутов', 5); var cols = 1; var className = 'wide'; if (count > 5) { className = 'narrow'; cols = 2; } var rows = Math.ceil(count/cols); for (var i = 0; i < rows; i++) { document.write('<div>'); for (var j = 0; j < cols && (i + 1) * (j + 1) <= count; j++) { document.write('<input class="' + className + '" />'); } document.write('</div>'); } </script> |
Да, все классно! Но у меня каждый импут с уникальным id, по которым далее будет работать программа. У тебя JS генерит импуты, а мне нужно, что бы это делал PHP. Вот как в PHP посчитать ипуты без массива, чето не могу понять...
|
Цитата:
|
И имеешь в виду вставит JS в PHP а в сам JS вместо document.write - echo?
|
Имею ввиду переписать код на php. убрать var, добавить баксы, заменить Math.ceil
|
Часовой пояс GMT +3, время: 11:08. |