За последние 24 часа нас посетили 63117 программистов и 1742 робота. Сейчас ищут 1168 программистов ...

Проблемы с... header();

Тема в разделе "PHP для новичков", создана пользователем jonathan-grinn, 2 авг 2016.

  1. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Почему на этой странице (login.php) не работает header()? Точнее работает, но только, если его поставить в самом начале файла...

    Код (Text):
    1. <!DOCTYPE html>
    2.   <head>
    3.     <title>Вход</title>
    4.   <meta charset="utf-8">
    5.   <link rel="shortcut icon" href="../img/system/logo-min.png" type="image/png">
    6. <link href="../css/main.css" rel="stylesheet">
    7. <link href="../css/menu.css" rel="stylesheet">
    8. <style>
    9. body {
    10.    background-color: rgba(234,234,234,0.36);
    11. }
    12. #tabl {
    13.    width: 100%;
    14.   }
    15. #block {
    16.   background: #FFF;
    17.     width:540px;
    18.     margin-top: 50px;
    19.     padding:30px;
    20.     box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16);
    21.   }
    22. #login, #password {
    23.   border: none;
    24.   font-family: 'P22Thin';
    25.   font-size: 20px;
    26.    padding: 4px;
    27.     padding-bottom: 7px;
    28.   border-bottom: 1px solid #ccc;
    29.   }
    30. #login:focus {
    31.   outline: none;
    32.   border-bottom: 1px solid #000;
    33.   }
    34. #password:focus {
    35.   outline: none;
    36.   border-bottom: 1px solid #000;
    37.   }
    38.  
    39. h1 {
    40.   font-family: 'P22Demi';
    41.   font-size: 30px;
    42. }
    43. #ok {
    44.     margin-top: 5px;
    45.     color: #2196F3;
    46.     font-family: 'Roboto';
    47.     padding: 15px;
    48.     border: none;
    49.     background-color: transparent;
    50.     font-size: 19px;
    51.     cursor: pointer;
    52. }
    53.  
    54. #ok:hover {
    55.     background-color: rgba(239,239,239,0.7);
    56.            }
    57. </style>
    58.     </head>
    59.  
    60. <?php
    61.   echo "<div id=tabl align=center>
    62. <div id=block>
    63.  
    64.     <h1>Авторизация</h1>
    65.   <form method=POST action=login.php>
    66.   <p><input type=text name=login id=login size=30 placeholder=Логин><br></p>
    67.   <p><input type=password name=password id=password size=30 placeholder=Пароль></p>
    68.   <p><input type=submit value=Войти name=ok id=ok></p>
    69.     </form>
    70.    
    71.     </div>
    72.     </div>";
    73.  
    74.  
    75.     if(isset($_POST["ok"])) {
    76.        
    77.         $host="";
    78.         $user="";
    79.         $pass="";
    80.         $db_name="";
    81.  
    82.         $mysqli = new mysqli($host,$user,$pass,$db_name);
    83.          
    84.         $result = $mysqli->query("SELECT * FROM users WHERE login='{$_POST['login']}' and password='{$_POST['password']}'");
    85.         $size = $mysqli->affected_rows;
    86.         echo $login, $password, $size;
    87.         if ($size === 1) {  
    88.            header('Location: index.php');
    89.            }
    90.         elseif ($size === 0) {
    91.            header('Location: login.php');
    92.            };
    93.  
    94.       };
    95.   ?>
    96.   </html>
    Помогите, пожалуйста!!
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    потому что так устроены сообщения http:
    - сначала идут заголовки
    - потом тело

    пэхапэ не изобретает ничего нового в вебе. просто помогает тебе сформировать сообщение-ответ http.
    --- Добавлено ---
    p.s. замечено, что чем длиннее вопрос, чем больше в нём никому не интересного мусора, тем меньше вероятность ответа. стремись к простоте и краткости.
     
  3. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Но раньше переадресация из условия работала :://
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    я не понял что ты этим хотел сказать. заголовки должны быть до любого вывода.
     
  5. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    В смысле? Сначала ставить php код, а потом html? Так что ли?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    вникать в "логику" твоей портянки с кодом не хочется. сделай так чтобы любой текст выводился после вызова header(), или не выводился вообще!

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

    сейчас понял?
     
  7. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Проблема в том, что до этого, около года, я ссал против ветра весьма удачно. Ладно, спасибо и на этом...
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    мои соболезнования!
    в 4 года я был уверен, что умею летать. потом реальность настигла меня, это было обидно.
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Есть конфигурация php, которая позволяет такой фигне работать. Сейчас не помню как включается. Но лучше на такое не рассчитывать.
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Раньше буфер толще был. А теперь тебя научат писать программы правильно.
     
    denis01 нравится это.