Вернуться   Дизайнерский форум » ВЕБ-ПРОГРАММИРОВАНИЕ » ASP, Perl, PHP и MySQL

Как вывести список всех переменных?

Обсуждение темы Как вывести список всех переменных? в разделе ASP, Perl, PHP и MySQL, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; Дано: форма с разными объектами. Нужно: проверить на наличие не введенных данных перед вводом в БД. Если таковые переменные имеются, то присвоить им ...


Закрытая тема
 
Опции темы
Старый 20.04.2006, 00:54   #1
Дано: форма с разными объектами.
Нужно: проверить на наличие не введенных данных перед вводом в БД. Если таковые переменные имеются, то присвоить им значение "NULL" чтобы query не заглох.

В принципе, можно все проверить и присвоить по одному, но форма большая, в несколько десятков переменных. Кто нибудь знает как это дело автоматизировать в цикле? Спасибо за помощь.
 
Старый 20.04.2006, 00:54
Ссылки
Старый 20.04.2006, 06:57   #2
в форме ставь имена так name="vars[my_first_var]"

Потом в скрипте делай

foreach($_POST["vars"] as $val):
my_check_function($val);
endforeach;

Alkeeper добавил [date]1145502116[/date]:
Хотя какого хрена....
PHP код:
foreach ($_POST as $key => $val):
  if (!
$_POST[$key]): $queryparts[] = "`$key` = NULL ";
  else: 
$queryparts[] = "`$key` = '$val' ";
  endif;
endforeach; 
Потом массив впихиваешь в запрос через какой-нибудь implode()
 
Старый 20.04.2006, 09:36   #3
Наличие не введенных данных можно проверить с помощью функции isset или empty
 
Старый 20.04.2006, 09:43   #4
Amber, При передаче из формы isset будет true в любом случае, а if (empty($var)) идентично if ($var == false) или if (!$var)
 
Старый 20.04.2006, 11:27   #5
Цитата:
При передаче из формы isset будет true в любом случае
Если checkbox не отмечен, то не будет.
 
Старый 20.04.2006, 11:39   #6
kost, ну да, согласен, хотя это уже детали.

и подобным переменным придется до цикла присваивать false.
хотя опять же что за задачи стоят...

если при update эти переменные на валидность запроса особого влияния не возымеют, то при insert другой расклад:

если вставка делается так:

insert into `table_name` (var1,var2,...,varN) values ('val1','val2',...,'valN');

то тоже пофиг, вот так будет сбой:

insert into `table_name` values ('val1','val2',...,'valN');

т.к. пустые поля заполнять нужно.
 
Старый 24.04.2006, 01:21   #7
Цитата:
Alkeeper:
в форме ставь имена так name="vars[my_first_var]"

Потом в скрипте делай

foreach($_POST["vars"] as $val):
my_check_function($val);
endforeach;
Идея очень даже неплохая, мне понравилась логика. Только одна загвоздка - при создании такого массива и использовании функции IMPLODE() как-то надо будет отличать string от decimal, ведь для запроса БД надо взять все string-и в кавычки, а цифры без кавычек. Хотя, можно создать два массива - один для decimal, другой для strings, или, если уж совсем хочется обойтись только одним массивом, то присвоить индексам разные приставки для определения типа данных, например: vars[my_first_var_decimal] для decimal данных и vars[my_first_var_string] для string данных.

Цитата:
Alkeeper добавил [date]1145502116[/date]:
Хотя какого хрена....
PHP код:
foreach ($_POST as $key => $val):
  if (!
$_POST[$key]): $queryparts[] = "`$key` = NULL ";
  else: 
$queryparts[] = "`$key` = '$val' ";
  endif;
endforeach; 
К сожалению этот код не сработал у меня на сервере, не знаю почему. У кого-нибудь он работает?

Я его чуть видоизменил, вместо метода $_POST я использовал $_REQUEST:

PHP код:
foreach ($_REQUEST as $key => $val)
    {
      if (
$val=='')
        
$_REQUEST[$key] = "NULL";
      else
        
$_REQUEST[$key] = $val;
    } 
Код как раз выполняет то, что и требовалось.

Цитата:
Потом массив впихиваешь в запрос через какой-нибудь implode()
Массив я создавать не стал по вышеизложенной причине: кавычки придется ставить не на все переменные, хотя решить это возможно.

Alkeeper,

спасибо за идеи, очень помог.

chaynik добавил [date]1145827595[/date]:
Цитата:
kost:


Если checkbox не отмечен, то не будет.
Чтобы такого не произошло очень удобно использовать альтернативный скрытый checkbox отмеченный по умолчанию. Тогда этот checkbox будет отмечен в query_string.

chaynik добавил [date]1145828129[/date]:
Цитата:
Alkeeper:
если вставка делается так:

insert into `table_name` (var1,var2,...,varN) values ('val1','val2',...,'valN');

