[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: функция обработки данных через post
m4a1fox
Всем доброго дня или уже вечера. Собственно больше консультация, скажите, есть вот такая функция

function post($post, $nul) {
$value = !empty($post)?$post:$nul;
$value = htmlspecialchars($value);
return $value;
}

Применяю ее вот так

if(isset($_POST['send'])) {
$name = post($_POST['name'], "Гость");
$pass = post($_POST['pass'], NULL);
}

Собственно возможно ли создать функцию так, что бы она обрабатывала все значения подряд. Что я хочу сказать, то есть, отправлять в post и в функцию массив данных, а в функции циклом их обрабатывать.... или это бред?



Спустя 4 минуты, 34 секунды (6.07.2011 - 18:00) m4a1fox написал(а):
Что то типо такого

function post ($send, $post = array(), $nul)
{
if(isset($send)
for($i=0; $i<count($post); $i++)
{
$value = !empty($post[$i])?$post[$i]:nul
}
}

return $value;
}

Спустя 32 секунды (6.07.2011 - 18:00) bulgakov написал(а):
Гм... может я чего-то не понял что вам нужно, $_POST[] это и есть массив сколько бы ни было там значений можете их легко все обработать тем же foreach()

Спустя 2 минуты, 17 секунд (6.07.2011 - 18:02) Игорь_Vasinsky написал(а):
тебе лучше функцию в цикле, чем цикл в функции, при последнем - ты же получишь массив на выводе, а при первом - набор переменных... по моиму - оптимально.

Спустя 28 секунд (6.07.2011 - 18:03) m4a1fox написал(а):
Игорь_Vasinsky
А по конкретнее...?

Спустя 2 минуты, 7 секунд (6.07.2011 - 18:05) neadekvat написал(а):
Более того, бред и происходящее сейчас.

С каких это пор все данные, приходящие через пост надо обрабатывать функцией htmlspecialchars? Для нее лучше использовать свою. На ирбисе представлена неплохая (примерно так):
/**
*
@param string|array
*/

function html_chars($data)
{
if (is_string($data))
return htmlspecialchars($data);
else
return
array_map('html_chars', $data);
}

Соответственно, те данные, которые надо обработать именно htmlspecialchars, отправляются в html_chars, туда можно отправить и весь _POST:
$clear_post = html_chars($_POST);

Но mysql_real... все-таки чаще используется для входящих данных.

P.S. все-таки null, а не nul

Спустя 1 минута (6.07.2011 - 18:06) m4a1fox написал(а):
neadekvat
Это просто премер! Я так проверил работу функции зря придераетесь!

Спустя 24 секунды (6.07.2011 - 18:06) Игорь_Vasinsky написал(а):
не проверял...смотриться бредово, но

while($_POST)
{
//твоя функция
// но вместо $value - перебор ключей POST

}


:blink: :blink: :blink: как то так :ph34r:

Спустя 1 минута, 22 секунды (6.07.2011 - 18:08) m4a1fox написал(а):
Игорь_Vasinsky
Сейчас буду пробывать....
но вот этот вариант не получился

function post($send, $post=array(), $nul) {
if(isset($send)){
for($i=0; $i<count($post); $i++) {
$value = !empty($post[$i])?$post[$i]:$nul;
}
}

return $value;
}


При применении его вот так

$name = post($_POST['send'], $_POST['name'], "Гость");
$pass = post($_POST['send'], $_POST['pass'], NULL);

Спустя 1 минута, 29 секунд (6.07.2011 - 18:09) m4a1fox написал(а):
Мда... не правильно я его применял! У меня массив не получился!

Спустя 1 минута, 28 секунд (6.07.2011 - 18:11) Игорь_Vasinsky написал(а):
если я нен гоню - то значение аргумента по умолчанию использують если аргуменгт - крайний правый...

потом - первый аргумент не нужен, не проще один раз проверить его наличие и запустить функцию...и всё остальное...

Спустя 1 минута, 48 секунд (6.07.2011 - 18:12) neadekvat написал(а):
Цитата (m4a1fox @ 6.07.2011 - 19:06)
Это просто премер! Я так проверил работу функции зря придераетесь!

То есть все остальное в моем посте ты просто проигнорил? Как обычно.

Цитата (Игорь_Vasinsky @ 6.07.2011 - 19:06)
смотриться бредово

Сегодня все такие самокритичные, фантастика.

В общем, я, видимо, не догнал, что хочет ТС. Может, вот это?
/**
*
@param string|array
*/

function html_chars($data)
{
if (is_string($data))
return htmlspecialchars($data);
else
return
array_map('html_chars', $data);
}

$isset_indexes = array('login', 'password');

$i = 0;
foreach($_POST as $name => $val)
{
if (isset($isset_indexes[$$name])) {
++$i;
$$name = html_chars($val);
}
}


if (count($isset_indexes) == $i)
echo 'Все элементы на месте';
else
echo 'Чего-то не хватает';

Спустя 49 секунд (6.07.2011 - 18:13) DySprozin написал(а):
m4a1fox
так?

<?php
$mas = array('name' => 'Гость', 'pass' => NULL, 'foo' => 'bar')
...

foreach ($mas as $key => $value) {
$$key = post($_POST[$key], $value);
}


вот тому посту, который ниже:
Свернутый текст
ахах =)) в кои-то веки неадекват не раскритиковал меня :P

