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

Co tu jest znowu źle?

Hosting forpsi easy 1 pln
0 głosów
160 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 (286,610 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 (210,670 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 (286,610 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,465 wizyt
pytanie zadane 23 października 2015 w C i C++ przez szymi666 Bywalec (2,020 p.)
0 głosów
3 odpowiedzi 190 wizyt
pytanie zadane 29 października 2015 w C i C++ przez KlataMiLata Bywalec (2,120 p.)
0 głosów
0 odpowiedzi 91 wizyt
pytanie zadane 12 czerwca 2020 w C# przez milyy Nowicjusz (240 p.)

92,092 zapytań

140,751 odpowiedzi

317,718 komentarzy

61,409 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 0p. - 13NOONE37
  2. 0p. - Kacper Bogucki
  3. 0p. - Michal Drewniak
  4. 0p. - Radosław Kawka
  5. 0p. - CC PL
  6. 0p. - Takor0
  7. 0p. - Voribel
  8. 0p. - Mateusz Bogdan
  9. 0p. - Adam Śpiewak
  10. 0p. - overcq
  11. 0p. - Arkadiusz Olczak
  12. 0p. - TheLukaszNs
  13. 0p. - Mateusz Sobala
  14. 0p. - Mawrok
  15. 0p. - Innro
Szczegóły i pełne wyniki

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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (jeszcze tylko dziś 30.11 z okazji Black Week, a potem będzie to 30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 15% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...