Ankündigung

Einklappen
Keine Ankündigung bisher.

Prüfen ob $_GET Wert verfügbar ist

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Prüfen ob $_GET Wert verfügbar ist

    Hallo, ich habe eine Frage und zwar.
    Ich übergebe per $_GET die id an eine neue Seite. Hier werden alle Inhalte ausgelesen. Funktioniert alles wunderbar:

    PHP-Code:
    <?php
    include 'inc/config.php';

    $database->query("SELECT * FROM posts WHERE id = :id");
    $database->bind(':id'htmlspecialchars($_GET['id']));
    $stmt $database->resultset();

    if (isset(
    $_GET['id'])) {
        foreach (
    $stmt as $row):
            
    ?>
            <div>
                <h1><?php echo $row['title']; ?></h1>
                <p><?php echo $row['text']; ?></p>
                <p><?php echo date('d.m.Y - H:i'strtotime($row['date'])); ?></p>
            </div>
            <a href="javascript:history.back();">zurück</a>
            <?php
        
    endforeach;
    }
    Wenn ich nun aber in der URL einen Wert für die id vergebe, welcher in der Datenbank nicht vorhanden ist, bekomme ich eine weiße Seite angezeigt.
    Kann ich das irgendwie umgehen? mit einer 404er Seite z. B.?

    Danke euch schonmal.


  • #2
    Ein Stichwort: num_rows
    Übrigens solltest du das isset() prüfen bevor du die Variable nutzt.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Moin, du solltest die Abfrage, ob $_GET['id'] gesetzt ist, durchführen, bevor du auf den übergebenen Wert zugreifen willst. Also
      PHP-Code:
      if (isset($_GET['id'])) {
      $database->query("SELECT * FROM posts WHERE id = :id");
      $database->bind(':id'htmlspecialchars($_GET['id'])); 
      Als nächstes kannst du einfach prüfen, wie viele Ergebnisse du von der Datenbankabfrage bekommst und entsprechend darauf reagieren. z.B.
      PHP-Code:
      if(count($result) > 0){
          
      $mach();
      }else{
          echo 
      'Keine passenden Einträge gefunden.';

      Relax, you're doing fine.
      RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

      Kommentar


      • #4
        Vielen Dank euch 2. Habs jetzt so gemacht:
        PHP-Code:
        <?php
        include 'inc/config.php';

        if (isset(
        $_GET['id'])) {
            
        $database->query("SELECT * FROM posts WHERE id = :id");
            
        $database->bind(':id'htmlspecialchars($_GET['id']));
            
        $stmt $database->resultset();
            
        $single $database->single();

            if (
        count($stmt) > 0) {
                foreach (
        $stmt as $row):
                    
        ?>
                    <div>
                        <h1><?php echo $row['title']; ?></h1>
                        <p><?php echo $row['text']; ?></p>
                        <p><?php echo date('d.m.Y - H:i'strtotime($row['date'])); ?></p>
                    </div>
                    <a href="javascript:history.back();">zurück</a>
                    <?php
                
        endforeach;
            } else {
                
        $redirect->toIndex();
            }
        } else {
            echo 
        'Diese Seite existiert nicht';
        }
        das funktioniert.
        Brauche ich bei den bindParams eigentlich htmlspecialchars()?

        Kommentar


        • #5
          Nein.

          htmlspecialchars() benutzt du, wenn du Eingaben von Usern darstellen möchtest.
          Bei Prepared Statements musst du die Eingaben vom User nicht extra escapen, das übernimmt die Datenbank / die Funktionsweise der Prepared Statements.
          Bei "normalen" Queries mit Werten von Usern nimmst du dann die Funktion, die von der Datenbank-API zur verfügung gestellt wird. (mysqli - mysqli_real_escape_string(), pdo - quote(), ...)
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            Was nahelegt, grundsätzlich nur prepared statements zu nutzen.

            Kommentar

            Lädt...
            X