Значение переменной через запятую
Подскажите пожалуйста.
Есть поле, в котором значение введено через запятую: Иванов, Сидоров, Петров и т. д. Данные передаются методом 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, время: 16:47. |