• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Co tu jest znowu źle?

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
212 wizyt
pytanie zadane 18 kwietnia 2019 w PHP przez trixter310 Obywatel (1,440 p.)

Co tu znowu tej przeglądarce nie pasuje?

Mam taki kod

<?php

require_once "connect.php";

$con = @new mysqli($host , $db_user, $db_password, $db_name);

$opd = " select * from anwser";
$anwser = $_POST['anwser'];
if($_POST['anwser']==true)
{
  echo "Zdobywasz punkt";
}
else
{
  echo "Brak punktu";
}

?>

Jak nic nie wpisze do inputów to wychodzi 

Notice: Undefined index: anwser in D:\xamp\htdocs\www\quiz.php on line 8

Notice: Undefined index: anwser in D:\xamp\htdocs\www\quiz.php on line 9
Brak punktu,

czyli teorytycznie działa, ale po co są te błędy?

2 odpowiedzi

+2 głosów
odpowiedź 18 kwietnia 2019 przez Arkadiusz Waluk Ekspert (289,230 p.)
wybrane 18 kwietnia 2019 przez trixter310
 
Najlepsza
Dopóki nic nie wpiszesz w pola i nie wyślesz formularza to te elementy nie istnieją w $_POST. Stąd właśnie komunikaty, że odwołujesz się do nieistniejących elementów. Wypadałoby sprawdzić czy tam są (np. isset) i dopiero wtedy się do nich odwołać czy tam wykonywać na nich jakieś operacje.

PS nadawaj lepsze tytuły pytań, "co tu nie działa" nikomu nic nie mówi.
PS2 przeglądarka nic do tego nie ma, to interpreter PHP.
komentarz 18 kwietnia 2019 przez trixter310 Obywatel (1,440 p.)
Dzięki
komentarz 18 kwietnia 2019 przez Ehlert Ekspert (214,270 p.)

Gdyby tak w wersji 8 php, zawartość posta była zwracana tylko przez funkcję... Która przy innych metodach http zwracałaby null... Cały ten rakowy kod musiałby ewaluować. Świat stawałby się lepszy.

@Arkadiusz Waluk co o tym myślisz?

komentarz 18 kwietnia 2019 przez Arkadiusz Waluk Ekspert (289,230 p.)
Dlaczego nie, byłoby to coś w przód. Z tym, że te same problemy są np. z danymi z GET, sesji, ciasteczek, więc jak już to zrobiłbym jeden standard dla wszystkiego. No i nie zawsze zwrócenie nulla może być pożądane, a te tablice jak rozumiem byłyby stopniowo wycofywane, aby to miało sens. Przydałaby się więc też funkcja sprawdzenia istnienia albo jakaś kontrola przez argument?

Inna rzecz, że wszystkiego zmianami w składni nie poprawimy i nawet nie ma sensu nadmiernie próbować. Jak ktoś nie umie pisać i nie może się nauczyć to po prostu nie umie, trudno. Pomimo starań i chęci wszystkiego się nie zrobi bez woli ludzi. Co innego jak to niewiedza, wtedy w akurat podanym przykładzie automatycznie by się naprawiało. Tylko to niestety też długi proces zanim ludzie zaczną się ogarniać, aby korzystać z nowszej wersji, tym bardziej ci nieświadomi.
0 głosów
odpowiedź 18 kwietnia 2019 przez mordimer Mądrala (5,720 p.)

Nie sprawdzasz czy istnieje ten klucz w tablicy $_POST stąd ten bład. Zobacz tak :

$opd = " select * from anwser";

if(isset($_POST['anwser']) && $_POST['anwser']==true)

 

komentarz 18 kwietnia 2019 przez trixter310 Obywatel (1,440 p.)
Czyli to mam dopisać?
komentarz 19 kwietnia 2019 przez mordimer Mądrala (5,720 p.)

Zobacz coś takiego :

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     var_dump($_POST);
}

zobaczysz wtedy jakie dane masz w tablicy post po wysłaniu forma. Jeżeli zrobiłeś tylko coś takiego:

if($_POST['anwser']==true){

}

A wchodzisz na dany adres pierwszy raz to zawsze dostaniesz błąd bo odwołujesz się do czegoś co nie istnieje. Natomiast jak wyślesz formularz postem  ale w tablicy $_POST nie będzie klucza "anwser" to również dostaniesz błąd. Dlatego to:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    //do tego ifa wejdzie tylko gdy wyślesz formularz metodą post
    var_dump($_POST);//to ci wypluje co masz w tej tablicy

    if(isset($_POST['anwser']) && $_POST['anwser'] == true){
    //tu wejdzie tylko gdy będzie istnieć w tablicy post klucz anwser i klucz anwser bedzie równy true
    }
}

zabezpieczy cię w tym przypadku.

komentarz 20 kwietnia 2019 przez trixter310 Obywatel (1,440 p.)

teraz mam taki kod

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    //do tego ifa wejdzie tylko gdy wyślesz formularz metodą post
    var_dump($_POST);//to ci wypluje co masz w tej tablicy
    require_once "connect.php";

    $con = @new mysqli($host , $db_user, $db_password, $db_name);
    $opd = "SELECT * FROM anwser";
    $anwser = $_POST['anwser'];
    if($_POST['anwser'])
    {
      echo "Zdobywasz punkt";
    }
    else
    {
      echo "Brak punktu";
    }
    }

    if(isset($_POST['anwser']) && $_POST['anwser'] == true){
    //tu wejdzie tylko gdy będzie istnieć w tablicy post klucz anwser i klucz anwser bedzie równy true
    }



?>

i takie błędy 

array(0) { } 
Notice: Undefined index: anwser in D:\xamp\htdocs\www\quiz.php on line 9

Notice: Undefined index: anwser in D:\xamp\htdocs\www\quiz.php on line 10

Podobne pytania

0 głosów
3 odpowiedzi 1,509 wizyt
pytanie zadane 23 października 2015 w C i C++ przez szymi666 Bywalec (2,020 p.)
0 głosów
3 odpowiedzi 256 wizyt
pytanie zadane 29 października 2015 w C i C++ przez KlataMiLata Bywalec (2,120 p.)
0 głosów
0 odpowiedzi 128 wizyt
pytanie zadane 12 czerwca 2020 w C# przez milyy Nowicjusz (240 p.)

93,096 zapytań

142,059 odpowiedzi

321,514 komentarzy

62,441 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...