|
|
|
| Здравствуйте!У меня такая проблема-у меня на странице несколько десятков отдельных форм.Пользователь вволит данные в одну форму-->ОТПРАВИТЬ, потом другую и тд.
Как определить, есть ли вообще глобальные переменные(т.е. нажал ли пользователь кнопку), передались ли вообще они?Мне это нужно для того, чтобы сначала поставить условие:если глобальных перееменных нет вообще, то выводить формы, а если есть, то выполнять такой-то код.подскажите, пожалуйста, как это сделать! | |
|
|
|
|
|
|
|
для: Эдик12
(27.12.2009 в 13:20)
| |
if(isset($_POST['test'])
{
//Код, если форма отправлена.
}
else if(!isset($_POST['test']))
{
//Код, если форма не отправлена.
}
|
Здесь $_POST['test'] - это hidden поле с названием test, которое нужно поместить в форму, или использовать одно из обязательных полей формы. Вместо $_POST['test'] можно указать $_GET['test'], если метод, собственно GET. | |
|
|
|
|
|
|
|
для: Faatt
(27.12.2009 в 13:47)
| | >
>if(isset($_POST['test'])
>{
> //Код, если форма отправлена.
>}
>else if(!isset($_POST['test']))
>{
> //Код, если форма не отправлена.
>}
>
|
>Здесь $_POST['test'] - это hidden поле с названием test, которое нужно поместить в форму, или использовать одно из обязательных полей формы. Вместо $_POST['test'] можно указать $_GET['test'], если метод, собственно GET.>
Так в ьом то и дело, что я не знаю, в какую форму пользователь ввел данные, у меня строчки прайса создаются с помощью цикла, и там имена для форм заполняются автоматически, те у меня есть переменная $p, которая при каждой новой строчке увеличивается на 1 и присваевается как имя для каждой новой формы, те в первой строчке name=a$p,во второй уже $p на 1 больше и тд.Пользователь же вводит данные в любую форму, а я не знаю в какую, и сначала мне надо проверить, есть ли какие-то глобальные переменные вообще, а если есть, то какие именно?Вот в чм вопрос | |
|
|
|
|
|
|
|
для: Эдик12
(27.12.2009 в 13:20)
| | >у меня на странице несколько десятков отдельных форм.
Зачем так много? | |
|
|
|
|
|
|
|
для: sim5
(27.12.2009 в 14:29)
| | Ну у меня типа прайса, где напротив каждого товара автоматически создается форма для заролнения количеством товара. | |
|
|
|
|
|
|
|
для: Эдик12
(27.12.2009 в 16:31)
| | Для Faftt:
Так в том то и дело, что я не знаю, в какую форму пользователь ввел данные, у меня строчки прайса создаются с помощью цикла, и там имена для форм заполняются автоматически, те у меня есть переменная $p, которая при каждой новой строчке увеличивается на 1 и присваевается как имя для каждой новой формы, те в первой строчке name=a$p,во второй уже $p на 1 больше и тд.Пользователь же вводит данные в любую форму, а я не знаю в какую, и сначала мне надо проверить, есть ли какие-то глобальные переменные вообще, а если есть, то какие именно?Вот в чм вопрос | |
|
|
|
|
|
|
|
для: Эдик12
(27.12.2009 в 16:38)
| | Эм... А не проще сделать одну форму, а рядом с каждой позицией товара поставить input с именем, равным id товара? Тогда в обработчике циклом проходите по $_POST'у, ища ненулевые элементы, и бёрете для каждого пару "ключ-значение". И всё, дальше дело техники. | |
|
|
|
|
|
|
|
для: Киналь
(27.12.2009 в 17:04)
| | Ну, во-первых я id товара не знаю, тк прайс строится на основе файла csv.
А нсачет одной формы-я изначально так и сделал, но, по-моему, у меня получилось так, что глобальная переменная для первого type является общей для других форм, и наоборот.
Т.е. я сделал так:создал таблицу с 3 сточками, получается скрипт вывел для них формы с именами 1,2 и 3(<input type=text name=1), потом в начале файла поcтавил условие if(!isset($_POST['1'])){ отображение прайса}else{echo "Hello";}и сначала я заполнил первую форму-->Hello, потом вторую и третью-->тож самое Hello, хотя должно было ничего не произойти, тк там уже глобальные переменные передавались $_POST['2'].По-моему, если одна форма, то и одна общая гл. переменная | |
|
|
|
|
|
|
|
для: Эдик12
(27.12.2009 в 17:34)
| | Держать товары в CSV файле не очень удобно, но в то же время вам ни кто не запрещает добавить уникальные номера товарам в этот файл.
Сперва нужно организовать более гибкую форму содеражания данных о товаре. | |
|
|
|
|
|
|
|
для: sim5
(27.12.2009 в 18:08)
| | Не ну прайс товаров будет сохраняться из 1С в формате csv, где будет и код товаров и все прочее | |
|
|
|
|
|
|
|
для: Эдик12
(27.12.2009 в 18:19)
| | Ну речь то в вашем вопросе не о прайсе, а о выводе товаров на страницу. А для такого вывода писать под каждый товар форму, это крайне не оправдано и не удобно при получении о обработки данных.
Так в чем у вас хранятся товары? | |
|
|
|
|
|
|
|
для: sim5
(27.12.2009 в 18:25)
| | Товары хранятся в 1С бухгалтерии, оттуда они сохраняются
как csv файл.Просто удобно-как товары, цены, наименования,
описания,id показаны в 1С и в csv,так они и представлены на
сайте.Короче, вот мой скрипт, который из файла берет данные
и строит таблицу, но с отдельной формой для ввода кол-ва
товаров для каждого товара
<html>
<body>
<?
$z=0;
$x=0;
$c=0;
$csv="test.csv";
$open=fopen($csv,"r");
$file=file($csv);
echo "<table border=1>";
foreach($file as $string)
{
echo "<tr>";
$elements=explode(";",$string);
for($p=0;$p<count($elements);$p++)
{
echo "<td bgcolor=lightblue>$elements[$p]</td>";
}
if($x>=1)
{ $z++;echo "<td bgcolor=lightblue><form method=post action=index.php><input type=text size=3 name=a$z><input type=submit value=Добавить в корзину></form></td>";$c++;}
echo "</tr>";
$x++;
}
echo "</table>";
fclose($open);
echo "<a href=korzina.php>В корзину";
?>
</body>
</html>]
|
А вопрос общий в том, как сделать так, чтбы введя в несколько форм количество товаров, можно было кнопкой "сформировать заказ" эти заказы обработать, и вывести отдельно в таблице только те товары, кол-во которых пользователь указал.
В принципе, я подумал, что напротив каждой формы еще и сделать кнопку-в корзину, тем самым поочередно записывая нужный товар и его кол-во в файл а потом просто вывести его, но фопрос:как понять, передались ли вообще глобальные переменные из форм, а если да, то какая именно(для какой формы).В принципе, достаточно просто узнать, есть лии вообще глобальные переменные, а дальше я знаю?
Если есть вариант, как можно сделать это проще и(или) без глобальных переменных, то подскажите пожалуйста | |
|
|
|
|
|
|
|
для: Эдик12
(27.12.2009 в 19:10)
| | 1. Не создавайте из своего кода "портянки", не допускайте горизонтального скролла. Такой код и текст не удобно читать, и возможно, что по этой только причине вам никто не ответит.
2. Для работы с CSV-файлами уже существует функция fgetcsv.
3. Вам уже сказано - забыть о куче форм на странице, достаточно одной формы.
Вам ведь уже ответили выше, как это должно работать, вернее как можно организовать вывод и прием данных. Допустим 1С, но и в этом случае в базе ее каждый товар должен иметь уникальный идентификатор, вот на этот идентификатор и стоить обратить внимание в первую очередь, а не зацикливаться на глобальных переменных (о которых, кстати, не мешало бы почитать).
Прежде чем организовать вывод товаров на страницу, вы должны знать, чем торгует магазин. Если вы продаете Лексусы, то с вероятностью 99.999999% можно сказать, что на странице товаров выберут один Лексус. Но если вы торгуете пряниками и конфетами, то с такой же долей вероятности на странице могут выбирать по несколько упаковок пряников или конфет.
Это значит, что в этих двух случаях представление товаров в форме на странице будет разным. Объеденять их будет только одно - вы получите массив, который будет содержать выбранные поля формы, которые в свою очередь будут содержать уникальные идентификаторы товаров. И этот массив будет находиться в суперглобальной переменной $_POST или $_GET, в зависимости от метода передачи формы.
Если речь о Лексусах, то форме достаточно содержать чекбоксы, по одному на каждый товар, атрибут value которых будет равен ID товару. Имена всех чекбоксов одинаковы, с указанием на массив, например, goods[].
Если речь о пряниках, то это уже будут текстовые поля, атрибут value которых будет принимать значения количества выбранных покупателем товаров, а имена полей должны содержать ID товаров как ключи массива, например, goods[124], goods[23], goods[111] и т.п..
На стороне сервера нужно принять массив $_POST['goods'] (или $_GET['goods']) и обработать его для дальнейшего использования. | |
|
|
|
|
|
|
|
для: sim5
(28.12.2009 в 05:47)
| | Как я понял, сначала в массив надо записать все id товаров, а потом при name=goods[0]-id 1-ого товара, name=goods[1]-id второго товара?Или при самом создании полей заносить поочередно в массив id товаров? | |
|
|
|
|
|
|
|
для: Эдик12
(28.12.2009 в 13:58)
| |
<?
$array = array(12=>4,125=>8,17=>9);
print_r($array)
?>
|
Что видим? | |
|
|
|
|
|
|
|
для: sim5
(28.12.2009 в 14:30)
| | А, ну все, разобрался)))СПС большое
Вот еще вопрос, как установить так, чтобы в текстовые поля на моем прайсе можно было вводить только целые положительные числа, а другие знаки он бы просто игнорировал или выдавал какое-нить собщение?? | |
|
|
|
|
|
|
|
для: Эдик12
(28.12.2009 в 16:11)
| | Для клиента, это проверка ввода на JS. Но не зависимо от этой проверки, все равно проверять на сервере, для этого достаточно функции intval().
Читать мануал надо, там много инструментария. | |
|
|
|
|
|
|
|
для: sim5
(28.12.2009 в 16:19)
| | Так а если ввели не число, а текст или отрицательное число, либо 1,25-это ж несеръезно, значит, решили пошутить, а нам этого не надо? | |
|
|
|
|
|
|
|
для: Эдик12
(28.12.2009 в 16:34)
| | А вы хотя бы попробали приметь intval к тексту и посмотреть, что получится? | |
|
|
|
|
|
|
|
для: sim5
(28.12.2009 в 16:37)
| | Нет.А что получится?
А как быть со знаком? | |
|
|
|
|
|
|
|
для: Эдик12
(28.12.2009 в 16:42)
| | Так вместо того, чтобы спрашивать, что получится - пробуйте! Здесь форум, а не служба 09. | |
|
|
|
|
|
|
|
для: sim5
(28.12.2009 в 16:44)
| | Ну я думаю так:
if(intval($val)!=NULL & intval($val)>0 & intval($val)=$val)
| ?
Выдает ошибку(((( | |
|
|
|
|
|
|
|
для: Эдик12
(28.12.2009 в 16:54)
| | intval - получает целочисленное значение переменной.
Что тут может быить не понятно?
if(intval($val)) это тоже самое, что и if(intval($val)!=0).
А это что за зверь: intval($val)=$val ?
Если вам необходимо проверять является ли число целым или числом с плавающей запятой, то можно воспользоваться для этого существующими в РНР функциями. intval же не даст пропустить дробные числа, строку.
Я же вам сказал - читайте мануал. | |
|
|
|
|
|
|
|
для: sim5
(28.12.2009 в 17:03)
| | А,все, этот код подходит
if($val!=NULL & $val>0 & intval($val)==$val)
| )))))
Спасибо еще раз!!!!
Только когда я в одно поле ввожу текст, в другое нормальные цифрф, то отображается с цифрами товар, но на непонятном языке?Блин, в чем причина?не одно, так другое? | |
|
|
|
|
|
|
|
для: Эдик12
(28.12.2009 в 17:06)
| | intval($val)==$val - вот это что за хрень? Что она вам дает?
Причина в кодировке.
Как вы беретесь за проекты, собственно практически ничего не зная? | |
|
|
|
|
|
|
|
для: sim5
(28.12.2009 в 17:19)
| | Так это не проект, это способ чему-нибудь научиться.Просто я хочу научиться на примерах, те перебирать задания, и в процессе узнавать все больше и болльше.
intval($val)==$val-это как бы целочисленное значение переменной сравнивается с самой переменной, если они совпадают, значит $val не дробное и можно дальше вести код
Так а что с кодировкой не так?У меня теперь при введении любых знаков в фоому отображаются эти значки | |
|
|
|
|
|
|
|
для: Эдик12
(28.12.2009 в 17:26)
| | Кода я туда ввожу в поля цифры и нажимаю "сформировать заказ" то попадаю на страницу, где выведены товары, кол-во которых я вводил.И вот, если я ввожу цифры, то товар отображается русскими буквами.Как только я ввожу в поле буквы(чтобы проверить, что скрипт проигнорирует буквы)-все норм,игнорирует, но после этого когда я ввожу цифры(кол-во товара), то выбранные товары отображаются некорректно(непонятные значки).Если обновляю страницу-ничего.Только когда ввожу заново адрес страницы-тогда все норм до следующих букв в форме.Почему так происходит и как с этим бороться?? | |
|
|
|
|
|
|
|
для: Эдик12
(28.12.2009 в 22:22)
| | Проверить. Допустим, что ваша страница имеет метатег в котором объявлена кодировка 1251, поэтому все введенные в форму данные будут переданы на сервер в этой кодировке. Кроме этого сервер ваш может иметь кодировку по умолчанию которая может никак не отвечать заявленному в заголовке страницы. А проверить это можно, заглянув в настройки Apache, в файл его конфигурации httpd.conf, и посмотреть значение параметра AddDefaultCharset. Этот параметр можно изменять посредством .htaccess.
В общем у вас путаница где-то с объявлением кодировки, от сюда и проблемы, разбирайтесь. Ну или ваш скрипт имеет явные баги. | |
|
|
|
|
|
|
|
для: sim5
(29.12.2009 в 02:55)
| | Все,спасибо, разобрался. | |
|
|
|
|
|
|
|
для: Эдик12
(29.12.2009 в 11:17)
| | А можно последний вопрос, и я уезжаю домой??))
Вот у меня стоит условие:
if (isset($_POST['item'])) {echo "<table>";
foreach($_POST['item'] as $key => $val) {if(($val!=NULL) && ($val>0) && (intval($val)==$val)){$el=explode(";",$key);echo "<tr>";
for($e=0;$e<count($el);$e++){echo "<td>$el[$e]</td>";} echo "<td>$val</td>";}
}
echo "</table>";}
| .А как можно сделать так, чтобы если ни одна переменная не удовлетворяет этому условию, то выводить какой-нибудь текст? | |
|
|
|
|