Конечно, глупая ошибка, но я ее не вижу - PullRequest
3 голосов
/ 21 апреля 2010

У меня есть форма (очень упрощенная):

<form action='http://example.com/' method='post' name='event_form'>
  <input type='text' name='foo' value='3'/>
  <input type='submit' name='event_submit' value='Edit'/>
</form>

И у меня есть класс "EventForm" для обработки формы.Основной метод process () выглядит следующим образом:

public function process($submitname=false){
    $success=false;
    if ($submitname && isset($_POST[$submitname])){ //PROBLEM:  isset($_POST[$submitname] is always FALSE for some reason
        if($success=$this->ruler->validate()){//check that dependancies are honoured and data types are correct
            if($success=$this->map_fields()){//divide input data into Event, Schedule_Element and Temporal_Expression(s)
                $success=$this->eventholder->save();
            }
        }
    } else {//get the record from the db based on event_id or schedule_element_id
        foreach($this->gets as $var){//list of acceptable $_GET keys
            if(isset($_GET[$var])){
                if($success= $this->__set($var,$_GET[$var])) break;
            }
        }
    }
    $this->action=(empty($this->eventholder->event_id))? ADD : EDIT;
    return $success;
}

Когда форма отправляется, это происходит: $form->process('event_submit'); По какой-то причине isset($_POST['event_submit']) всегда оценивается как FALSE.Кто-нибудь может понять почему?

ETA: после проработки предложений, кажется, что JQuery.validate () неожиданно влияет на отправку формы.Все поля отправлены, кроме кнопки отправки.Похоже, что это ошибка этого JQuery:

$("form[name='event_form']").validate({
    submitHandler: function(form) {
        form.submit();
    }
}};

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

Ответы [ 3 ]

2 голосов
/ 21 апреля 2010

Я разбил ваш код на еще более простой PHP-файл:

<?php
function process($submitname=false){
echo 'erg<br>';
  $success=false;
  if ($submitname && isset($_POST[$submitname])){ //PROBLEM:  isset($_POST[$submitname] is always FALSE for some reason
    echo 'bwah';
  }
}

process("event_submit");
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="event_form">
  <input type="text" name="foo"/>
  <input type="submit" name="event_submit" value="Edit"/>
</form>

"erg" и "bwah" отображаются как ожидалось. Убедитесь, что ваш класс создается должным образом, что вы фактически передаете ему «event_submit» и что какой-то другой фрагмент кода не уничтожает $ _POST, прежде чем вы получите возможность его прочитать.

2 голосов
/ 21 апреля 2010

Измените свой JQuery на это:

$("form[name='event_form']").validate({
    submitHandler: function(form) {
        $("form[name='event_form'] input[name='event_submit']").click()
    }
}};
2 голосов
/ 21 апреля 2010

сделайте print_r для массива $ _POST и посмотрите, что отправлено - он должен вывести весь массив, например,

 print_r($_POST);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...