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

Dlaczego nic się nie wypisuje?

Mały hosting, OGROMNE możliwości
0 głosów
760 wizyt
pytanie zadane 9 września 2021 w PHP przez Huberti Gaduła (4,500 p.)

Dlaczego poniższy kod nie dostaje się do instrukcji echo "I'm here 1"; oraz echo "I'm here 2";? Z logicznego punktu widzenia powinno być to nie możliwe. Przecież jest if z GET, który się nie wykona, więc powinna użyć się klauzula else, natomiast u mnie nic się nie wypisuje.

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Question</title>
    <link rel="stylesheet" href="style.css">
</head>

<body>
    <div>
        <a href="index.php">
            <img id="logo" src="logo.png" width="100px" height="100px" style="margin-left: 400px;">
        </a>
    </div>
    <?php
    $connection = mysqli_connect("XXX", "XXX", "XXX", "XXX");
    if (isset($_POST['answer'])) {
        $stmt = mysqli_prepare($connection, "INSERT INTO `answers`(`questionId`, `dateAndTime`, `answer`) VALUES (?,(SELECT now()),?");
        $stmt->bind_param("ss", $a, $b);
        $a = $_SESSION['id'];
        $b = $_POST['answer'];
        $stmt->execute();
        $result = $stmt->get_result();
        if (!$result) {
            echo mysqli_error($connection);
        }
        else{
            echo "Done";
        }
    }
    if (isset($_GET['id'])) {
        echo "I'm here 1";
        $stmt = mysqli_prepare($connection, "SELECT posts.title,posts.body FROM posts WHERE posts.id=?");
        $stmt->bind_param("s", $id);
        $id = $_GET['id'];
        $_SESSION['id'] = $id;
        $stmt->execute();
        $result = $stmt->get_result();
        while ($row = mysqli_fetch_assoc($result)) {
            echo '<div style="font-size: 42px;">', $row['title'], "</div><div>", $row['body'], "</div>";
        }
    } else {
        echo "I'm here 2";
        $stmt = mysqli_prepare($connection, "SELECT posts.title,posts.body FROM posts WHERE posts.id=?");
        $stmt->bind_param("s", $id);
        $id = $_SESSION['id'];
        $stmt->execute();
        $result = $stmt->get_result();
        while ($row = mysqli_fetch_assoc($result)) {
            echo '<div style="font-size: 42px;">', $row['title'], "</div><div>", $row['body'], "</div>";
        }
    }
    ?>
    <form action="question.php" method="POST" style="display: flex; flex-direction: column;">
        <textarea name="answer" style="margin-top: 100px; width: 25%; height: 200px;"></textarea>
        <button type="submit" class="btn" style=" width: 5%; text-align: center;">Answer</button>
    </form>
</body>

</html>

 

1 odpowiedź

0 głosów
odpowiedź 9 września 2021 przez radek024 Szeryf (77,160 p.)
Zapytanie typu GET działa na zasadzie adresstrony.pl?id=1 - wówczas działa $_GET['id']. Czy sprawdziałeś takie coś? Ponadto, w echo nie powinienes wypuszczać kodu html. Wystarczy zamknąć klauzulę PHP i napisać normalny kod. Nie sprawdzasz też połączenia z bazą danych.
komentarz 9 września 2021 przez Huberti Gaduła (4,500 p.)

Zapytanie typu GET działa na zasadzie adresstrony.pl?id=1 - wówczas działa $_GET['id']. Czy sprawdziałeś takie coś?

Tak, sprawdzałem. Po ręcznym wpisaniu ?id=1 działa (wyświetla się I'm here 1 oraz po usunięciu jest I'm here 2). Problem polega na tym, że po naciśnięciu przycisku nic się nie pokazuje. Wiesz może dlaczego?

Ponadto, w echo nie powinienes wypuszczać kodu html. Wystarczy zamknąć klauzulę PHP i napisać normalny kod.

 To musi być w PHP, przecież wyświetlam dane z bazy danych.

Nie sprawdzasz też połączenia z bazą danych.

Dobry pomysł. Dzięki. 

komentarz 9 września 2021 przez radek024 Szeryf (77,160 p.)

Tak, sprawdzałem. Po ręcznym wpisaniu ?id=1 działa (wyświetla się I'm here 1 oraz po usunięciu jest I'm here 2). Problem polega na tym, że po naciśnięciu przycisku nic się nie pokazuje. Wiesz może dlaczego?

To wynika z faktu, że wysyłasz dane przez POST, a dalej - nie ma żadnego pola z [name=id]. Nic się nie pojawi, bo nie dość, że nie obsługujesz prawidłowej metody, to i bez ustawionego pola. 

 

Druga kwestia: czym się różni ten kod

$result = $stmt->get_result();
        while ($row = mysqli_fetch_assoc($result)) {
            echo '<div style="font-size: 42px;">', $row['title'], "</div><div>", $row['body'], "</div>";
        }

od tego?

$result = $stmt->get_result();
        while ($row = mysqli_fetch_assoc($result)) { ?>
            <div style="font-size: 42px;"><?php $row['title']; ?></div><div><?php $row['body']; ?></div>";
<?php
        }

Ano tym, że przynajmniej częściowo oddzielasz warstwę generowania strony przez serwer od gotowego kodu HTML, który jest tylko powtarzany. Idąc za dokumentacją:

echo — Output one or more strings

echo służy do wypychania tekstu, nie HTMLa.

komentarz 9 września 2021 przez radek024 Szeryf (77,160 p.)
No, zrobiłem babola :D jakiego - zagadka dla Ciebie. Kod w każdym razie nie wyświetli danych.
komentarz 10 września 2021 przez Huberti Gaduła (4,500 p.)

To wynika z faktu, że wysyłasz dane przez POST, a dalej - nie ma żadnego pola z [name=id]. Nic się nie pojawi, bo nie dość, że nie obsługujesz prawidłowej metody, to i bez ustawionego pola. 

Nie rozumiem. O jakie pole [name=id] Ci chodzi? Jaką metodę powinienem obsłużyć? No i o co chodzi w "to i bez ustawionego pola"? Jak dla mnie po naciśnięciu przycisku powinno wyświetlić się I'm here 2, a nic się nie pokazuje.

Podobne pytania

0 głosów
1 odpowiedź 534 wizyt
pytanie zadane 17 maja 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
2 odpowiedzi 304 wizyt
pytanie zadane 31 sierpnia 2015 w C i C++ przez Avernis Nałogowiec (27,400 p.)

93,717 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,261 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...