[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос о доступе к значениям в массиве $_POST
l@pteff
всем добрый вечер, в php скрипт аяксом передаются значения:

$.post("../php/script.php", {username:name, good:obj}

если пройтись циклом по массиву $_POST

foreach ($_POST as $key=>$val)

то в нём обрабатывается пара good:obj, а как получить доступ к username:name? заранее благодарю



Спустя 2 минуты, 19 секунд (25.05.2011 - 19:45) Lenarfate написал(а):
дык видимо у тебя их и нет в ПОСТе

Спустя 4 минуты, 40 секунд (25.05.2011 - 19:49) l@pteff написал(а):
но print_r($_POST) выводит
Цитата

[username] =>name[good] => obj

Спустя 1 час, 8 минут, 54 секунды (25.05.2011 - 20:58) l@pteff написал(а):
вспомнил, это можно сделать так:

foreach ($_POST as $key=>$val) {
$a++; if ($a>1) break;
echo $key:$val;
}

но как это применить в таком коде:

foreach ($_POST as $key=>$val)

$query1 = mysql_query("select id_good from goods where type_good like '$val'");
$query11=mysql_query("select id_user from users where login like '$val'");

$number=mysql_num_rows($query1);
$number1=mysql_num_rows($query11);

if ($number==0) {exit('Товара нет на складе');}
if ($number1==0) {exit('Нет такого пользователя');}

Выводит Нет такого пользователя

если поменять местами передаваемые параметры:

$.post("../php/script.php", {good:obj, username:name}

выводится Товара нет на складе

Спустя 1 час, 10 минут, 33 секунды (25.05.2011 - 22:09) l@pteff написал(а):
т.е. получается что в каждом из запросов php-скрипта выше обрабатывается лишь значение которое было передано из аякса последним, т.о. переменная $val в обоих запросах одинаковая, отсюда по-любому срабатывает одно из условий невыполнения скрипта. Если кто знает как задействовать здесь оба передаваемых параметра, подскажите плиз

Спустя 10 часов, 22 минуты, 33 секунды (26.05.2011 - 08:31) linker написал(а):
Если $_POST содержит
[username] =>name
[good] => obj
, то код
foreach($_POST as $key=>$val)
{
echo $key . ' = ' . $val;
}
должен все их вывести. Не понимаю в чём здесь проблема.

Спустя 2 часа, 16 минут, 1 секунда (26.05.2011 - 10:47) pavlik написал(а):
Цитата (l@pteff @ 25.05.2011 - 17:58)
foreach ($_POST as $key=>$val)

$query1 = mysql_query("select id_good from goods where type_good like '$val'");
$query11=mysql_query("select id_user from users where login like '$val'");

$number=mysql_num_rows($query1);
$number1=mysql_num_rows($query11);

if ($number==0) {exit('Товара нет на складе');}
if ($number1==0) {exit('Нет такого пользователя');}


Исходя из этого, действительно foreach пробежался по всем елементам и установил указатель на последнем элементе массива.

И только потом начал выполняться остальной код

Видимо автор забыл поставить фигурные скобки просто.
Должно выглядеть так:


foreach ($_POST as $key=>$val)
{
$query1 = mysql_query("select id_good from goods where type_good like '$val'");
$query11=mysql_query("select id_user from users where login like '$val'");

$number=mysql_num_rows($query1);
$number1=mysql_num_rows($query11);

if ($number==0) {exit('Товара нет на складе');}
if ($number1==0) {exit('Нет такого пользователя');}
}



Спустя (26.05.2011 - 10:47) sergeiss написал(а):
Цитата (l@pteff @ 25.05.2011 - 21:58)
foreach ($_POST as $key=>$val)

$query1 = mysql_query("select id_good from goods where type_good like '$val'");
$query11=mysql_query("select id_user from users where login like '$val'");

$number=mysql_num_rows($query1);
$number1=mysql_num_rows($query11);

if ($number==0) {exit('Товара нет на складе');}
if ($number1==0) {exit('Нет такого пользователя');}

В этом коде у тебя в цикл входит только первая строка с данными, идущая после объявления цикла smile.gif Все остальные строки, начиная с $query11=... выполняются уже по окончании цикла.
Ты или в фигурные скобки заключи тело цикла, или определись, что же ты хочешь получить.

Спустя 10 часов, 28 минут, 44 секунды (26.05.2011 - 21:16) l@pteff написал(а):
я понимаю что нужны фигурные скобки но не соображу где их ставить.
Получается вот что: если сделать хотя бы так:

foreach ($_POST as $key=>$val)
{
$query1 = mysql_query("select id_good from goods where type_good like '$val'");
$number=mysql_num_rows($query1);
}
if ($number==0) {exit('Товара нет на складе');}

foreach ($_POST as $key=>$val) {
$query11=mysql_query("select id_user from users where login like '$val'");
$number1=mysql_num_rows($query11);
}
if ($number1==0) {exit('Нет такого пользователя');}

передав данные в таком порядке:

{good:obj, username:name}

Выводится: Товара нет на складе

Если передать в таком порядке:

{username:name, good:obj}

Вывод: Нет такого пользователя

почему одновременно не находятся в базе и пользователи и товары?

Спустя 23 минуты, 56 секунд (26.05.2011 - 21:40) pavlik написал(а):
Цитата (l@pteff @ 26.05.2011 - 18:16)
почему одновременно не находятся в базе и пользователи и товары?



у тебя массив $_POST содержит 2 элемента usename и good

Кодгда ты этот массив крутишь циклом foreach:
в $val попадает 1 значение username
далее происходит запрос к бд

$query1 = mysql_query("select id_good from goods where type_good like '$val'");


и получение результата


$number=mysql_num_rows($query1);


потом ты делаешь проверку

if ($number==0) {exit('Товара нет на складе');}


Поскольку в $val содержится "name", а не "obj" естественно условие выполнится и произойдет твоя остановка выполнения скрипта с выводом сообщения "Товара нет на складе";




Спустя 12 минут, 53 секунды (26.05.2011 - 21:53) l@pteff написал(а):
Цитата

Кодгда ты этот массив крутишь циклом foreach:
в $val попадает 1 значение username

а как сделать чтоб попадали все, а не переданное последним?

Спустя 8 минут, 20 секунд (26.05.2011 - 22:01) pavlik написал(а):
я не понимаю, а зачем использовать foreach?




$query1 = mysql_query("select id_good from goods where type_good like '".$_POST[good]."'");
$query11=mysql_query("select id_user from users where login like '".$_POST[username]."'");
$number=mysql_num_rows($query1);
$number1=mysql_num_rows($query11);

$errors = array();

if ($number==0) {$errors[] = 'Товара нет на складе');}
if ($number1==0) {$errors[] = 'Нет такого пользователя';}

if(count($errors))
{
$message = join(' и ', $errors); // Делаем сообщение об обнаруженных ошибках если оба неверны то будет "Товара нет на складе и Нет такого пользователя"
exit($massage);
}


Вот как-то так может?

Спустя 7 минут, 44 секунды (26.05.2011 - 22:09) l@pteff написал(а):
то что надо! спасибо за помощь
Быстрый ответ:

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