PHP класс, html форум, распечатка массива $ _POST на странице - PullRequest
0 голосов
/ 14 марта 2019

Я начинающий php-программист, я пытался создать небольшую программу, которая принимает данные с форума, а затем после отправки я хочу, чтобы она была напечатана на экране. просто и легко, подумал я, я пытался, и подозрительно все работает нормально для 1 текстового поля, когда я добавил оставшиеся 2 текстовых поля с именем [fam] [user], мой код перестает возвращать содержимое на экран. Также я начал получать ошибку массива unindex, поэтому мне пришлось использовать isset, чтобы противостоять этой проблеме, а также, почему мой код вызывает деструктор, хотя я никогда не устанавливал свой деструктор неявным образом. я не знаю, как задавать эти вопросы, потому что ошибки не являются последовательными.

  • код не печатает мое [имя] [фамилия] [пользователь]
  • код печатает [имя], когда все о [fam] [пользователь] опущено в коде.
  • -код, иногда называемый деструктором
  • -код не очищает html предыдущий ввод (например, при работе с одним текстовым полем, скажем, я ввел [имя] Джона, и нажмите кнопку отправить его отображает отправить, затем я обновляю страницу, а имя Джон все еще отображается, почему деструктор не очищает память имени из моего представление.

         <form class="nameform" action="book.php" method="post">
             <input type="text" name="Name" value="1">
             <input type="text" name="Fam" value="2">
             <input type="text" name="User" value="3">
             <input type="button" name="submit" value="Submit">
         </form>
    

          private $name; private $familyName; private $userName;
          function __construct($names,$familyNames,$userNames)
          {
            $this->name = $names;
            $this->familyName = $familyNames;
            $this->userName = $userNames;
          }
          function getName()
          {
            return $this->name;
          }
          function getFamilyName()
          {
            return $this->familyName;
          }
          function getUserName()
          {
            return $this->userName;
          }
          public function __destruct()
          {
            echo "destroyed again";
            $this->name;
            $this->familyName;
            $this->userName;
          }
        }
    
        if(!isset( $_POST["Name"])||!isset($_POST["Fam"])||!isset($_POST["User"]))
        {
            echo "Please fill in the data";
        } else {
          $p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
          print $p1->getName();
          print $p1->getFamilyName();
          print $p1->getUserName();
          print_r($_POST);
        }
    
        // $n = $_POST["Name"];
        // $f = $_POST["Fam"];
        // $u =  $_POST["User"];
        // $p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
    
    
     ?>
    

1 Ответ

0 голосов
/ 14 марта 2019

код не печатает мое [имя] [фамилия] [пользователь]

Вы никогда не выводите их из деструктора

  public function __destruct()
  {
    echo "destroyed again";
    $this->name; //<---- does nothing
    $this->familyName;
    $this->userName;
  }

Так что я не уверенчто это должно делать.У вас они внизу

  print $p1->getName();
  print $p1->getFamilyName();
  print $p1->getUserName();

Но единственное, что вы получите от метода уничтожения, это

 "destroyed again"

И вы увидите, что только если все в формезадавать.Это всегда когда отправляется форма, потому что тип text всегда отправляется вместе со своей формой.

Что подводит меня к этому, вы должны проверить empty вместо isset там

if ('POST' === $_SERVER['REQUEST_METHOD']) { //check if POST
    if(empty($_POST["Name"])||empty($_POST["Fam"])||empty($_POST["User"])){
        echo "Please fill in the data";
    } else {
        $p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
       print $p1->getName();
       print $p1->getFamilyName();
       print $p1->getUserName();
       print_r($_POST);
    }
}

Обратите внимание, что все ложь будет пустым, false, [], '', 0, '0', null и т. Д.

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

Еще один более продвинутый способ проверить это так:

if ('POST' === $_SERVER['REQUEST_METHOD']) { //check if POST
     $post = array_filter( $_POST, function($item){
           return strlen($item); //any thing of a length of 0 is removed
     });

     if(count($post) != count($_POST)){
           foreach(array_diff_key( $_POST, $post)  as $missing=>$empty) {
                  echo "Please fill in $missing\n";
           }
     }else{
       $p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
       print $p1->getName();
       print $p1->getFamilyName();
       print $p1->getUserName();
       print_r($_POST);
    }
}

Вывод

Please fill in Name
Please fill in Fam

Вы можете проверить это онлайн Здесь

Приветствия!

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