Спустя 2 минуты, 33 секунды (6.07.2011 - 18:16) neadekvat написал(а):
DySprozin, хорошее решение *THUMB_UP*

Спустя 1 минута, 10 секунд (6.07.2011 - 18:17) Игорь_Vasinsky написал(а):
neadekvat
это я тебя в теме спалил biggrin.gif , вообщем да - он хочет так, но сам придти к правильной схеме

твой пост - возращает массив, а DySprozin - как бы дополняя - показывает как его превратить в кучкупеременных

Спустя 1 минута, 42 секунды (6.07.2011 - 18:19) m4a1fox написал(а):
Вот так

function post($send, $post=array(), $nul) {
if(isset($send)){
for($i=0; $i<count($post); $i++) {
$value = !empty($post[$i])?$post[$i]:$nul;
}
}

return $value;
}


применяю так

$name = post($_POST['send'], array($_POST), "Гость");


А вывод так

$name['name] и $name['pass']

Спустя 1 минута, 56 секунд (6.07.2011 - 18:21) m4a1fox написал(а):
господа, будут дополнения, только не по поводу проверки mysql_reael_escape_string и так далее, это я сейчас сделаю, а именно по функции?

Спустя 10 секунд (6.07.2011 - 18:21) ИНСИ написал(а):
m4a1fox раньше сам бредил всякой хренью, похожей на твою. И сделал 2 функции:

1. Тут засоряются $_POST (их вообще лучше не изменять, до того как они используются)
function varFilter($value) {
if(is_array($value)) {
$value = array_map('varFilter', $value);
} else {
$value = trim($value);
if(get_magic_quotes_gpc()) $value = stripslashes($value);
}
return mysql_real_escape_string($value);
}

$_POST = varFilter($_POST);


2. А тут гоняю все циклом и создаю переменные (бурется ключи $_POST):
for($i = 0, $c = sizeof($_POST); $i < $c; $i++) { 
$value = trim($_POST[$field[$i]);
if(get_magic_quotes_gpc()) $value = stripslashes($value);
$$field[$i] = mysql_real_escape_string($value]
}


Мой тебе совет: Выкинь эту идею из головы и обрабатывай данные там, где ты их используешь!

Спустя 3 минуты, 56 секунд (6.07.2011 - 18:25) m4a1fox написал(а):
INSIDIOUS
Думаете.... Но веть так реально удобнее, не надо сто раз переписывать одно и тоже, скорее вы конечно правы, все таки опыт, но было интересно попробывать. Спасибо за совет! Наверно так и буду делать?!

Спустя 59 секунд (6.07.2011 - 18:26) neadekvat написал(а):
Игорь_Vasinsky, мой код тоже вводит в адресное пространство кучку перемиенных, посмотри внимательно на цикл.

m4a1fox
if(isset($send))
Зачем, если $send является аргументом функции? Она не может не существовать.

for($i=0;
Если ты не используешь $i в цикле, то для массива используй foreach.

Плюс у тебя для всех значений получается одно и то же значение по умолчанию. Смотри, что тебе в теме пишут. Или мы больше этого делать не будем, если ты вообще никаких идей из представленного тебе кода не выносишь.

INSIDIOUS, stripslashes дважды будет применено. А вообще лучше магические кавычки отключать на уровне сервера (.htaccess) и не думать о них в коде.

Спустя 1 минута, 3 секунды (6.07.2011 - 18:27) neadekvat написал(а):
Цитата (m4a1fox @ 6.07.2011 - 19:25)
Думаете.... Но веть так реально удобнее, не надо сто раз переписывать одно и тоже, скорее вы конечно правы, все таки опыт, но было интересно попробывать. Спасибо за совет! Наверно так и буду делать?!

Смотри, DySprozin, он и правда нас игнорит. Ну, это его выбор. Успехов, чо.

Спустя 1 минута, 43 секунды (6.07.2011 - 18:28) Игорь_Vasinsky написал(а):
neadekvat
точно. вижу

Цитата
if(isset($send))
Зачем, если $send является аргументом функции? Она не может не существовать.


если аргумента нет - то будет ошибка, по этому я и говорю - один раз проверил наличие - и работай, а как аргумент - неиспользовать




Спустя 2 минуты, 52 секунды (6.07.2011 - 18:31) ИНСИ написал(а):
Цитата
Но веть так реально удобнее, не надо сто раз переписывать одно и тоже

Не всегда удобство оправдано smile.gif

Цитата
INSIDIOUS, stripslashes дважды будет применено

Не совсем понял, где?

Цитата
А вообще лучше магические кавычки отключать на уровне сервера (.htaccess) и не думать о них в коде.

Лучше когда код сам уже все предусматривает. Не всегда хостеры дают права менять настройки сервера.

Спустя 3 минуты (6.07.2011 - 18:34) neadekvat написал(а):
Цитата (INSIDIOUS @ 6.07.2011 - 19:31)
Не совсем понял, где?

Сначала в varFilter, а потом в цикле.

Цитата (INSIDIOUS @ 6.07.2011 - 19:31)
Лучше когда код сам уже все предусматривает. Не всегда хостеры дают права менять настройки сервера.

Не лучше. Это хлам, который на фиг не нужен и скоро будет удален.
А если хостер не позволяет использовать .htaccess, то это либо плохой хостер, которого надо менять, либо это бесплатный хостинг, и тут нам тогда просто не о чем говорить.

Спустя 12 минут, 11 секунд (6.07.2011 - 18:47) m4a1fox написал(а):

И все же не понимаю, чем моя функция вам не понравилась?neadekvat

Спустя 1 минута, 33 секунды (6.07.2011 - 18:48) Игорь_Vasinsky написал(а):
вроде ни чем - он просто сказал-что это дежавю....

Спустя 1 минута, 13 секунд (6.07.2011 - 18:49) m4a1fox написал(а):
Игорь_Vasinsky
А! Ну дык.... было интересно это самому сделать! Понимаете?

Спустя 38 секунд (6.07.2011 - 18:50) neadekvat написал(а):
m4a1fox
http://phpforum.ru/index.php?showtopic=0&v...dpost&p=1255010
Середина поста - вся тебе посвящена.

Спустя 3 минуты, 5 секунд (6.07.2011 - 18:53) m4a1fox написал(а):
neadekvat
Я это читал! Спасибо! Буду знать!

Спустя 17 часов, 15 минут, 3 секунды (7.07.2011 - 12:08) m4a1fox написал(а):
Продолжу тему. Доброе утро! Спасибо neadekvat сделал вот так

function post($send, $post=array(), $nul) {
if(isset($send)){
foreach ($post as $key => $value) {
if(!empty($value)) {
$string = $value;}
else {
$string .= $key;}
}

return $string;
}
}


Применяю ее вот так

$name = post($_POST['send'], array($_POST), "Гость");

Господа, вопрос в следующем, как подправить функцию, что бы она мне показывала еще и пустые поля? Спасибо!

Спустя 24 минуты, 24 секунды (7.07.2011 - 12:32) tatti написал(а):
m4a1fox
нафига то, что нафиг не нужно? :blink:

function post($nul) {
foreach ($_POST as $key => $val)
{
if(!empty($val)) $str.= $val;
else $str.= $key;
}
return $str;
}

if(isset($_POST['send']))
{
$name = post("Гость");
echo $name;
}

Спустя 5 минут, 19 секунд (7.07.2011 - 12:38) m4a1fox написал(а):
tatti
А так не получается?! sad.gif

Спустя 1 минута, 16 секунд (7.07.2011 - 12:39) tatti написал(а):
m4a1fox
а что должно получатся? лишние данные?

Спустя 3 минуты, 1 секунда (7.07.2011 - 12:42) m4a1fox написал(а):
tatti
Я применил вашу функцию прямо на странице, так как вы ее дали, работает! Спасибо! Буду дальше думать.... почему нельзя совместить это с моей функцией.... буду стараться, спасибо за направление?!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.