Этот код будет постоянно печатать три единицы

#php #html

#php #HTML

Вопрос:

Я новичок, и, похоже, у меня просто не получается заставить это работать. Есть предложения? Пожалуйста, помогите.

Вот часть кода, сохраненная в файле php

  <?php
     /**check if enter is pressed*/
     if (isset($_POST['enter'])) {
        /**set vars to results*/
        $uname = isset($_POST['uname']);
        $upass = isset($_POST['upass']);
        $key = isset($_POST['key']);
        /**print results*/
        echo $uname;
        echo $upass;
        echo $key;
    }

  ?>
<html>
    <head>
        <title>Chat gate</title>
    </head>
    <body align="center" valign="middle">
        <form action="index.php" method="POST">
            <tt>Enter your username</tt>
            <input type = "text" name ="uname" required>
            <tt>Enter your password:</tt>
            <input type = "password" name = "upass" required>
            <tt>Confirm key:</tt>
            <input type = "text" name = "key" required>
            <input type = "submit" name = "enter">
        </form>
    </body>
</html>
  

Комментарии:

1. isset возвращает логическое значение. Вы хотите получить сами значения (после isset ).

2. @Jeto говорит о том, что вам нужно что-то вроде $uname = isset($_POST['uname']) ? $_POST['uname'] : '';

3. Или, возможно, просто отпустите isset . Кроме if вам действительно не нужно подавлять какие-либо предупреждения для параметров, которые вы ожидаете. Эта конструкция немного переадресована на SO, но не слишком подходит для начинающих.

4. Можете ли вы подробнее объяснить, чего вы ожидаете от этого кода и что именно работает не так, как вы думали?

Ответ №1:

Вам нужно удалить isset в присваивании переменной, поэтому измените на это.

 $uname = $_POST['uname'];
$upass = $_POST['upass'];
$key   = $_POST['key'];
  

isset возвращает 1 (true), если переданная вами переменная установлена, и 0 (false), если она не установлена, то есть, поскольку все ваши переменные установлены, напечатано 111. Если вы хотите проверить, установлены ли они перед их печатью, вам понадобится дополнительный оператор if.

Может быть, что-то вроде этого, чтобы проверить, все ли они установлены перед их печатью.

 if (isset($_POST['uname'], $_POST['upass'], $_POST['key'])){
    echo $uname;
    echo $upass;
    echo $key;
}
  

Комментарии:

1. Просто примечание, которое isset принимает несколько аргументов (не нужно связывать их с amp;amp; ).