Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Ausgabe definieren

Einklappen

Neue Werbung 2019

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

  • MySQL Ausgabe definieren

    Guten Abend zusammen,

    in meinem Sachverhalt hat jeder registrierte Benutzer seine eigene User ID, welche in meiner Datenbank "Users" in der Spalte "ID" gespeichert wird.

    Benutzer können Daten (z.B. Nachrichten) in der Datenbank "Kommunikation" über ein Formular eintragen, wobei ich festgelegt habe, dass ebenfalls die jeweilige User ID mitgesendet und in der Datenbank gespeichert wird, um alle Einträge zuordnen zu können.

    Wie muss ich folgenden PHP Code anpassen, damit der Benutzer bei der Ausgabe der Datenbank NUR seine eigenen Einträge sehen kann, also jene, bei welchen die eigene User ID in der Tabelle mit dem Eintrag gespeichert ist?

    Ich weiß ungefähr, dass man die SELECT Abfrage definieren kann..(z.B. SELECT * FROM Kommunikation WHERE $id = $userid .. <- ungefähr so? ) allerdings weiß ich nicht genau, wie es richtig aussehen muss.

    PHP-Code:
    <?php
    $pdo 
    = new PDO('mysql:host=;dbname=;charset=utf8''''');
    $show_form false;
    $error null;

    //Das Formular wurde abgesendet, überprüfe den Inhalt und speichere es ab
    if(isset($_GET['submit'])) {
     
    $name trim($_POST['name']);
     
    $name trim($_POST['name']);
     
    $email trim($_POST['email']);
     
    $text trim($_POST['text']);

     
    //Überprüfen dass die E-Mail-Adresse gültig ist
     
    if(!filter_var($emailFILTER_VALIDATE_EMAIL)) {
     
    $error 'Bitte eine gültige E-Mail-Adresse eingeben!<br>';
     } else if(empty(
    $name)) {
     
    $error 'Bitte einen Namen ein!<br>';
     } else if(empty(
    $text)) {
     
    $error 'Bitte eine Nachricht eingeben!<br>';
     } else {
     
    $statement $pdo->prepare("INSERT INTO kommunikation (name, email, text) VALUES (:name, :email, :text)");
     
    $result $statement->execute(array('name' => $name'email' => $email'text' => $text));

     if(
    $result) {
     echo 
    '<b>Dein Beitrag wurde erfolgreich veröffentlicht.</b><br><br>';
     
    $show_form false;
     } else {
     
    $error 'Dein Beitrag konnte nicht veröffentlicht werden.<br>';
     }
     }
    }
    ?>

    <?php
    if(!is_null($error)) { //Ein Fehler ist aufgetreten
     
    echo $error;
    }

    //Ausgabe des Formulars nur wenn $showForm == true ist
    if($show_form):
    ?>
     <form action="?submit=1" method="post">
     Name:<br>
     <input type="text" size="40" maxlength="250" name="name"><br><br>

     E-Mail:<br>
     <input type="email" size="40" maxlength="250" name="email"><br><br>

     Text:<br>
     <textarea cols="50" rows="9" name="text"></textarea><br><br>

     <input type="submit" value="Eintragen">
     </form>
    <?php
    endif;
    ?>

    <hr>

    <?php
    /***********************
     * Ausgabe der Einträge
     ***********************/

    //Ermittelt die Anzahl der Beiträge
    $statement $pdo->prepare("SELECT COUNT(*) AS anzahl FROM kommunikation WHERE deleted_at IS NULL");
    $statement->execute();
    $row $statement->fetch();
    $anzahl_eintrage $row['anzahl'];
    echo 
    "";


    //Berechne alles notwendige für die Blätterfunktion
    $seite 1;
    if(isset(
    $_GET['seite'])) {
     
    $seite intval($_GET['seite']);
    }

    $beitraege_pro_seite 20;
    $start = ($seite-1)*$beitraege_pro_seite;

    //Abfrage der Datenbank und Ausgabe der Daten
    $statement $pdo->prepare("SELECT * FROM kommunikation WHERE deleted_at IS NULL ORDER BY created_at DESC LIMIT :start, :limit");
    $statement->bindParam(':start'$startPDO::PARAM_INT);
    $statement->bindParam(':limit'$beitraege_pro_seitePDO::PARAM_INT);
    $statement->execute();
    while(
    $row $statement->fetch()) {
     
    $name htmlentities($row['name']);
     
    $email htmlentities($row['email']);
     
    $text nl2br(htmlentities($row['text']));
     
    $date = new DateTime($row['created_at']);
     
    $dateFormatted $date->format('d.m.y H:i');

     echo 
    "
     <button class='site-btn sb-line mr-4 mb-4'><i class='fa fa-user' aria-hidden='true'></i> <b><u>
    $name</u></b> <small>($dateFormatted Uhr)</small><hr>
     
    $text</button>
     <br>"
    ;

    }


    //Berechne die Anzahl der Seiten:
    $anzahl_seiten ceil($anzahl_eintrage floatval($beitraege_pro_seite));

    //Ausgabe der Seitenlinks:
    echo "<div align="center">";
    echo 
    "<b>Seite:</b> ";


    //Ausgabe der Links zu den verschiedenen Seiten
    for($a=1$a <= $anzahl_seiten$a++) {
     
    //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
     
    if($seite == $a){
     echo 
    " <b>$a</b> ";
     } else { 
    //Aus dieser Seite ist der User nicht, also einen Link ausgeben
     
    echo " <a href="?seite=$a">$a</a> ";
     }
    }
    echo 
    "</div>";

    ?>

  • #2
    SQL-Grundlagen lernen:

    https://www.w3schools.com/sql/sql_where.asp

    Kommentar


    • #3
      Das habe ich mir bereits angesehen, aber dort keine Lösung gefunden, wie ich in der MySQL Abfrage die eigene $userid verlinken kann, sodass mir nur die Einträge angezeigt werden, bei welchen die "ID" mit meiner eigenen User ID übereinstimmt..

      Kommentar


      • #4
        Ich sehe in dem Code nirgendwo einen Benutzer. Wo soll der herkommen? Zauberei?

        Kommentar


        • #5
          Sry, das war lediglich der PHP Code für das Formular und die Ausgabe..

          habe am Anfang jeder Seite folgenden Code für den Benutzer:

          PHP-Code:
          <?php
          session_start
          ();
          require_once(
          "inc/config.inc.php");
          require_once(
          "inc/functions.inc.php");

          //Überprüfe, ob der User eingeloggt ist
          //Der Aufruf von check_user() muss in alle internen Seiten eingebaut sein
          $user check_user();

          ?>

          Kommentar


          • #6
            Und was jetzt in $user drin steht, darf man jetzt raten?

            Kommentar


            • #7
              Verzeihung..

              PHP-Code:
              <?php

              include_once("password.inc.php");

              /**
               * Checks that the user is logged in. 
               * @return Returns the row of the logged in user
               */
              function check_user() {
                  global 
              $pdo;

                  if(!isset(
              $_SESSION['userid']) && isset($_COOKIE['identifier']) && isset($_COOKIE['securitytoken'])) {
                      
              $identifier $_COOKIE['identifier'];
                      
              $securitytoken $_COOKIE['securitytoken'];

                      
              $statement $pdo->prepare("SELECT * FROM securitytokens WHERE identifier = ?");
                      
              $result $statement->execute(array($identifier));
                      
              $securitytoken_row $statement->fetch();

                      if(
              sha1($securitytoken) !== $securitytoken_row['securitytoken']) {
                          
              //Vermutlich wurde der Security Token gestohlen
                          //Hier ggf. eine Warnung o.ä. anzeigen

                      
              } else { //Token war korrekt
                          //Setze neuen Token
                          
              $neuer_securitytoken random_string();
                          
              $insert $pdo->prepare("UPDATE securitytokens SET securitytoken = :securitytoken WHERE identifier = :identifier");
                          
              $insert->execute(array('securitytoken' => sha1($neuer_securitytoken), 'identifier' => $identifier));
                          
              setcookie("identifier",$identifier,time()+(3600*24*365)); //1 Jahr Gültigkeit
                          
              setcookie("securitytoken",$neuer_securitytoken,time()+(3600*24*365)); //1 Jahr Gültigkeit

                          //Logge den Benutzer ein
                          
              $_SESSION['userid'] = $securitytoken_row['user_id'];
                      }
                  }


                  if(!isset(
              $_SESSION['userid'])) {
                      
              header('location: loginform.php');
                  }


                  
              $statement $pdo->prepare("SELECT * FROM users WHERE id = :id");
                  
              $result $statement->execute(array('id' => $_SESSION['userid']));
                  
              $user $statement->fetch();
                  return 
              $user;
              }

              /**
               * Returns true when the user is checked in, else false
               */
              function is_checked_in() {
                  return isset(
              $_SESSION['userid']);
              }

              /**
               * Returns a random string
               */
              function random_string() {
                  if(
              function_exists('openssl_random_pseudo_bytes')) {
                      
              $bytes openssl_random_pseudo_bytes(16);
                      
              $str bin2hex($bytes); 
                  } else if(
              function_exists('mcrypt_create_iv')) {
                      
              $bytes mcrypt_create_iv(16MCRYPT_DEV_URANDOM);
                      
              $str bin2hex($bytes); 
                  } else {
                      
              //Replace your_secret_string with a string of your choice (>12 characters)
                      
              $str md5(uniqid('your_secret_string'true));
                  }    
                  return 
              $str;
              }

              /**
               * Returns the URL to the site without the script name
               */
              function getSiteURL() {
                  
              $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" "http://";
                  return 
              $protocol.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/';
              }

              /**
               * Outputs an error message and stops the further exectution of the script.
               */
              function error($error_msg) {
                  include(
              "templates/header.inc.php");
                  include(
              "templates/error.inc.php");
                  include(
              "templates/footer.inc.php");
                  exit();
              }

              Kommentar


              • #8
                Toll, da steht ein SELECT * und deshalb weiß man immer noch nicht, was drin steht.

                Einer der Gründe, warum man kein SELECT * verwenden sollte. Bitte korrigiere das.

                Kommentar


                • #9
                  Könnte es vielleicht damit klappen?
                  PHP-Code:
                  "SELECT * FROM users WHERE id = :id" 

                  Kommentar


                  • #10
                    Was könnte damit klappen? Das ist nur ein String mit SQL-Code. Was willst du damit sagen?

                    Kommentar


                    • #11
                      Ich beziehe mich dabei auf den SQL Befehl für die Ausgabe
                      PHP-Code:
                      $statement $pdo->prepare("SELECT * FROM users WHERE deleted_at IS NULL 
                      , wobei auf diese Weise alle Daten die "nicht gelöscht" sind, angezeigt werden, also bin ich doch in der Annahme richtig, dass man "deleted_at" entsprechend ersetzen muss, um die Ausgabe zu ändern, oder? Daher meine Frage, wie ich es genau anpassen muss, dass nur die Einträge mit der User ID angezeigt werden..

                      Kommentar


                      • #12
                        Wie würdest du es denn ohne PHP machen? Der ganze PHP-Code hat a bei Fragen zur Datenbank eigentlich gar nichts verloren.

                        Kommentar


                        • #13
                          Ich denke ohne PHP geht das nicht oder? Ja das Thema sollte eigentlich in PHP rein.. aber ich wäre Dir dankbar für einen Hinweis, wie ich dies nun umsetzen kann.

                          Kommentar


                          • #14
                            Zitat von AlPaGae Beitrag anzeigen
                            Daher meine Frage, wie ich es genau anpassen muss, dass nur die Einträge mit der User ID angezeigt werden..
                            Ist das wirklich dein Ernst? Du hast in #7 dreimal eine WHERE-Bedingung drin, einmal davon sogar auf die User-ID in der User-Tabelle wo liegt also das Problem das auf die Tabelle (nicht Datenbank!) mit den Nachrichten anzuwenden? Oder scheiterst du daran mehrere Bedingungen zu verwenden? In dem Fall solltest du dem Link in #2 nochmal folgen und das nächste Kapitel auch anschauen (gerne auch noch mehr).

                            Kommentar


                            • #15
                              Zitat von AlPaGae Beitrag anzeigen
                              Ich denke ohne PHP geht das nicht oder?
                              Doch. hellbringer will damit sagen dass der PHP-Code für dein Problem irrelevant ist (deswegen in "Datenbanken" schon richtig), du brauchst nur die richtige Datenbankabfrage und die ist vom PHP-Code völlig unabhängig.

                              Kommentar

                              Lädt...
                              X