то тоже пофиг, вот так будет сбой:

insert into `table_name` values ('val1','val2',...,'valN');

т.к. пустые поля заполнять нужно.
Пустые поля заполнять нужно в обоих случаях. Если в первом запросе :

insert into `table_name` (fName, lName, age, pwd) values ('Vasya', 'Pupkin',,'password' );

возраст не будет указан (decimal), то сбой тоже произойдет. Поэтому, всем не указанным переменным на форме придется присвоить значение "NULL" или "default" чтобы не произошло сбоя при запросе.

chaynik добавил [date]1145828673[/date]:
Только что заметил, что сегодня исполняется ровно 2 года со дня моей регистрации на web-silvere, а меня всё ещё как "гостя" встречают. lol
 
Старый 24.04.2006, 10:20   #8
Цитата:
kost:
Цитата:
Если checkbox не отмечен, то не будет.
Чтобы такого не произошло очень удобно использовать альтернативный скрытый checkbox отмеченный по умолчанию. Тогда этот checkbox будет отмечен в query_string.
Что-то я не понял, и мне кажется это бредом. У меня будет еще одна переменная, которая мне не нужна и пристутствует просто так.
 
Старый 24.04.2006, 11:46   #9
Цитата:
Цитата:
kost:


Чтобы такого не произошло очень удобно использовать альтернативный скрытый checkbox отмеченный по умолчанию. Тогда этот checkbox будет отмечен в query_string.
Что-то я не понял, и мне кажется это бредом. У меня будет еще одна переменная, которая мне не нужна и пристутствует просто так.
И не исключено, что затирает истинное значение...

Alkeeper добавил [date]1145864967[/date]:
2chaynik:

А фигли их различать ты ведь их все к стрингу сведешь, когда в запрос воткнешь.....

Alkeeper добавил [date]1145865060[/date]:
А по стандартам SQL в кавычки нужно брать все подряд
 
Старый 24.04.2006, 23:03   #10
Цитата:
kost:


Цитата:
Чтобы такого не произошло очень удобно использовать альтернативный скрытый checkbox отмеченный по умолчанию. Тогда этот checkbox будет отмечен в query_string.
Что-то я не понял, и мне кажется это бредом. У меня будет еще одна переменная, которая мне не нужна и пристутствует просто так.
kost: не просто так, а для подстраховки, если нужный checkbox не отмечен. Создаешь два checkbox-а с одинаковыми названиями. Первый скрытый и отмеченный, за ним идёт реальный, не скрытый. Когда реальный остается не отмеченым, то передается значение скрытого checkbox-а, а если реальный отмеченный, то он заменяет значение скрытого, так как следует за ним. Может это не оптимальный вариант, но должно помочь, чтобы не возиться с проверками, все зависит от преследуемой задачи.

chaynik добавил [date]1145907163[/date]:
Цитата:
Alkeeper добавил [date]1145865060[/date]:
А по стандартам SQL в кавычки нужно брать все подряд
Вот таблица:

CREATE TABLE users (
fName varchar(10) NOT NULL,
lName varchar(10) NOT NULL,
salary money NULL,
country varchar(20) NULL
)

Попробуй ввести все данные в кавычках:
insert into users values ('Vasya', 'Pupkin', '1500', 'Russia')

В MS SQL-Server сбой гарантирован. В стандартах T-SQL есть такое понятие как implicit and explicit conversions, по русски точно не знаю. Если всегда ставить кавычки, то SQL-Server пытается автоматически перевести из char в нужный тип, это называется implicit. К сожалению, чтобы перевести из char в money, smallmoney, timestamp, binary, varbinary нужно применить explicit conversion, т.е. использовать методы cast или convert.

Про MySQL и Oracle не знаю, может там и сработает так, но в T-SQL брать всё в кавычки нельзя, всё зависит от типа поля.

п.с. вопрос на засыпку: представьте что для поля country указано значение "Russia" по умолчанию, т.е. default. Пользователь посылает два запроса на БД:

Первый: insert into users values ('Vasya', 'Pupkin', 1500, 'default')

Второй: insert into users values ('Masha', 'Rоstova', 1500, default)

Из какой страны будет Вася Пупкин и из какой страны Маша Ростова?
 
Старый 24.04.2006, 23:03
Закрытая тема


Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести сайт из под АГС nestercom Поисковые системы 7 15.07.2015 14:29
класс на js - область видимости переменных Anthony HTML, CSS, JavaScript 8 28.02.2009 20:40
Запись в файл .htpasswd переменных на PHP Anatol ASP, Perl, PHP и MySQL 5 07.08.2007 08:33
Как вывести Флэш-Кнопку? serge13 HTML, CSS, JavaScript 4 19.06.2005 08:13
Связь Js переменных с Php переменными b34st HTML, CSS, JavaScript 2 08.06.2004 09:38


Текущее время: 19:59. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум