2015-08-19 2 views
0

Здесь у меня есть форма и некоторый код php для запуска только при нажатии кнопки отправки. Но блок «IF» запускается сразу после перезагрузки страницы. Как если бы $ _POST массив не пуст. Я могу попробовать с одним элементом, например !empty($_POST['name']). Но я хочу протестировать универсальный массив $ _POST. Как я могу это сделать?make оператор if запускается только при нажатии кнопки отправки

<?php 
require_once 'input.php'; 

if(Input::exists()){ 
    print_r($_POST); 
    $arr=array('ball'); 
    echo $arr[0]; 
} 
?> 

<form action='' method='POST'> 
    name:<input type='text' name='name' ></br> 
    <input type='submit' value='submit'> 
</form> 

input.php файл:

class Input{ 
    public static function exists($type='post'){ 
     switch($type){ 

      case 'post': 
       return (!empty($_POST))?true:false; 
       break; 
      default: 
       return (!empty($_GET))?true:false; 
       brek; 

     } 
    } 
    } 
+0

В случае с дефолтом есть опечатка; вы написали 'brek''. –

+0

Кроме того, что означает 'print_r ($ _ POST);' return on page load? –

+2

, если вы хотите универсальный тест, тогда 'if ($ _SERVER ['REQUEST_METHOD'] == 'POST') {...}'. это будет правда, независимо от того, что было отправлено клиентом. –

ответ

0

Зачем вам нужен класс Input? Просто сделайте это:

if ($_POST['name']) { 
    print_r($_POST); 
    $arr=array('ball'); 
    echo $arr[0]; 
} 
+0

Я мог бы, но я не хочу проверять один элемент, так как в форме может быть несколько элементов. –

+0

Итак, вы просто пытаетесь сделать так, чтобы одна форма была опубликована? Другой вариант - иметь скрытое поле со значением, а затем, когда форма размещена, проверьте это скрытое поле. – mfisher91

+1

Наличие нескольких элементов в форме ничего не меняет. Это решение по-прежнему будет работать. Если вы пытаетесь убедиться, что все * поля содержат что-то, просто проверка наличия всего массива '$ _POST' на самом деле вам не поможет. Для этого вам нужно будет написать более крупный оператор 'if', или еще лучше,' if' для каждого поля, которые генерируют разумные ошибки, которые будут переданы пользователю. –

0

Я предлагаю вам добавить имя для кнопки отправки

<input type='submit' name='submit' value='submit'> if(isset($_POST['submit'])) { php code goes here this will only run when submit btn has been clicked }

0
  1. Если вы хотите форму, чтобы представить данные себе опустить атрибут action
  2. Класс ввода невероятно переполнен, но я полагаю, что если вы хотите его использовать, мы можем заставить его работать.

Изменения Input класса искать что-то вроде этого ...

class Input { 
     public static function exists($type='post') { 
      if ($type == 'post' && count($_POST) > 0) 
        return true; 
      else if ($type == 'get' && count($_GET) > 0) 
        return true; 
     } 
    } 

Я откровенно ненавижу заявление переключателя, и это должно работать нормально. Еще раз, я думаю, класс является излишним.

Смежные вопросы