Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> key($_POST), Массив $_POST, передача данных по switch 
V
    Опции темы
Shark
  Дата 25.3.2016, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 18.6.2006
Где: Москва

Репутация: 4
Всего: 4



Есть код:
Код

switch(key($_POST))
    {
        case 'add': $a="Добавить"; break;
        case 'view': mysql_query("UPDATE test SET status='0' WHERE id='".$_POST['id']."' ") or die (mysql_error()); break;
        case 'cancel': mysql_query("UPDATE test SET status='1' WHERE id='".$_POST['id']."' ") or die (mysql_error());break;        
        case 'remove': $a="Удаление"; break;
    }

switch висит на кнопках, view и cancel меняются в зависимости от параметра status в БД...

Вопрос: как передать id в mysql запрос?

накатал на скорую руку (не рабтает)
Код

<form action="" method=POST>
<input type=hidden name='id' value='1'>
<input type=submit name='add' value=ADD>
<?php
$tbl=mysql_query("SELECT `status` FROM test ");
while($tbls=mysql_fetch_array($tbl)) {
if($tbls['status'] == '1')
{ echo '<input type=submit name="view" value="VIEW">';}
else
{ echo '<input type=submit name="cancel" value="CANCEL VIEW">';}
}
?>
<input type=submit name='remove' value=REMOVE>



--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
ksnk
Дата 25.3.2016, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Перед этой строкой `switch(key($_POST))` какая то работа с массивом POST ведется? Если нет, то key($_POST) вернет первый попавшийся ключ массива POST. Например `id`, если он будет идти первым в массиве.

Менее затратно по времени отладки - применять проверки на наличие ключей функцией isset 

Код

$action='donow';

if(isset($_POST['add'])) {
   $action='add';
}elseif (isset($_POST['cancel']) {
   $action='cancel';
} ...

switch($action){
 ...
}



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
NFL
Дата 26.3.2016, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Вообще ошибка в проектировании))
Даете submit'ам одно имя (например, action) и дальше просто switch($_POST['action'])

ЗЫ: и забудьте о 5.4 и ниже, а до кучи еще и про mysql_*

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Shark
Дата 26.3.2016, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 18.6.2006
Где: Москва

Репутация: 4
Всего: 4



так у меня будет полей 20 где-то... и для каждого делать проверку?


--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
whatisnot
Дата 26.3.2016, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Цитата(Shark @  25.3.2016,  15:25 Найти цитируемый пост)
WHERE id='".$_POST['id']."'


Слишком смело, да и зачем числовым значениям кавычки.
PM MAIL   Вверх
ksnk
Дата 26.3.2016, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Shark @  26.3.2016,  14:11 Найти цитируемый пост)
так у меня будет полей 20 где-то... и для каждого делать проверку? 

А как иначе?  smile 
Можно вот так, например, если вспомнить про классы 
Код


class makeItNice {

  static function post_add(&$result){
       $result='Добавить';
  }

  static function post_view(&$result){
        return mysql_query("UPDATE test SET status='0' WHERE id=".(0+$_POST['id'])) or die (mysql_error());
  }

 ...

}


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

    if(is_callable(array('makeItNice','post_'.$key))){
        call_user_function(array('makeItNice','post_'.$key),$a);
    }
}


Это сообщение отредактировал(а) ksnk - 26.3.2016, 18:43


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Shark
Дата 26.3.2016, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 18.6.2006
Где: Москва

Репутация: 4
Всего: 4



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

Код

(0+$_POST['id'])


а зачем так писать?

Это сообщение отредактировал(а) Shark - 26.3.2016, 19:17


--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
ksnk
Дата 26.3.2016, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Shark @  26.3.2016,  19:00 Найти цитируемый пост)


(0+$_POST['id'])

а зачем так писать?

Это такой хитрый способ приведения к числу. Записывается короче, чем intval и выглядит загадочно  smile.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Shark
Дата 28.3.2016, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 18.6.2006
Где: Москва

Репутация: 4
Всего: 4



ksnk, Увидел в конце твоего примера цикл foreach, и сделал так:
Код

foreach($_POST as $val=>$key)
{
switch($val)
    {
        case 'add': $a="Добавить"; break;
        case 'view': mysql_query("UPDATE test SET status='0' WHERE id='".(int)$_POST."' ") or die (mysql_error()); break;
        case 'cancel': mysql_query("UPDATE test SET status='1' WHERE id='".(int)$_POST."' ") or die (mysql_error());break;        
        case 'remove': $a="Удаление"; break;
    }
}
?>


Вроде работает. Или все же лучше создать класс и использовать его?


P.S. не работает smile))

Это сообщение отредактировал(а) Shark - 28.3.2016, 10:23


--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
ksnk
Дата 28.3.2016, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



В php, конечно, есть своя особенная магия, но к телепатии она отношения не имеет.

(int)$_POST - это что должно быть?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Shark
  Дата 28.3.2016, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 18.6.2006
Где: Москва

Репутация: 4
Всего: 4



Цитата

(int)$_POST - это что должно быть? 

циферка smile))))))


Решил самым бредовым способом, но работает smile))
Код

    foreach($_POST as $val=>$key)
        {
            switch($val)
                {
                    case 'add': $a="Добавить"; break;
                    case 'view': mysql_query("UPDATE test SET status='0' WHERE id='".$_POST['id']."' ") or die (mysql_error());  break;
                    case 'cancel': mysql_query("UPDATE test SET status='1' WHERE id='".$_POST['id']."' ") or die (mysql_error());  break;        
                    case 'remove': $a="Удаление"; break;
                    
                }        
        }
    


?>
<?php

$tbl=mysql_query("SELECT `id`,`status` FROM test ");
while($tbls=mysql_fetch_array($tbl)) {
echo '<form action="index2.php?id='.$tbls['id'].'" method=POST>';
echo "<input type=text name='id' value='".$tbls['id']."'><br />";
echo "<input type=submit name='add' value=ADD>";

if($tbls['status'] == '1')
{ echo '<input type=submit name="view" value="Опубликовать объект">';}
else
{ echo '<input type=submit name="cancel" value="Снять с публикации объект">';}
echo "<input type=submit name='remove' value=REMOVE><br /><br />";
echo "</form>";
}

?>


Нужно было сделать просто, чтоб в цикле while была форма (для каждого id), и закрыть ее в этом же цикле.


Это сообщение отредактировал(а) Shark - 28.3.2016, 15:11


--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
whatisnot
Дата 28.3.2016, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Цитата(Shark @  28.3.2016,  09:44 Найти цитируемый пост)
(int)$_POST

Это конечно глупость, а вот тут $_POST['id'] как раз и должно быть (int)$_POST['id']. А еще лучше если множество значений:

Код

if($ids = array_diff(array_map('intval', $_POST), [0])) {
    foreach($ids ....) 
}
 

Это сообщение отредактировал(а) whatisnot - 28.3.2016, 15:52
PM MAIL   Вверх
superVad
Дата 1.4.2016, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: нет
Всего: 15



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1329 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.