Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не получается взять данные из $_POST
 
 автор: lElectroHardl   (07.09.2010 в 20:57)   письмо автору
 
 

Есть форма:
<form action="about:blank" method="post" name="form_add_com" onsubmit="return false;">
...
<input type="button" name="sub_but" value="Добавить комментарий" onclick="do_submit(this.form);"> 
</form>

Которую обрабатывает скрипт (если поля заполнены, то дает в action путь).

Когда делаю:
<?
echo $_POST['sub_but'];

Мне нечего не выводит!
Хотя другие значение Поста выводит спокойно.

Помогите, в чем дело? А то уже мозг сломал.

  Ответить  
 
 автор: neadekvat   (07.09.2010 в 21:16)   письмо автору
 
   для: lElectroHardl   (07.09.2010 в 20:57)
 

Дак сделайте print_r или var_dump
К тому же, непонятно, зачем вам значение, которое вы сами же вписали в форму?

  Ответить  
 
 автор: sim5   (07.09.2010 в 21:24)   письмо автору
 
   для: lElectroHardl   (07.09.2010 в 20:57)
 

onsubmit="return false;"
и вы еще хотите, чтобы форма отправлялась? И какой смысл action="about:blank" а затем подстановка адреса?

  Ответить  
 
 автор: lElectroHardl   (07.09.2010 в 21:29)   письмо автору
 
   для: sim5   (07.09.2010 в 21:24)
 

Далее в скрипте идет строчка: form.submit(); - т.е. отправка формы.
По-поводу адреса - этот "метод" проверки от спама взял с блога одного программиста.

Что делать? Убрать return false? И подставить адрес?

  Ответить  
 
 автор: sim5   (07.09.2010 в 22:01)   письмо автору
 
   для: lElectroHardl   (07.09.2010 в 21:29)
 

submit - метод запускающий отправку формы, а onsubmit, это событие, которое наступает при ее отправке, и если возвращается false, то спрашивается - будет ли отправлена форма?

  Ответить  
 
 автор: lElectroHardl   (07.09.2010 в 22:07)   письмо автору
 
   для: sim5   (07.09.2010 в 22:01)
 

Понял. Все поисправлял, все работает.
Спасибо.

  Ответить  
 
 автор: sim5   (07.09.2010 в 22:11)   письмо автору
 
   для: lElectroHardl   (07.09.2010 в 22:07)
 

Что работает? Вы понимаете, что писать
onsubmit="return false или true"
в этом событие просто глупо, ибо это лишено всякого смысла?

  Ответить  
 
 автор: lElectroHardl   (08.09.2010 в 17:04)   письмо автору
 
   для: sim5   (07.09.2010 в 22:11)
 

А почему лишено? Если false, форма отправляться не будет, что ж тут не правильного?

  Ответить  
 
 автор: sim5   (08.09.2010 в 17:24)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 17:04)
 

Вы вообще понимаете назначение и суть этих явлений?
Это событие можно применить, например, для проверки значений полей перед отправкой формы. И это событие возвращает методу submit из функции проверки полей результат true/false, в зависимости от результата проверки. То есть форма будет отправлена или нет, в зависимости от результата проверки. Вот в этом случае есть и смысл, и польза, в вашем же случае.... даже слово подобрать трудно, чтобы точно выразить какой это бред.
<script>
function f(frm) {
  if(frm.val.value < 2) return false;
  else return true;
}
</script>

<form action="as.php" onsubmit="return f(this)">
<select name="val">
  <option value="0" SELECTED>Sender...</option>
  <option value="1">No</option>
  <option value="2">Yes</option>
</select>
<input type="submit" value="Send">
</form>

  Ответить  
 
 автор: lElectroHardl   (08.09.2010 в 17:40)   письмо автору
 
   для: sim5   (08.09.2010 в 17:24)
 

>То есть форма будет отправлена или нет
Что собственно мне и надо. Я так понимаю, форма выше это не сарказм, а как и должно быть.

Вот проверка и форма (так как у вас):

<script type="text/javascript">
function do_submit(form) 
{
    var return_value = true;
    
    if (form.title.value.length < 5)
        {
        alert('Название слишком короткое.\n');
        form.title.focus();
        return_value = false;
    }
    else if (form.portion.value < 1)
    {
        alert('Сколько порций в рецепте?\n');
        form.portion.focus();
        return_value = false;
    }
        // тут еще проверки
    if(!return_value)
    return return_value;
}
</script> 

<form action='site' name='add_recipe' method='post' enctype='multipart/form-data' onsubmit='return do_submit(this);'>
<input type='text' name='title' id='title' size='100' />
<input type='text' name='portion' id='title' size='100' />
</form>

  Ответить  
 
 автор: sim5   (08.09.2010 в 17:48)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 17:40)
 

return функция(аргументы) - вот это уже иное дело, нежели изначальный бред.
Вот только логика сама ни к черту.

  Ответить  
 
 автор: lElectroHardl   (08.09.2010 в 18:34)   письмо автору
 
   для: sim5   (08.09.2010 в 17:48)
 

Я ж и говорю, "я понял как сделать" :).
Что, опять что-то не то?

  Ответить  
 
 автор: sim5   (08.09.2010 в 18:44)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 18:34)
 

Да мне то как-то все равно....
А вот вы, предполагая, что некорректый ввод может быть в нескольких полях, формируете список сообщений для всех таких полей, и устнавливаете фокус. Уж как-то позаботьтесь тогда, чтобы фокус был у первого поля с ошибкой, если таковых полей будет несколько. А то как-то не логично и не удобно получается.

  Ответить  
 
 автор: lElectroHardl   (08.09.2010 в 18:53)   письмо автору
 
   для: sim5   (08.09.2010 в 18:44)
 

Не, фокус работает отменно.
Только есть одна загвоздочка.

У меня дальше в форме есть 20 select`ов, у каждого из которых свое значение в массиве id_select[].
Как мне подсчитать к-во селектов, где поле != 0.
Заранее спасибо.

  Ответить  
 
 автор: sim5   (08.09.2010 в 19:00)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 18:53)
 

>Не, фокус работает отменно.

Даже так? Ну что за вздор вы несете - фокус будет установлен последнему элементу с ошибкой. Хотя мне собственно все равно, если это нормально, то ....

Зачем подсчитать?

  Ответить  
 
 автор: lElectroHardl   (08.09.2010 в 19:40)   письмо автору
 
   для: sim5   (08.09.2010 в 19:00)
 

>фокус
у меня же стоит elseif. Т.е. проверка идет поэлементно (сначала одно поле, затем второе...).

Что бы узнать, выбрал ли человек хотя бы 2 select`а.

  Ответить  
 
 автор: sim5   (08.09.2010 в 19:46)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 19:40)
 

Ерунда все это... Мне сейчас не до объяснения, но думайте, елки палки....
Проверяйте все обязательные поля для заполения, ну или все поля на корректный ввод. Фрмируйте список сообщений (только в этом случвае вывод \n в них логичен). По значению этого списка принимайте решение на отправку или нет формы.
В проивном случае, сразу же при первой ошибке return false. Не логично у вас все построено.

  Ответить  
 
 автор: lElectroHardl   (08.09.2010 в 19:50)   письмо автору
 
   для: sim5   (08.09.2010 в 19:46)
 

Доработаю этот момент.

Помогите с подсчетом элементов массива пожалуйста.
Через
value < 1
не хочет, через
length < 1
тоже не хочет...
И еще, <option> у меня генерирует сам скрипт JS.

  Ответить  
 
 автор: sim5   (08.09.2010 в 19:53)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 19:50)
 

Да не важно, прочли или нет - лажа полная, ибо лишнее и непонятное к чему. Заново лучше прочтите.

Какого массива? И зачем его подсчитывать, вы можете объяснить?

  Ответить  
 
 автор: lElectroHardl   (08.09.2010 в 20:10)   письмо автору
 
   для: sim5   (08.09.2010 в 19:53)
 

Вот смотрите. Нужно проверить, было ли выбрано минимум 2 Селекта.
А массив формируется исходя из (<input type="checkbox" name="$name[]" />)

Подправил, по вашему совету:

// кусок:
    if (form.portion.value < 1)
    {
        e_mes += 'Сколько порций в рецепте?\n';
        return_value = false;
    }
    if (form.img.value == "")
    {
        e_mes += 'Рецепт без фотографии?.\n';
        return_value = false;
    }
    if (form.preparation.value.length < 200)
    {
        e_mes += 'А как готовить блюдо?';
        return_value = false;
    }
    
    if(!return_value)
    alert(e_mes);
    return return_value;

  Ответить  
 
 автор: sim5   (08.09.2010 в 20:36)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 20:10)
 

Зачем \n? Вот вы можете объяснить к чему вы этот перевод строки вставляете в сообщение, если у вас оно одной строкой?
По всем вопросам JS, на форуме есть соответствующий раздел.
<script>
function func(f) {
  var n = 0;
  var m = f.getElementsByTagName("select");
  for(i=0; i<m.length; i++) if(m[i].value > 0) n++; 
  if(n<2) {
    alert("Not selected!");
    return false;
  }
}
</script>

<form action="" onsubmit="return func(this)">
<select name="id_select[]">
 <option value="0" SELECTED>Select...</option>
 <option value="1">Option 1</option>
 <option value="2">Option 2</option>
</select>
<select name="id_select[]">
 <option value="0" SELECTED>Select...</option>
 <option value="1">Option 1</option>
 <option value="2">Option 2</option>
</select>
<select name="id_select[]">
 <option value="0" SELECTED>Select...</option>
 <option value="1">Option 1</option>
 <option value="2">Option 2</option>
</select>
<input type="submit" value="Send">
</form>

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

  Ответить  
 
 автор: lElectroHardl   (08.09.2010 в 21:08)   письмо автору
 
   для: sim5   (08.09.2010 в 20:36)
 

Спасибо за скрипт.
Естественно далее данные обрабатывает сервер.

  Ответить  
 
 автор: sim5   (08.09.2010 в 21:21)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 21:08)
 

Это не скрипт, это пример. А вот \n напрашивается, если вы определяете переменную, например, error, изначально с пустым значением. Далее проверяете поля формы, и если не отвечает условию, то добавляете в эту переменную соответствующее сообщение с переносом строки. По окончании проверки проверяете значение этой перменной, и если оно не пустое, то выводите ее и отменяете отправку формы. Вот в этом случае у вас будет сообщение из строк о каждом поле. И фокус можно установить у первого поля, да и вообще поместить сообщения рядом с полями.
То о чем вы ранее писали (else if), я удалил потому, что не правильно выразился в запарке (не до вас было) - в этом случае пользователь будет получать сообщение, далее прочитав его, следующее и т.д. (скрипт не остановит выполнение, дав время на исправление ошибки). Значит ему надо будет запомнить, что и где он накосячил, и не дай бог таких полей как и списков будет тоже 20 или более штук.
Можно вообще наколбасить до бессовестного красиво, но логично все это должно быть, а не абы как и неудобное для пользователя.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования