liebewinter: Probleme Data in Date-Bank zu einsetzen

0 53

Probleme Data in Date-Bank zu einsetzen

liebewinter
  • datenbank
  • php
  1. 1
    Rolf B
    1. 0
      liebewinter
    2. 0
      dedlfix
  2. 0
    pl
    1. 1
      Rolf B
      1. 0
        liebewinter
        1. 0
          Rolf B
          1. 0
            liebewinter
      2. 0
        liebewinter
        1. 0
          Rolf B
          1. 0
            liebewinter
            1. 0
              liebewinter
              1. 0
                liebewinter
                1. 0
                  Rolf B
                  1. 0
                    Wallpappe
                  2. 0
                    dedlfix
                    1. 0
                      Rolf B
                      1. 0
                        dedlfix
                        1. 0
                          Rolf B
                          1. 0
                            liebewinter
                            1. 0
                              Rolf B
                              1. 0
                                liebewinter
                                1. 0
                                  Rolf B
                                  1. 0
                                    liebewinter
                                    1. 0
                                      Rolf B
                                      1. 0
                                        liebewinter
                                        1. 0
                                          Rolf B
                                          1. 0
                                            liebewinter
                                            1. 0
                                              liebewinter
                                            2. 0
                                              Rolf B
                                              1. 0
                                                Tabellenkalk
                                                1. 0
                                                  Rolf B
                                              2. 0
                                                liebewinter
                                              3. 0
                                                liebewinter
                                                1. 0
                                                  Rolf B
                                                  1. 0
                                                    liebewinter
                                                    1. 0
                                                      liebewinter
                                                    2. 0
                                                      Rolf B
                                                      1. 0
                                                        liebewinter
                                                        1. 0
                                                          Rolf B
                                                          1. 0
                                                            liebewinter
                                                            1. 0
                                                              liebewinter
                                                          2. 0
                                                            liebewinter
                                                            1. 0
                                                              liebewinter
                                                              1. 0
                                                                Rolf B
                                                                1. 0
                                                                  liebewinter
                              2. 0
                                liebewinter
                                1. 0
                                  Rolf B
                                  1. 0
                                    Matthias Apsel
                                    1. 0
                                      Rolf B
                  3. 0
                    liebewinter
    2. 0
      pl

Hallo, Ich habe diese PHP Datei um Form zu Verwalter…

<?php


class ClassProveContakt3 
{

      private $Name;
      private $Email;
      private $Message;
      private $PostOK;
      private $DateTime;
      private $items;
      

 
    function __construct() 
    {

         $this -> ips = $_SERVER['REMOTE_ADDR'];
         $this -> DateTime = date('m/d/Y h:i:s a');  
         $this -> items = ['Name', 'Email', 'Message']; 
          
         $flag = true;
          foreach ( $this -> items as $key ) {  
			           if ( empty ( $_POST[$key] ) )  {
			             $flag = false;    
			           } else {    
			             $this -> $key = trim( filter_var( $_POST[$key], FILTER_SANITIZE_STRING ) );
			            }    
		   }	     
         $this -> PostOk = $flag; 
    }

 
    

  
    function ShowForm() 
    {
?>
      <form  method="POST">
        <label for="name"><b>Name * </b></label>
        <input type="text" id="name" name="Name" value="">
        <label for="email"><b>E-mail * </b></label>
        <input type="email" id="email" name="Email" value="">
        <br><br>
        <label><b> Message * </b><br>
           <textarea cols="45" rows="6" id="text" name="Message"></textarea>      
        </label>
        <br><br>
        <input  type="submit" name="post" value="POST COMMENT" id="comment">
      </form>
<?php
    }
   
  
       
       
      function PostOkT() 
      {

     
              
        

 
               if ($this -> PostOK) 
               {
                 return;
                 
               }     
                   if (empty($this->Name) ||  empty($this->Email) || empty($this->Message))
                   {
                   
                       echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";  
               
                  
                   } 
                   else 
                   {
                   
                       $datetime = date('m/d/Y h:i:s a', time());
                       $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);
                       
    	                 
    			       
                                echo "<br>"

                                      . "<b>From: </b>" . htmlspecialchars( $data["name"])
                                      . "<b> at: </b>" . htmlspecialchars( $data["datetime"])   
                                      
                                       . "<br><br>" . htmlspecialchars( $data["message"])
                                      
                                       . "<br><hr>";
        
                       
               
                    }

                   

       
       }
       function sql()
       {
          

         $datetime = date('m/d/Y h:i:s a', time());
         $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime, "ips" => $this->ips );




          $connection = mysql_connect("localhost", "root", "pass"); // Establishing Connection with Server
          $db = mysql_select_db("meine", $connection); // Selecting Database from Server
          if(isset($_POST['submit'])){ // Fetching variables of the form which travels in URL
          $name = $_POST['name'];
          $email = $_POST['email'];
          $message = $_POST['message'];
          $datatime = $DateTime;
          $ips = $ips;


          if($name !=''||$email !=''|| $message !=''){
           //Insert Query of SQL
          $query = mysql_query("insert into mela(name, email, message, datetime, ips) values ('$name', '$email', '$message', '$datatime)");
            echo "<br/><br/><span>Data Inserted successfully...!!</span>";
          }
          else{
            echo "<p>Insertion Failed <br/> Some Fields are Blank....!!</p>";
          }
        }
        mysql_close($connection); // Closing Connection with Server   
      } 

}       
      
            
$Newobject = new ClassProveContakt3();
$Newobject -> ShowForm();
$Newobject ->  PostOkT(); 

?>

und hier my html Code;

<?php
 
 header('Content-Type: text/html; Charset=utf-8');
 mb_internal_encoding('UTF-8');
 date_default_timezone_set('UTC');
 ini_set('display_errors', 1);
 ini_set('display_startup_errors', 1);
 error_reporting(E_ALL);
?> 


<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
	<title>Computer</title>


<style>
<?php 

 include 'hope_windows.css';
 include 'hope_query.css'; 
   
?>
</style>

<style>
.mellat {

 padding-bottom: 80px;
}

</style>



</head>

<div class="mela"></div>

<body>

<nav id="navs">
   <ul>
    <li><a href="about_us.php">About Us</a></li>
    <li><a href="contact.php">Contact</a></li>
  </ul>
  <ul>
    <li><a href="index.php">Home</a></li>
    <li class="dropdown">
      <a href="#" class="dropbtn">Windows</a>
      <div class="dropdown-content">
       <a href="linux_mint.php">Windows 7</a>
       <a href="ubuntu.php">Windows 8</a>
       <a href="debian.php">Windows 10</a>
       <a href="android.php">Windows 10.2</a>
      </div>
     </li>
     <li class="new-link">
       <a href="#" class="neuen">News & More</a>
       <div class="new-content">
          <a href="#">News</a>
          <a href="#">lerne</a>
        </div>
      </li>
      <li><a href="#">Bücher</a></li>
   </ul>
</nav>



<main  class="mellat">

<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 
</p>
<br>

<p><b id='adderiren'>You comment or question is welcome </b></p>
<br>


<?php
require 'classprove.php';
?>
         
      

</main>

<aside></aside>

<footer id="copry" >
	<p>My Website: Computer and More  © 2019. All Rights Reserved.</p>
<a id="img1" href="https://creativecommons.org/licenses/by-nc-nd/4.0/">
<picture>
  <source media='(max-width: 40em)' srcset='/Photo/Small_by-nc-nd.png'>
  <source media='(max-width: 47.9375em) and (orientation: landscape)' srcset='/Bilder/Small_by-nc-nd.png'>
  <source media='(min-width: 80em)' srcset='/Photo/by-nc-nd.png'>
  <img alt="Creative Commons License" src="/Photo/by-nc-nd.png" style="width:auto;"></a>
</picture>
<p>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
	Content of this site cannot be republished either online or offline without our permissions. </p>

</footer>


</body>
</html>

wenn füllen auf auf mein comment , er zeigt auf dem Webseite , wie der Screeshot zeigt,

Komment Formular

aber wird nichts geschickt auf meine Datenbank.... Ich arbeite mit Localhost

  1. Hallo Joseba,

    die mysql-Funktionen darfst Du nicht mehr verwenden. Sie sind seit mehreren PHP Versionen nicht mehr erwünscht und in PHP 7 sind sie gar nicht mehr enthalten. Verwende statt dessen die mysqli-Funktionen.

    Du musst nach jedem mysqli-Aufruf prüfen, ob dabei ein Fehler entstanden ist. Fehler im SQL, Fehler in den Daten, es gibt viele Gründe für Fehler. Schau in die PHP Dokumentation, da steht für jede mysqli-Funktion genau aufgeschrieben, was sie bei Fehlern zurückgibt.

    Wenn eine SQL-Funktion bei Fehlern FALSE zurückgibt, denke daran, das immer mit === zu prüfen. Der == Vergleich versucht, unterschiedliche Datentypen an einander anzupassen, und das wäre hier ein Problem. Wenn eine SQL Funktion einen Fehler meldet, kannst Du die Funktion mysqli_error($connection) verwenden, um einen Fehlertext dazu zu bekommen.

    Deine Prüfung if ($name !='' || $email !=''|| $message !='') { scheint mir falsch zu sein. Du möchtest, dass alle Felder ausgefült sind? Dann musst Du && verwenden, nicht ||.

    Das Thema "Kontextwechsel" musst Du auch noch lernen. Wenn Du aus Benutzereingaben einen SQL Befehl zusammenbaust, kann dein Benutzer damit jede Menge Unsinn machen. Ich könnte auf diese Weise deine Datenbank löschen. Du musst die Funktion mysqli_escape_string verwenden, um einen Eingabewert so zu übersetzen, dass er im SQL nichts kaputtmachen kann. Oder Du musst mit Prepared Statements arbeiten, aber das ist noch komplizierter.

    Das Thema "Kontextwechsel" hast Du erneut, wenn Du einen Kommentar wieder ausgeben willst. Jetzt musst Du daran denken, htmlspecialchars zu verwenden. Denn ein böser Kommentierer könnte Dir ein <script> HTML in den Kommentar schreiben, und auf einmal passieren schreckliche Dinge.

    Rolf

    --
    sumpsi - posui - clusi
    1. Danke für deinen empfehlungen ! , ich werde sie folgen .

      Du musst nach jedem mysqli-Aufruf prüfen, ob dabei ein Fehler entstanden ist. Fehler im SQL, Fehler in den Daten, es gibt viele Gründe für Fehler. Schau in die PHP Dokumentation, da steht für jede mysqli-Funktion genau aufgeschrieben, was sie bei Fehlern zurückgibt.

      ich bekomme sehr oft Fehrler Meldungen...auch wenn bis jetzt , nur benutze sie um zu lernen... ich bin mit Myphpadmin .

    2. Tach!

      Wenn eine SQL-Funktion bei Fehlern FALSE zurückgibt, denke daran, das immer mit === zu prüfen. Der == Vergleich versucht, unterschiedliche Datentypen an einander anzupassen, und das wäre hier ein Problem.

      Nein, meistens nicht. Wenn nicht irgendeine der Methoden oder Eingeschaften explizit eine Zahl zurückgibt, sind die Rückgabewerte auch ohne typsicheren Vergleich eindeutig von false unterscheidbar. Man kann typsicher vergleichen, muss es aber nicht, weil es weder eine technische Notwendigkeit gibt, das zu tun oder es zu lassen. Man muss also nicht umständlich

      if (mysqli_query($link, "SQL") === FALSE)
      

      schreiben, sondern kann es problemlos zu

      if (!mysqli_query($link, "SQL"))
      

      abkürzen. Wichtiger als sich das typsichere Vergleichen prinzipiell anzugewöhnen, sehe ich, sich zu jeder verwendeten Funktion im Handbuch zu informieren, was im Gutfall und was im Fehlerfall zurückgegeben wird. Dann sollte man sich überlegen, wie man diese Werte unterscheidet (meist if-else), was im Fehlerfall die beste Reaktion ist, und entsprechenden Code schreiben, diese Fehlerfälle abzufangen.

      Außerdem empfehle ich, auf PDO statt auf mysqli zu setzen, denn PDO ist an vielen Stellen angenehmer zu verwenden (beispielsweise Prepared Statements).

      Das Thema "Kontextwechsel" musst Du auch noch lernen.
      Das Thema "Kontextwechsel" hast Du erneut, [...]

      Da man das Thema überall hat, haben wir zum Kontextwechsel einen zweiseitigen Artikel im Wiki.

      dedlfix.

  2. Deine <input name=..> lauten Name, Email, Message. Du jedoch ermittelst

    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    

    unter Missachtung der Großkleinschreibung. Von daher erhältst Du keine Daten. MFG

    1. Hallo pl,

      oh. Danke für den Hinweis.

      Joseba, ich habe mal wieder eine lange Geschichte für Dich.

      • die Funktion sql() wird nicht aufgerufen
      • die Methode PostOkT sollte eigentlich benutzt werden, um einen POST zu verarbeiten. Aber:
        • Der Konstruktor von ClassProveContakt3 liest die $_POST Variablen aus und speichert sie in Eigenschaften des Objekts ($this->Name, $this->Email, $this->Message.
        • Der Konstruktor setzt PostOK auf FALSE wenn ein Wert fehlt
        • In PostOkT() wird abgefragt, ob PostOK TRUE ist, und wenn ja, wird die Methode verlassen. D.h. PostOkT läuft nur durch, wenn Eingabewerte fehlen. Das sieht falsch aus.
        • In PostOkT wird als nächstes abgefragt ob Eingabefelder leer sind und eine Fehlermeldung ausgegeben. Die Information "es gibt leere Eingabefelder" wird aber schon daran erkannt, dass $this->PostOK den Wert FALSE hat.
      • Dein Objekt hat bereits eine $DateTime Eigenschaft, die sollte man im Konstruktor setzen und dann nur noch verwenden.

      Das heißt:

      Vor dem Konstruktor fügst Du hinzu:

            private $ips;
      

      Denn du speicherst $_SERVER['REMOTE_ADDR'] in dieser Eigenschaft. Dann sollte man die Eigenschaft auch deklarieren. Beachte die Regeln zum Datenschutz: Wenn Du eine IP in der Datenbank speicherst, musst Du das in deiner Datenschutzerklärung aufschreiben. Und du musst einen Grund haben, warum Du die IP speicherst.

      Im Konstruktor fügst Du hinzu:

            $this->DateTime = date('m/d/Y h:i:s a', time());
      

      ABER: das ist USA-Datumsformat. Für welches Land willst Du deine Seite machen?

      Deine Funktion PostOkT könnte so aussehen:

            function PostOkT() 
            {
               if (! $this -> PostOK)
               {
                  echo "<br><b><h3>*** Please enter all required fields ***</h3></b>";  
               } 
               else 
               {
                  echo "<br>"
                     . "<b>From: </b>" . htmlspecialchars( $this->Name )
                     . "<b> at: </b>" . htmlspecialchars( $this>DateTime )   
                     . "<br><br>" . htmlspecialchars( $this->Message )
                     . "<br><hr>";
                  $this->writeCommentToDatabase()
               }
            }
      

      Die sql()-Funktion habe ich umbenannt in writeCommentToDatabase. Gute Namen für Methoden sind wichtig. Deine sql-Funktion macht vieles, was bereits in PostItT gelaufen ist. Das kann man einfacher haben. Ich zeige auch mal wie deine mysqli-Aufrufe aussehen sollten.

            function writeCommentToDatabase()
            {
                // Establish connection with MYSQL Server
                // (select_db ist in mysqli nicht nötig, das macht man mit dem vierten Parameter
                //            der connect-Funktion)
                $connection = mysqli_connect("localhost", "root", "pass", "meine");
                if (mysqli_connect_error())
                {
                   echo "<br>Cannot connect to database: " . mysqli_connect_error();
                   return false;
                }
                $sqlDate = date("Y-m-d H:i:s");   // DateTime für SQL
                
                $sName = mysqli_real_escape_string($connection, $this->Name);
                $sEmail= mysqli_real_escape_string($connection, $this->Name);
                $sMessage = mysqli_real_escape_string($connection, $this->Name);
      
                //Insert Query of SQL
                $success = mysqli_query("INSERT INTO mela(name, email, message, datetime, ips) VALUES ('$sName', '$sEmail', '$sMessage', '$sqlDate', '$this->ips')");
                if ($success)
                  echo "<br/><br/><span>Data Inserted successfully...!!</span>";
                }
                else{
                  echo "<p>Insertion Failed <br/>" . mysqli_error($connection);
                }
              }
              mysqli_close($connection); // Closing Connection with Server   
              return $success;
            } 
      

      Beachte das Error-Handling bei Connect: Da kann man mysqli_error noch nicht verwenden, weil mysqli_error eine gültige Connection braucht.

      Wie Du das Datum in der Datenbank speicherst, darüber müssen wir reden. Dein $this->DateTime ist ein String, und ist für Menschen gemacht. Welchen Typ hat die Spalte datetime in deiner Datenbank? Ist es ein String? Ist es ein DateTime? Wenn es ein String ist, kannst Du das Datum speichern wie Du willst. Aber ein DateTime speichert man besser in einer DateTime-Column. In der mysqli-Schnittstelle gibt es aber eigentlich nur Strings. Um dein Datum für eie DateTime-Column zu übertragen, musst Du es als yyyy-mm-dd hh:mm:ss senden. Darum habe ich die Variable $sqlDate erzeugt. Ob das für Dich funktioniert, musst Du nun prüfen.

      MYSQLi gibt es auch in der objektorientierten Version. Damit sähe deine Funktion so aus:

            function writeCommentToDatabase()
            {
                // Establish connection with MYSQL Server
                $mysqli = new mysqli("localhost", "root", "pass", "meine");
                if ($mysqli->connect_error)
                {
                   echo "<br>Cannot connect to database: " . $mysqli->connect_error;
                   return false;
                }
                $sqlDate = date("Y-m-d H:i:s");   // DateTime für SQL
                
                $sName = $mysqli->escape_string($this->Name);
                $sEmail= $mysqli->escape_string($this->Email);
                $sMessage = $mysqli->escape_string($this->Message);
      
                //Insert Query of SQL
                $success = $mysqli->query("INSERT INTO mela(name, email, message, datetime, ips) VALUES ('$sName', '$sEmail', '$sMessage', '$sqlDate', '$this->ips')");
                if ($success)
                  echo "<br/><br/><span>Data Inserted successfully...!!</span>";
                }
                else{
                  echo "<p>Insertion Failed <br/>" . $mysqli->error;
                }
              }
              $mysqli->close();
              return $success;
            } 
      

      Ja, und Dedlfix schrieb, dass man besser PDO verwenden sollte. PDO ist eine Datenbankschnittstelle, die für alle Datenbanken gleich funktioniert. Es ist objektorientiert, und dass man mit MySQL arbeitet, legt man nur einmal beim Erzeugen des pdo-Objekts fest. Mit PDO sieht es etwas komplizierter aus (mehr Funktionsaufrufe, mehr Fehlerprüfung):

            function writeCommentToDatabase()
            {
                // Establish connection with MYSQL Server
                try
                {
                   $db = new PDO("mysql:dbname=meine;host=localhost", "root", "pass");
                }
                catch (PDOException $pe)
                {
                   echo "<br>Cannot connect to database: " . $pe->getMessage();
                   return false;
                }
      
                //Prepare Query of SQL
                $statement = $db->prepare("INSERT INTO mela(name, email, message, datetime, ips) VALUES (:name, :email, :message, :date, :ips)");
                if (!$statement)
                {
                   echo "<br><br>prepare failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                   $ok = FALSE;
                }
                else
                {
                   $ok = $statement->bindValue(':name', $this->Name, PDO::PARAM_STR);
                      && $statement->bindValue(':email', $this->Email, PDO::PARAM_STR);
                      && $statement->bindValue(':message', $this->Message, PDO::PARAM_STR);
                      && $statement->bindValue(':date', date("Y-m-d H:i:s"), PDO::PARAM_STR);
                      && $statement->bindValue(':ips', $this->ips, PDO::PARAM_STR);
                   if (!$ok)
                   {
                      echo "<br><br>bindValue failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                   }
                }
                if ($ok)
                {
                   $ok = $statement->execute();
                   if (!$ok)
                   {
                      echo "<br><br>execute failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                   }
                }
                echo "<br/><br/><span>Data Inserted successfully...!!</span>";
              }
              $db->close();
              return $ok;
            } 
      

      Eine solche Funktion sollte man in Teilfunktionen aufteilen, und das Öffnen der Datenbankverbindung macht man besser einmal zu Beginn des Scripts und stellt das Datenbank-Objekt dann global zur Verfügung (oder als Property deiner ClassProveContakt3 Klasse).

      Ja, es wird immer komplizierter. Aber dein Script hat auch schon eine Menge Aufgaben zu lösen.

      Rolf

      --
      sumpsi - posui - clusi
      1. Erste, viellllll Dank für deinen bemüht !!

        Auf meine http://localhost/contact.php , bekomme keine Fehler , aber wenn füllen der Form wird speichen weder auf contact.php noch Datenbank . Screenshot von meine Datenbank ,

        datenbank fehler meldung

        ich denke bei meinem function PostOkT() es fehlt etwas das sagt um zu speichen , wie meine function PostOkT() frühr hatte ,

         
              function PostOkT() 
              {
        
                       if ($this -> PostOK) 
                       {
                         return;
                         
                       }     
                           if (empty($this->Name) ||  empty($this->Email) || empty($this->Message))
                           {
                           
                               echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";  
                       
                          
                           } 
                           else 
                           {
                           
                           	
                              
                               
                               $file = "test.txt"; 
                               
                               
                               
                               $datetime = date('m/d/Y h:i:s a', time());
                               $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);
                               
            	                 
            			           $data = json_encode($data);
            		              file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);
                               
                               
                               $messages = file($file);
                              
            		              foreach ($messages as $value) {
            		                $data = json_decode($value, true);
            				                  
                
                                          
                                          echo "<br>"
        
                                              . "<b>From: </b>" . htmlspecialchars( $data["name"])
                                              . "<b> at: </b>" . htmlspecialchars( $data["datetime"])
                                              #. "<br><br>" . htmlspecialchars( $data["email"])                                     
                                              . "<br><br>" . htmlspecialchars( $data["message"])
                                              . "<br><hr>";
                
                               }
                       
                            }
        
                           
        
               
               }
        

        ich habe versuche ähnliche wie frühr hatte ,

        function PostOkT() 
              {
                 if (! $this -> PostOK)
                 {
                    echo "<br><b><h3>*** Please enter all required fields ***</h3></b>";  
                 } 
                 else 
                 {
                    
                   $file =  $this->writeCommentToDatabase();
        
        
                   $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "DateTime" => $datetime);  
          
                   $data = json_encode($data);
            		              file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);
                               
                               
                               $messages = file($file);
                              
            		              foreach ($messages as $value) {
            		                $data = json_decode($value, true);
            				                              
        
        
        
        
        
                    echo "<br>"
                       . "<b>From: </b>" . htmlspecialchars( $this->Name )
                       . "<b> at: </b>" . htmlspecialchars( $this>DateTime )   
                       . "<br><br>" . htmlspecialchars( $this->Message )
                       . "<br><hr>";
                    
                       
                 }
               }
            } 
        

        aber bekomme auch nichts...

        1. Hallo Joseba,

          lies dir genau durch was ich geschrieben habe. Das sollte deine Frage beantworten.

          in Kurzform: du musst die SQL Funktion auch aufrufen. Und wenn du PostOkT verlässt, wenn die Eingabe ok ist, KANN nichts passieren.

          Rolf

          --
          sumpsi - posui - clusi
          1. in Kurzform: du musst die SQL Funktion auch aufrufen.

            und wie wird sie gerufen ?

            wie habe jetzt meine Code,

            <?php
            
            
            class ClassProveContakt3 
            {
            
                  private $Name;
                  private $Email;
                  private $Message;
                  private $PostOK;
                  private $DateTime;
                  private $items;
                  private $ips; 
            
             
                function __construct() 
                {
            
                     $this -> ips = $_SERVER['REMOTE_ADDR'];
                     $this -> DateTime = date('m/d/Y h:i:s a');  
                     $this -> items = ['Name', 'Email', 'Message']; 
                      
                     
                     $flag = true;
                      foreach ( $this -> items as $key ) {  
            			           if ( empty ( $_POST[$key] ) )  {
            			             $flag = false;    
            			           } else {    
            			             $this -> $key = trim( filter_var( $_POST[$key], FILTER_SANITIZE_STRING ) ); 
            			            }    
            		   }	     
                     $this -> PostOk = $flag; 
                     
                }
            
             
                
            
              
                function ShowForm() 
                {
            ?>
                  <form  method="POST">
                    <label for="name"><b>Name * </b></label>
                    <input type="text" id="name" name="Name" value="">
                    <label for="email"><b>E-mail * </b></label>
                    <input type="email" id="email" name="Email" value="">
                    <br><br>
                    <label><b> Message * </b><br>
                       <textarea cols="45" rows="6" id="text" name="Message"></textarea>      
                    </label>
                    <br><br>
                    <input  type="submit" name="post" value="POST COMMENT" id="comment">
                  </form>
            <?php
                }
                function PostOkT() 
                {
                     if (! $this -> PostOK)
                     {
                        echo "<br><b><h3>*** Please enter all required fields ***</h3></b>";  
                     } 
                     else 
                     {
                        $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);
            
                         $file = $this->writeCommentToDatabase(); 
                         $data = json_encode($data);
                		              file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);
                                   
                                   
                                   $messages = file($file);
                                  
                		              foreach ($messages as $value) {
                		                $data = json_decode($value, true);
                				                 
            
            
            
            
                          echo "<br>"
                           . "<b>From: </b>" . htmlspecialchars( $this->Name )
                           . "<b> at: </b>" . htmlspecialchars( $this>DateTime )   
                           . "<br><br>" . htmlspecialchars( $this->Message )
                           . "<br><hr>";
                        
                     }
                    
                 } 
            
            
            
            
            
                function writeCommentToDatabase()
                {
                      // Establish connection with MYSQL Server
                      try
                      {
                         $db = new PDO("mysql:dbname=meine;host=localhost", "root", "pass");
                      }
                      catch (PDOException $pe)
                      {
                         echo "<br>Cannot connect to database: " . $pe->getMessage();
                         return false;
                      }
            
                      //Prepare Query of SQL
                      $statement = $db->prepare("INSERT INTO mela(name, email, message, datetime, ips) VALUES (:name, :email, :message, :date, :ips)");
                      if (!$statement)
                      {
                         echo "<br><br>prepare failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                         $ok = FALSE;
                      }
                      else
                      {
                         $ok = $statement->bindValue(':name', $this->Name, PDO::PARAM_STR)
                            && $statement->bindValue(':email', $this->Email, PDO::PARAM_STR)
                            && $statement->bindValue(':message', $this->Message, PDO::PARAM_STR)
                            && $statement->bindValue(':date', date("Y-m-d H:i:s"), PDO::PARAM_STR)
                            && $statement->bindValue(':ips', $this->ips, PDO::PARAM_STR);
                         if (!$ok)
                         {
                            echo "<br><br>bindValue failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                         }
                      }
                      if ($ok)
                      {
                         $ok = $statement->execute();
                         if (!$ok)
                         {
                            echo "<br><br>execute failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                         }
                      }
                      echo "<br/><br/><span>Data Inserted successfully...!!</span>";
                    
                    $db->close();
                    return $ok;
                  
              
                }    
                  
                  
                  
            }
                        
            $Newobject = new ClassProveContakt3();
            $Newobject -> ShowForm();
            $Newobject ->  PostOkT(); 
            $Newobject -> writeCommentToDatabase();
            
                
            
            
            
            
      2. mit dem Erste Beispiel,

          function writeCommentToDatabase()
              {
                  // Establish connection with MYSQL Server
                  try
                  {
                     $db = new PDO("mysql:dbname=meine;host=localhost", "root", "pass");
                  }
                  catch (PDOException $pe)
                  {
                     echo "<br>Cannot connect to database: " . $pe->getMessage();
                     return false;
                  }
        
                  //Prepare Query of SQL
                  $statement = $db->prepare("INSERT INTO mela(name, email, message, datetime, ips) VALUES (:name, :email, :message, :date, :ips)");
                  if (!$statement)
                  {
                     echo "<br><br>prepare failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                     $ok = FALSE;
                  }
                  else
                  {
                     $ok = $statement->bindValue(':name', $this->Name, PDO::PARAM_STR);
                        && $statement->bindValue(':email', $this->Email, PDO::PARAM_STR);
                        && $statement->bindValue(':message', $this->Message, PDO::PARAM_STR);
                        && $statement->bindValue(':date', date("Y-m-d H:i:s"), PDO::PARAM_STR);
                        && $statement->bindValue(':ips', $this->ips, PDO::PARAM_STR);
                     if (!$ok)
                     {
                        echo "<br><br>bindValue failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                     }
                  }
                  if ($ok)
                  {
                     $ok = $statement->execute();
                     if (!$ok)
                     {
                        echo "<br><br>execute failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                     }
                  }
                  echo "<br/><br/><span>Data Inserted successfully...!!</span>";
                
                $db->close();
                return $ok;
              }
        

        Welchen Typ hat die Spalte datetime in deiner Datenbank?

        mein datenbank

        Was ich nicht verstehe was meinst mit

        KANN nichts passieren

        das ist , keine ergebnisse zu bekomme , wie auf meine Fall ist ?

        1. Hallo Joseba,

          deine dateTime Spalte ist ein Date, darin kann man keine Uhrzeit speichern. Wenn Du eine Uhrzeit speichern möchtest, musst Du das ändern. Klicke in Zeile 4 auf "Bearbeiten" und wähle dann in der Spalte "Typ" den Wert "DateTime" aus. Dann drückst Du auf "Speichern", fertig.

          KANN nichts passieren

          das ist , keine ergebnisse zu bekomme , wie auf meine Fall ist ?

          Ja. Wenn die Funktion so aussieht:

             function PostOkT() {
                if ($this -> PostOK) 
                {
                   return;
                }
                if (empty($this->Name) ||  empty($this->Email) || empty($this->Message))
                {
                   echo "<br><b><h3>*** Please enter all required fields ***</h3></b>";  
                } 
                else 
                {
                   echo "SPEICHERN IN DATENBANK";
                }
          

          dann wird "SPEICHERN IN DATENBANK" nie erreicht. Es gibt ja einen Zusammenhang zwischen PostOK und empty($this->Name) || empty($this->Email) || empty($this->Message). Der Konstruktor setzt PostOK auf TRUE, wenn alle 3 Werte vorhanden sind. Wenn also alle Eingaben da sind, ist PostOK == TRUE und die Funktion wird verlassen. Wenn eine Eingabe fehlt, liefern die empty()-Abfragen TRUE und die Funktion wird verlassen. Die Ausgabe "SPEICHERN IN DATENBANK" wird nie erreicht.

          Deswegen musst Du das so machen, wie ich das hier gezeigt habe. Und das ist ja jetzt auch so. Gut.

          Danach hast Du dies hier programmiert:

                 else 
                 {
                    $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);
          
                    $file = $this->writeCommentToDatabase(); 
                    $data = json_encode($data);
              		  file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);
                                 
                    $messages = file($file);
          
                    foreach ($messages as $value) {
                       $data = json_decode($value, true);
              				                 
                    echo "<br>"
                       . "<b>From: </b>" . htmlspecialchars( $this->Name )
                       . "<b> at: </b>" . htmlspecialchars( $this>DateTime )   
                       . "<br><br>" . htmlspecialchars( $this->Message )
                       . "<br><hr>";
                 }
          

          Die Methode writeCommentToDatabase gibt einen booleschen Wert zurück, TRUE oder FALSE. Diesen verwendest Du dann in file_put_contents als Dateiname. Das kann nicht funktionieren, TRUE oder FALSE kann man nicht als Dateiname verwenden.

          Warum schreibst Du die Nachricht in eine Datei? Du hast jetzt die Datenbank, die Datei brauchst Du nicht mehr. Wenn Du alle Nachrichten ausgeben willst, musst Du sie aus der Datenbank lesen. Das ist jetzt deine nächste Aufgabe: Lesen der mela Tabelle und Ausgeben der gespeicherten Kommentare als HTML.

          Möchtest Du bei PDO bleiben? Ich kann Dir ein Beispiel machen, wie Du die mela-Tabelle lesen kannst. Oder möchtest Du erstmal selbst versuchen?

          Rolf

          --
          sumpsi - posui - clusi
          1. Möchtest Du bei PDO bleiben? Ich kann Dir ein Beispiel machen, wie Du die mela-Tabelle lesen kannst.

            Ja , aber brauchst du nicht heute das machen..,du muss auch genießen deine Leben ! , aber kannst du Bitte beschreibt mit seine Gedicht... , ich möchte nicht nur anderes meine arbeite machen , ich möchte auch lernen..., aber ich lerne Besser mit Beispielen...verstehe besser ihre Bedeutung..

            ich wünsche dir eine schöne tag !

            1. jetzt bekomme die daten auf dem Datenbank wie der Screenshot zeigt,

              datenbank screenshot

              Das Fehler war hier ,

              $statement = $db->prepare("INSERT INTO mela(name, email, message, datetime, ips) VALUES (:name, :email, :message, :date, :ips)");
              

              es wurde der name ips geschrieben wenn auf meinem Datenbank , hatte andere name... , jetzt habe ips gegeben....das Probleme bekomme jetzt das die Data wird nicht auf meine Webseite geschrieben , wie der Screenshot zeigt...

              auch habe probleme mit ;

              $db->close();
                 return $ok;  
              

              weil wie du geschrieben hat , macht Fehler , du hast ein geschweifte klammer zu viel gegeben , jetzt versuche ein Platz von ihn zu suchen...

              1. Wegen das Fehler mit,

                $db->close();
                   return $ok;
                

                hier sagt eine losung..mit $this->db = null;

                Wie jetzt meine writeCommentToDatabase() habe,

                function writeCommentToDatabase()
                    {
                          // Establish connection with MYSQL Server
                          try
                          {
                             $db = new PDO("mysql:host=localhost;dbname=meine", "root", "pass");
                          }
                          catch (PDOException $pe)
                          {
                             echo "<br>Cannot connect to database: " . $pe->getMessage();
                             return false;
                          }
                
                          //Prepare Query of SQL
                          $statement = $db->prepare("INSERT INTO mela(name, email, message, datetime, ips) VALUES (:name, :email, :message, :date, :ips)");
                          if (!$statement)
                          {
                             echo "<br><br>prepare failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                             $ok = FALSE;
                          }
                          else
                          {
                             $ok = $statement->bindValue(':name', $this->Name, PDO::PARAM_STR)
                                && $statement->bindValue(':email', $this->Email, PDO::PARAM_STR)
                                && $statement->bindValue(':message', $this->Message, PDO::PARAM_STR)
                                && $statement->bindValue(':date', date("Y-m-d H:i:s"), PDO::PARAM_STR)
                                && $statement->bindValue(':ips', $this->ips, PDO::PARAM_STR);
                             if (!$ok)
                             {
                                echo "<br><br>bindValue failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                             }
                          }
                          if ($ok)
                          {
                             $ok = $statement->execute();
                             if (!$ok)
                             {
                                echo "<br><br>execute failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                             }
                              
                       
                          }
                          echo "<br/><br/><span>Data Inserted successfully...!!</span>";
                        $this->db = null;
                        return $ok;
                         
                       }    
                

                Die Daten wird noch nicht auf meine Webseite geschrieben...

                1. Hallo Joseba,

                  warum $db->close() nicht funktioniert, verstehe ich nicht. Siehst Du eine Fehlermeldung?

                  Der close-Aufruf muss sein. Im PDO-Objekt steckt eine Verbindung zur Datenbank. Davon gibt es nicht so viele wie Du willst. Sind zu viele offen, bekommt man keine neuen mehr.

                  $this->db = NULL ist jedenfalls Voodoo ohne Wirkung. Deine Klasse ClassProveContakt3 hat keine Eigenschaft dieses Namens. Und einfach $db = null; zu setzen hilft auch nichts. Damit wirfst Du das PDO-Objekt aus der Hand, aber es noch da bis dein PHP Script endet, und es ist nicht geschlossen worden. Das ist nicht schlimm, wenn Du nur einen Zugriff auf die Datenbank machst, aber wenn Du ein großes PHP hast mit vielen Zugriffen, und viele User auf der Webseite sind, dann wird irgendwann der new PDO() mit "too many open connections" fehlschlagen.

                  Mit dem {...} hast Du recht. Entschuldige. Der foreach Befehl macht ein { auf, und hinter dem echo müsste das } dazu stehen. Das ist mir verloren gegangen.

                  Die Daten wird noch nicht auf meine Webseite geschrieben…

                  Natürlich nicht. Da fehlt ja noch das Lesen der Datenbank. Schreib doch schon mal den SQL Befehl zum Lesen, und mach ein Beispiel für das HTML, mit dem Du die gespeicherten Kommentare darstellen willst.

                  Hast Du schon mal mit mysql eine Tabelle gelesen? Oder ist Dir das noch ganz neu?

                  Rolf

                  --
                  sumpsi - posui - clusi
                  1. $this->db = NULL ist jedenfalls Voodoo ohne Wirkung.

                    Guck hier, da steht:

                    To close the connection, you need to destroy the object by ensuring that all remaining references to it are deleted—you do this by assigning NULL to the variable that holds the object. If you don't do this explicitly, PHP will automatically close the connection when your script ends.

                  2. Tach!

                    warum $db->close() nicht funktioniert, verstehe ich nicht. Siehst Du eine Fehlermeldung?

                    Der close-Aufruf muss sein. Im PDO-Objekt steckt eine Verbindung zur Datenbank. Davon gibt es nicht so viele wie Du willst. Sind zu viele offen, bekommt man keine neuen mehr.

                    Das ist nur dann von Bedeutung, wenn sich die Verbindungen nicht selbst schließen würden, was sie aber am Script-Ende tun. Solange man keine Scripts hat, die nach dem Datenbank-Handling noch ewig weiterlaufen, ist das Schließen also nicht wirklich wichtig.

                    dedlfix.

                    1. Hallo dedlfix,

                      ja. Schrub ich doch etwas tiefer. Das ist aber kein Grund, ein $db->close() durch Voodoo ersetzen zu wollen.

                      Rolf

                      --
                      sumpsi - posui - clusi
                      1. Tach!

                        ja. Schrub ich doch etwas tiefer. Das ist aber kein Grund, ein $db->close() durch Voodoo ersetzen zu wollen.

                        Doch, es gibt nämlich keine close()-Methode in der PDO-Klasse, wie ich grad sehe. Das Voodoo ist also die einzige Methode, explizit die Verbindung implizit schließen zu lassen (ja, richtig formuliert).

                        dedlfix.

                        1. Hallo dedlfix,

                          Eh, WTF??? Da habe ich von der mysqli Version zu gedankenlos kopiert.

                          Das genaue Verhalten würde ich mir aber erstmal in Ruhe angucken wollen. Hat PHP synchron laufende Destruktoren? Und auf Stack Overflow schrieb jemand, dass man auch sicherheitshalber die abhängigen Objekte Nullen soll (Statement, Result).

                          Insofern ist es ganz gut, wenn das alles innerhalb einer Funktion passiert; deren lokale Variablen werden am Ende gelöscht und damit (hoffentlich) auch alle PDO Referenzen zerstört. Ein $db = null ist dann gar nicht mehr nötig.

                          Rolf

                          --
                          sumpsi - posui - clusi
                          1. das ist das Fehler das ich bekomme mit,

                            $db->close();
                                    return $ok;
                            

                            Fatal error: Uncaught Error: Call to undefined method PDO::close() in /var/www/html/classprove.php:124 Stack trace: #0 /var/www/html/classprove.php(134): ClassProveContakt3->writeCommentToDatabase() #1 /var/www/html/contact.php(84): require('/var/www/html/c...') #2 {main} thrown in /var/www/html/classprove.php on line 124

                            1. Hallo Joseba,

                              das hat Dedlfix doch schon gesagt: Ich habe mich geirrt. PDO hat gar keine close-Methode. Sie ist auch nicht nötig, wie ich jetzt gelernt habe.

                              Ein PHP Objekt hat eine spezielle Methode __destruct(). Sie wird aufgerufen, wenn ein Objekt gelöscht wird. Wenn du $db = null; schreibst, wird das PDO-Objekt von keiner Variablen mehr gespeichert. PHP löscht es und führt die __destruct-Methode aus. Und dadurch merkt das PDO-Objekt, dass es gelöscht wurde, und kann die Datenbanverbindung schließen.

                              Das Thema Objektreferenzen und automatisches Löschen ist ziemlich kompliziert und in jeder Programmiersprache gibt es Besonderheiten. Ich will jetzt gar nicht versuchen, das zu erklären 😕

                              Rolf

                              --
                              sumpsi - posui - clusi
                              1. Ich will jetzt gar nicht versuchen, das zu erklären

                                Aber kannst du Bitte mir Erklärt was soll ich mache um was wird gefüllt (name, e-mail und message) in meine website zu bekommen ?

                                1. Hallo Joseba,

                                  du musst ein weiteres SQL Statement ausführen, um die mela Tabelle zu lesen. Das kann zum Beispiel so aussehen:

                                  SELECT name, email, message, datetime
                                  FROM mela
                                  ORDER BY datetime DESC
                                  

                                  um die gespeicherten Nachrichten zu lesen, die neueste zuerst.

                                  Ich habe hier kein PHP mit MYSQL zur Verfügung und alles, was ich jetzt schreibe, kann ich nicht testen. Hoffentlich funktioniert es 😉

                                  Mit PDO kann man das so machen:

                                        function getMessages()
                                        {
                                            $db = $this->getConnection();
                                            if (!$db) return false;
                                  
                                            $sql = "SELECT name, email, message, datetime FROM mela ORDER BY datetime DESC";
                                            $statement = $db->query($sql);
                                            if (!$statement)
                                            {
                                               $this->reportPDOError("Cannot create query", $sql, $db);
                                               return false;
                                            }
                                            $result = $statement->fetchAll(PDO::FETCH_ASSOC)
                                  
                                            if ($result === FALSE)
                                               $this->reportPDOError("fetchAll(ASSOC) failed", $sql, $statement);
                                  
                                            return $result;
                                        }
                                  
                                        private function getConnection()
                                        {
                                            // Establish connection with MYSQL Server
                                            try
                                            {
                                               return new PDO("mysql:host=localhost;dbname=meine", "root", "pass");
                                            }
                                            catch (PDOException $pe)
                                            {
                                               echo "<br>Cannot connect to database: " . $pe->getMessage();
                                               return false;
                                            }
                                        }
                                  
                                        private function reportPDOError($message, $sql, $pdo)
                                        {
                                           $info = $pdo->errorInfo();
                                  
                                           echo "<div style='color:red'><b>Error in SQL Access: $message</b>";
                                           echo "<br>SQL-Statement: $sql";
                                           echo "<br>PDO SQLSTATE: $info[0]";
                                           echo "<br>MySQL error code: $info[1]";
                                           echo "<br>MySQL error message: $info[2]</div>";
                                        }
                                  

                                  Die Methode reportPDOError kannst Du an vielen Stellen verwenden. Du übergibst ihr eine kurze Fehlernachricht, das SQL Statement das zum Fehler führte, und das Objekt aus PDO, das zum Fehler führte. Das kann das PDO-Objekt sein oder das PDOStatement Objekt, beide haben eine erorInfo-Methode.

                                  Die Methode getConnection kannst Du in der INSERT-Funktion wiederverwenden. Auf diese Weise musst Du die Zugangsdaten zur Datenbank nur ein einer Stelle eintragen. Wenn Du irgendwann viele Klassen mit SQL Zugriffen hast, musst Du Dir aber noch etwas anderes überlegen. Eine PHP Application muss so gebaut sein, dass die Zugangsdaten zur Datenbank an GENAU einer Stelle stehen und nur dort geändert werden. Meistens macht man dafür eine include-Datei und definiert dort Konstanten mit DB-Name, DB-User und DB-Passwort.

                                  Die getMessages-Funktion erzeugt eine Datenbankverbindung und verwendet dann die query-Methode des PDO-Objekts. Von query() wird ein PDOStatement Objekt zurückgegeben, in dem das Ergebnis der Abfrage steht.

                                  Für den INSERT Befehl haben wir prepare() und execute() verwendet. Das ist hier nicht nötig, weil das SQL Statement keine Parameter braucht.

                                  Es gibt viele Möglichkeiten, ein Abfrage-Ergebnis aus einem PDOStatement zu holen. Die einfachste ist fetchAll(PDO::FETCH_ASSOC). Das Ergebnis ist ein Array. Jeder Eintrag im Array ist eine Zeile aus der Datenbank. Und jeder Eintrag ist wieder ein Array, mit den Spaltennamen als Key. Den Wert der Spalte name aus der dritten Zeile der Datenbank bekommst Du mit $result[2]['name'].

                                  getMessages gibt dieses Array einfach zurück. Danach endet die Funktion, und PHP löscht die PDO-Objekte $db und $statement. Dadurch wird die Datenbankverbindung wieder freigegeben.

                                  Deine PostOkT Funktion könnte nun so aussehen:

                                        function PostOkT() 
                                        {
                                           if (! $this -> PostOK)
                                           {
                                              echo "<br><b><h3>*** Please enter all required fields ***</h3></b>";  
                                           } 
                                           else 
                                           {
                                               $this->writeCommentToDatabase(); 
                                  
                                               $messages = $this->getMessages();
                                  
                                               foreach ($messages as $message) :
                                  ?>
                                  <article>
                                     <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['name'])?>)</h2>
                                     <p>Created <?= $message['datetime'] ?></p>
                                     <p><?= $message['message'] ?></p>
                                  </article>
                                  <?php
                                               endfor;
                                           }
                                       } 
                                  

                                  Dem article-Element kannst Du mit CSS noch ein schönes Aussehen geben. Die IP-Adresse gebe ich nicht aus. Wie Du siehst, habe ich für die Ausgabe der Werte PHP verlassen und habe HTML hingeschrieben. Das liest sich besser als viele ECHOs.

                                  Beachte, dass Du auf einer richtigen Webseite die Abfrage der Nachrichten auf eine eigene Seite legen musst, und das muss durch ein Passwort geschützt sein. Jemand, der eine Nachricht schreibt, soll nicht sofort alle Nachrichten lesen können. Das ist jetzt eine Übung für Dich: schreibe eine eigene Seite, die NUR die gespeicherten Nachrichten anzeigt.

                                  Beachte auch, dass dieses Beispiel GANZ einfach ist. Wenn du 1000 Nachrichten hast, werden 1000 Nachrichten ausgegeben. Man würde dann nur 30 oder 50 Nachrichten lesen und Buttons zum Blättern einbauen. Das ist dann die nächste Lernstufe für Dich :)

                                  Rolf

                                  --
                                  sumpsi - posui - clusi
                                  1. vieeeeeeleeeee Danks für deinen bemüht !!!!!!!

                                    ich habe eine Probleme mit

                                    SELECT name, email, message, datetime
                                    FROM mela
                                    ORDER BY datetime DESC
                                    

                                    ich weiß nicht wo legt soll..

                                    ich habe unten function getMessages() gelegt, und bekomme Fehler..

                                    function getMessages()

                                    SELECT name, email, message, datetime FROM mela ORDER BY datetime DESC
                                    
                                    1. Hallo Joseba,

                                      das musst Du nicht mehr selbst irgendwohin legen.

                                      (Oh. Ich habe den Satz in Google Translator eingegeben. Übersetzt nach Baskisch. Und zurück. Was für ein Müll. Ich hoffe du hast etwas besseres.)

                                      Guck Dir mein getMessages noch mal an. Das SQL Statement ist da schon drin. Da steht:

                                            $sql = "SELECT name, email, message, datetime FROM mela ORDER BY datetime DESC";
                                      

                                      Ich hatte das SQL vorher nur aufgeschrieben, damit man es besser lesen kann. In PHP kann man auch schreiben:

                                            $sql = <<<END
                                      SELECT name, email, message, datetime
                                      FROM mela
                                      ORDER BY datetime DESC
                                      END;
                                      

                                      Das nennt man "heredoc" Schreibweise, man muss dabei aber ganz genau aufpassen wie man es schreibt. Hinter dem <<<END darf kein SPACE Zeichen sein. Die END; Zeile darf kein einziges SPACE enthalten. Das macht man schnell falsch.

                                      Darum wollte ich das nicht zeigen. Oh. Jetzt habe ich es doch gezeigt 😂. Hier ist die Beschreibung im PHP Handbuch. Also wenn Du magst, verwende heredoc Strings.

                                      Rolf

                                      --
                                      sumpsi - posui - clusi
                                      1. Danke , aber brauchst du keine übersetzung auf Baskische sprache machen, ich verstehe dich sehr Gut...mein deutsch kenntnisse ist viel besser als mein aussprache…

                                        Wie diene Code geschrieben habe;

                                        <?php
                                        
                                        
                                        class ClassProveContakt3 
                                        {
                                        
                                              private $Name;
                                              private $Email;
                                              private $Message;
                                              private $PostOK;
                                              private $DateTime;
                                              private $items;
                                              private $ips;
                                              
                                        
                                         
                                            function __construct() 
                                            {
                                        
                                                 $this -> ips = $_SERVER['REMOTE_ADDR'];
                                                 $this -> DateTime = date('m/d/Y h:i:s a');  
                                                 $this -> items = ['Name', 'Email', 'Message']; 
                                                 
                                                 
                                                 $flag = true;
                                                  foreach ( $this -> items as $key ) {  
                                        			           if ( empty ( $_POST[$key] ) )  {
                                        			             $flag = false;    
                                        			           } else {    
                                        			             $this -> $key = trim( filter_var( $_POST[$key], FILTER_SANITIZE_STRING ) ); 
                                        			            }    
                                        		   }	     
                                                 $this -> PostOk = $flag; 
                                                 
                                            }
                                        
                                         
                                            
                                        
                                          
                                            function ShowForm() 
                                            {
                                        ?>
                                              <form  method="POST">
                                                <label for="name"><b>Name * </b></label>
                                                <input type="text" id="name" name="Name" value="">
                                                <label for="email"><b>E-mail * </b></label>
                                                <input type="email" id="email" name="Email" value="">
                                                <br><br>
                                                <label><b> Message * </b><br>
                                                   <textarea cols="45" rows="6" id="text" name="Message"></textarea>      
                                                </label>
                                                <br><br>
                                                <input  type="submit" name="post" value="POST COMMENT" id="comment">
                                              </form>
                                        <?php
                                            }
                                            function PostOkT() 
                                            {
                                                     if (! $this -> PostOK)
                                                     {
                                                       echo "<br><b><h3>*** Please enter all required fields ***</h3></b>";  
                                                     } 
                                                     else 
                                                     {
                                                       $this->writeCommentToDatabase(); 
                                        
                                                       $messages = $this->getMessages();
                                        
                                                        foreach ($messages as $message)
                                                        { 
                                        ?>
                                        <article>
                                           <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['name'])?>)</h2>
                                           <p>Created <?= $message['datetime'] ?></p>
                                           <p><?= $message['message'] ?></p>
                                        </article>
                                        <?php
                                                         }                     
                                                             
                                                      }
                                                      
                                             }
                                             function writeCommentToDatabase()
                                             {
                                              // Establish connection with MYSQL Server
                                              try
                                              {
                                                 $db = new PDO("mysql:host=localhost;dbname=meine", "root", "pass");
                                              }
                                              catch (PDOException $pe)
                                              {
                                                 echo "<br>Cannot connect to database: " . $pe->getMessage();
                                                 return false;
                                              }
                                        
                                              //Prepare Query of SQL
                                              $statement = $db->prepare("INSERT INTO mela(name, email, message, datetime, ips) VALUES (:name, :email, :message, :date, :ips)");
                                              if (!$statement)
                                              {
                                                 echo "<br><br>prepare failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                                                 $ok = FALSE;
                                              }
                                              else
                                              {
                                                 $ok = $statement->bindValue(':name', $this->Name, PDO::PARAM_STR)
                                                    && $statement->bindValue(':email', $this->Email, PDO::PARAM_STR)
                                                    && $statement->bindValue(':message', $this->Message, PDO::PARAM_STR)
                                                    && $statement->bindValue(':date', date("Y-m-d H:i:s"), PDO::PARAM_STR)
                                                    && $statement->bindValue(':ips', $this->ips, PDO::PARAM_STR);
                                                 if (!$ok)
                                                 {
                                                    echo "<br><br>bindValue failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                                                 }
                                              }
                                              if ($ok)
                                              {
                                                 $ok = $statement->execute();
                                                 if (!$ok)
                                                 {
                                                    echo "<br><br>execute failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                                                 }
                                        
                                        
                                              }
                                              echo "<br/><br/><span>Data Inserted successfully...!!</span>";
                                               $this->db = null;
                                               return $ok;
                                        
                                        
                                            }    
                                            function getMessages()
                                             
                                              
                                        
                                              {
                                                  $db = getConnection();
                                                  if (!db) return false;
                                        
                                                  $sql = "SELECT name, email, message, datetime FROM mela ORDER BY datetime DESC";
                                                  $statement = $db->query($sql);
                                                  if (!$statement)
                                                  {
                                                     $this->reportPDOError("Cannot create query", $sql, $db);
                                                     return false;
                                                  }
                                                  $result = $statement->fetchAll(PDO::FETCH_ASSOC);
                                        
                                                  if ($result === FALSE)
                                                     $this->reportPDOError("fetchAll(ASSOC) failed", $sql, $statement);
                                        
                                                  return $result;
                                              }
                                        
                                              private function getConnection()
                                              {
                                                  // Establish connection with MYSQL Server
                                                  try
                                                  {
                                                     return new PDO("mysql:host=localhost;dbname=meine", "root", "pass");
                                                  }
                                                  catch (PDOException $pe)
                                                  {
                                                     echo "<br>Cannot connect to database: " . $pe->getMessage();
                                                     return false;
                                                  }
                                              }
                                        
                                              private function reportPDOError($message, $sql, $pdo)
                                              {
                                                 $info = $pdo->errorInfo();
                                        
                                                 echo "<div style='color:red'><b>Error in SQL Access: $message</b>";
                                                 echo "<br>SQL-Statement: $sql";
                                                 echo "<br>PDO SQLSTATE: $info[0]";
                                                 echo "<br>MySQL error code: $info[1]";
                                                 echo "<br>MySQL error message: $info[2]</div>";
                                              }
                                             
                                        }
                                                    
                                        $Newobject = new ClassProveContakt3();
                                        $Newobject -> ShowForm();
                                        $Newobject ->  PostOkT(); 
                                        $Newobject -> getMessages();
                                        
                                            
                                        
                                        ?>
                                        
                                        

                                        Auf meine website bekomme diese fehler,

                                        Fehler auf meine webseite

                                        1. Hallo Joseba,

                                          ja, das passiert wenn man Code nicht testen kann. Mein Fehler.

                                          getConnection ist eine Methode (also eine Funktion in einem Objekt), keine einfache Funktion, und muss darum mit

                                          $this->getConnection();
                                          

                                          aufgerufen werden.

                                          Einen zweiten Fehler sehe ich gleich dahinter, da fehlt das $ vor db:

                                          if (!$db) {
                                             ...
                                          }
                                          

                                          Rolf

                                          --
                                          sumpsi - posui - clusi
                                          1. ich habe versucht so ,

                                            $this->getConnection();
                                                  {
                                            

                                            und …

                                            $Newobject = new ClassProveContakt3();
                                            $Newobject -> ShowForm();
                                            $Newobject ->  PostOkT(); 
                                            $Newobject -> this-> getConnection();
                                            

                                            aber bekomme diese warnung,

                                            Parse error: syntax error, unexpected '$this' (T_VARIABLE), expecting function (T_FUNCTION) or const (T_CONST) in /var/www/html/classprove.php on line 155

                                            1. auch wenn schreibe , $Newobject -> getConnection(); bekomme gleich Ergebnisse....

                                            2. Hallo Joseba,

                                              ich habe eine Stunde lang viel Text geschrieben. Und dann auf Abbrechen statt auf Speichern gedrückt. Ich war ungeschickt mit der Maus. Jetzt habe ich keine Zeit mehr. Tut mir leid.

                                              Aber ich habe meinen Vorschlag von vorhin korrigiert. Das $this ist ergänzt und das if (!$db) ist korrigiert. Guck Dir meinen Vorschlag noch einmal an.


                                              $NewObject->this->getConnection() kann nicht funktionieren. Das hat zwei Ursachen:

                                              1. Es gibt keine Eigenschaft this in ClassProveContakt3. $this ist eine Spezialvariable, die man INNERHALB von Methoden benutzen kann, um zu sagen "das Objekt, für das Du aufgerufen wurdest".

                                              2. getConnection() habe ich als private function geschrieben. private bedeutet: Man kann diese Methode nur aus anderen Methoden des gleichen Objekts aufrufen. Darum kann auch $NewObject->getConnection(); nicht funktionieren.

                                              Es gibt zum einen Variablen und Funktionen - dafür braucht man keine Klassen. Und es gibt zum anderen Eigenschaften (oder Propertys) und Methoden, die sind immer Teil einer Klasse. $this ist eine Variable, keine Eigenschaft. $this ist eine ganz besondere Variable, die PHP Dir in Methoden bereitstellt. Du darfst sie nur lesen, aber nicht verändern.

                                              In einer Methode kannst Du neue Variablen anlegen. Das ist in Methoden und Funktionen möglich. Diese Variablen sind dann lokal in der Methode (oder Funktion). Sie gelten nur dort, und sie werden gelöscht, wenn die Methode oder die Funktion endet. $db oder $statement sind solche Variablen.

                                              Rolf

                                              --
                                              sumpsi - posui - clusi
                                              1. Hallo,

                                                ich habe eine Stunde lang viel Text geschrieben. Und dann auf Abbrechen statt auf Speichern gedrückt.

                                                Mir fällt schon länger auf, dass du viel und mit viel Sachverstand schreibst. Das ist toll.

                                                Aber wären deine Texte nicht besser im wiki oder blog aufgehoben?

                                                Gruß
                                                Kalk

                                                1. Hallo Tabellenkalk,

                                                  an Wiki-Themen habe ich schon ein paar mal angefangen zu arbeiten. Ich verzettele mich dann so tief in Details, dass ich am Ende nicht fertig werde. Ich fürchte, das ist nicht mein Ding. Wenn jemand Informationen aus meinen Postings extrahieren will und das bloggen oder wikifizieren, gerne.

                                                  Ein Hand-On Dialog wie hier mit Joseba, das ist was anderes. Wenn es nur eine gemeinsame Sourcecode-Basis gäbe... aber den 179° Überhang namens "github" will ich ihr nicht antun 😂

                                                  Rolf

                                                  --
                                                  sumpsi - posui - clusi
                                              2. ich habe eine Stunde lang viel Text geschrieben. Und dann auf Abbrechen statt auf Speichern gedrückt. Ich war ungeschickt mit der Maus. Jetzt habe ich keine Zeit mehr

                                                ich hoffe nicht wegen mei streß , dieser fehler gemacht hast …

                                                ich bedanke mich dich für deine hilfe !

                                              3. habe deine $this -> getConnection(); gelost und jetz gibt public function getConnection(); , jetzt bekomme keine warnung , aber comment wird weder en meine website noch Data-bank gezeigt....

                                                1. Hallo Joseba,

                                                  jetzt müsste ich wohl doch noch mal deinen Sourcecode sehen.

                                                  Rolf

                                                  --
                                                  sumpsi - posui - clusi
                                                  1. Mene Code;

                                                    <?php
                                                    
                                                    
                                                    class ClassProveContakt3 
                                                    {
                                                    
                                                          private $Name;
                                                          private $Email;
                                                          private $Message;
                                                          private $PostOK;
                                                          private $DateTime;
                                                          private $items;
                                                          private $ips;
                                                          
                                                    
                                                     
                                                        function __construct() 
                                                        {
                                                    
                                                             $this -> ips = $_SERVER['REMOTE_ADDR'];
                                                             $this -> DateTime = date('m/d/Y h:i:s a');  
                                                             $this -> items = ['Name', 'Email', 'Message']; 
                                                             
                                                             
                                                             $flag = true;
                                                              foreach ( $this -> items as $key ) {  
                                                    			           if ( empty ( $_POST[$key] ) )  {
                                                    			             $flag = false;    
                                                    			           } else {    
                                                    			             $this -> $key = trim( filter_var( $_POST[$key], FILTER_SANITIZE_STRING ) ); 
                                                    			            }    
                                                    		   }	     
                                                             $this -> PostOk = $flag; 
                                                             
                                                        }
                                                    
                                                     
                                                        
                                                    
                                                      
                                                        function ShowForm() 
                                                        {
                                                    ?>
                                                          <form  method="POST">
                                                            <label for="name"><b>Name * </b></label>
                                                            <input type="text" id="name" name="Name" value="">
                                                            <label for="email"><b>E-mail * </b></label>
                                                            <input type="email" id="email" name="Email" value="">
                                                            <br><br>
                                                            <label><b> Message * </b><br>
                                                               <textarea cols="45" rows="6" id="text" name="Message"></textarea>      
                                                            </label>
                                                            <br><br>
                                                            <input  type="submit" name="post" value="POST COMMENT" id="comment">
                                                          </form>
                                                    <?php
                                                        }
                                                        function PostOkT() 
                                                        {
                                                                 if (! $this -> PostOK)
                                                                 {
                                                                   echo "<br><b><h3>*** Please enter all required fields ***</h3></b>";  
                                                                 } 
                                                                 else 
                                                                 {
                                                                   $this->writeCommentToDatabase(); 
                                                    
                                                                   $messages = $this->getMessages();
                                                    
                                                                    foreach ($messages as $message)
                                                                    { 
                                                    ?>
                                                    <article>
                                                       <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['name'])?>)</h2>
                                                       <p>Created <?= $message['datetime'] ?></p>
                                                       <p><?= $message['message'] ?></p>
                                                    </article>
                                                    <?php
                                                                     }                     
                                                                         
                                                                  }
                                                                  
                                                         }
                                                         function writeCommentToDatabase()
                                                         {
                                                          // Establish connection with MYSQL Server
                                                          try
                                                          {
                                                             $db = new PDO("mysql:host=localhost;dbname=meine", "root", "pass");
                                                          }
                                                          catch (PDOException $pe)
                                                          {
                                                             echo "<br>Cannot connect to database: " . $pe->getMessage();
                                                             return false;
                                                          }
                                                    
                                                          //Prepare Query of SQL
                                                          $statement = $db->prepare("INSERT INTO mela(name, email, message, datetime, ips) VALUES (:name, :email, :message, :date, :ips)");
                                                          if (!$statement)
                                                          {
                                                             echo "<br><br>prepare failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                                                             $ok = FALSE;
                                                          }
                                                          else
                                                          {
                                                             $ok = $statement->bindValue(':name', $this->Name, PDO::PARAM_STR)
                                                                && $statement->bindValue(':email', $this->Email, PDO::PARAM_STR)
                                                                && $statement->bindValue(':message', $this->Message, PDO::PARAM_STR)
                                                                && $statement->bindValue(':date', date("Y-m-d H:i:s"), PDO::PARAM_STR)
                                                                && $statement->bindValue(':ips', $this->ips, PDO::PARAM_STR);
                                                             if (!$ok)
                                                             {
                                                                echo "<br><br>bindValue failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                                                             }
                                                          }
                                                          if ($ok)
                                                          {
                                                             $ok = $statement->execute();
                                                             if (!$ok)
                                                             {
                                                                echo "<br><br>execute failed: SQLSTATE=" . $db->errorCode() . ", Error Info=" . print_r($dbh->errorInfo(), true) . "</p>";
                                                             }
                                                    
                                                    
                                                          }
                                                          echo "<br/><br/><span>Data Inserted successfully...!!</span>";
                                                           $this->db = null;
                                                           return $ok;
                                                    
                                                    
                                                        }    
                                                        function getMessages()
                                                        {
                                                              $db = getConnection();
                                                              if (!$db) return false;
                                                              { 
                                                                $sql = "SELECT name, email, message, datetime FROM mela ORDER BY datetime DESC";
                                                                $statement = $db->query($sql);
                                                              }
                                                              if (!$statement)
                                                              {
                                                                 $this->reportPDOError("Cannot create query", $sql, $db);
                                                                 return false;
                                                              }
                                                              $result = $statement->fetchAll(PDO::FETCH_ASSOC);
                                                    
                                                              if ($result === FALSE)
                                                              {
                                                                 $this->reportPDOError("fetchAll(ASSOC) failed", $sql, $statement);
                                                    
                                                                 return $result;
                                                              }
                                                        }
                                                        public function getConnection()
                                                        {
                                                              // Establish connection with MYSQL Server
                                                              try
                                                              {
                                                                 return new PDO("mysql:host=localhost;dbname=meine", "root", "pass");
                                                              }
                                                              catch (PDOException $pe)
                                                              {
                                                                 echo "<br>Cannot connect to database: " . $pe->getMessage();
                                                                 return false;
                                                              }
                                                          }
                                                    
                                                          private function reportPDOError($message, $sql, $pdo)
                                                          {
                                                             $info = $pdo->errorInfo();
                                                    
                                                             echo "<div style='color:red'><b>Error in SQL Access: $message</b>";
                                                             echo "<br>SQL-Statement: $sql";
                                                             echo "<br>PDO SQLSTATE: $info[0]";
                                                             echo "<br>MySQL error code: $info[1]";
                                                             echo "<br>MySQL error message: $info[2]</div>";
                                                          }
                                                         
                                                    }
                                                                
                                                    $Newobject = new ClassProveContakt3();
                                                    $Newobject -> ShowForm();
                                                    $Newobject ->  PostOkT(); 
                                                    $Newobject -> getConnection();
                                                    
                                                    
                                                    
                                                        
                                                    
                                                    ?>
                                                    
                                                    
                                                    1. jetzt besechtigen mich in diese Webseite wo sie beschreibt wie man arbeitet mit PDO und Crud...

                                                    2. Hallo Joseba,

                                                      ok, folgende Korrekturen:

                                                      1. Ein kleiner Kopierfehler von mir in dem <article> Teil von PostOkT, da sollte

                                                         <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['email'])?>)</h2>
                                                      

                                                      stehen ($message['email'] statt $message['name']).

                                                      2. Ein Fehler von Dir. Du hast am Ende von getMessages { und } hinzugefügt.

                                                      Dein Code:

                                                          function getMessages()
                                                          {
                                                              .....
                                                              if ($result === FALSE)
                                                              {
                                                                  $this->reportPDOError("fetchAll(ASSOC) failed", $sql, $statement);
                                                      
                                                                  return $result;
                                                              }
                                                          }
                                                      

                                                      Mein Code:

                                                          function getMessages()
                                                          {
                                                              .....
                                                              if ($result === FALSE)
                                                                  $this->reportPDOError("fetchAll(ASSOC) failed", $sql, $statement);
                                                      
                                                              return $result;
                                                          }
                                                      

                                                      Der Unterschied ist: Mein Code führt den return-Befehl immer aus. Dein Code führt den return-Befehl nur aus, wenn fetchAll einen Fehler gemeldet hat. Wenn fetchAll ein Ergebnis liefert, führt deine Funktion überhaupt keinen return Befehl aus, das heißt: getMessages gibt NULL zurück.

                                                      Es gibt verschiedene Meinungen, ob man { und } hinschreiben soll, wenn zu einem if nur ein einziger Befehl gehört. Ich lasse sie dann weg. Andere sagen: das ist schlecht, schreibe sie immer hin. Für Dich ist es vielleicht besser, sie hinzuschreiben.

                                                      Etwas ähnliches hat Du am Anfang von getMessages gemacht. Da steht bei Dir:

                                                              $db = getConnection();
                                                              if (!$db) return false;
                                                              {
                                                                  $sql = "SELECT name, email, message, datetime FROM mela ORDER BY datetime DESC";
                                                                  $statement = $db->query($sql);
                                                              }
                                                      

                                                      Da steht if (!$db) - das ist erstmal der if Befehl. Wenn $db also FALSE ist, wird der Befehl hinter dem if ausgeführt. Dieser Befehl steht in der gleichen Zeile: return false;. Damit ist der if und alles, was dazu gehört, zu Ende. Die beiden nächsten Zeilen haben mit dem if nichts mehr zu tun.

                                                      PHP hätte also sagen können: Da steht ein { und ich weiß nicht was das bedeuten soll. Aber PHP ist aus der Sprache C entstanden, und da kann man jederzeit einen { } Block verwenden. In C ist das sinnvoll, weil es da Einfluss auf die Sichtbarkeit von Variablen hat. In PHP gibt es diesen Einfluss nicht. Ein { } Block, der nicht zu einem Befehl wie if oder foreach gehört, hat keine Wirkung. Ich habe dazu etwas im Netz gesucht, und tatsächlich eine Diskussion dazu bei stackoverflow gefunden. Manche Leute verwenden solche Blöcke, um zu zeigen, dass bestimmte Dinge zusammengehören. Na gut. Das kann man tun. Aber ich glaube, bei Dir ist es nicht nötig.

                                                      Ich schlage vor, dass Du diese Version von getMessages nimmst:

                                                          function getMessages()
                                                          {
                                                              $db = getConnection();
                                                              if (!$db)
                                                              {
                                                                  return false;
                                                              }
                                                      
                                                              $sql = "SELECT name, email, message, datetime FROM mela ORDER BY datetime DESC";
                                                              $statement = $db->query($sql);
                                                      
                                                              if (!$statement)
                                                              {
                                                                  $this->reportPDOError("Cannot create query", $sql, $db);
                                                                  return false;
                                                              }
                                                      
                                                              $result = $statement->fetchAll(PDO::FETCH_ASSOC);
                                                      
                                                              if ($result === FALSE)
                                                              {
                                                                  $this->reportPDOError("fetchAll(ASSOC) failed", $sql, $statement);
                                                              }
                                                              return $result;
                                                          }
                                                      

                                                      3. Mein Fehler: der foreach Befehl in PostOkT. Wir haben schon oft geschrieben, dass es an solchen Stellen besser ist, die "alternative Syntax" zu verwenden.

                                                      Normale Syntax:

                                                            foreach ($messages as $message)
                                                            {
                                                                // PHP Befehle 
                                                            }
                                                      

                                                      Alternative Syntax:

                                                            foreach ($messages as $message) :
                                                                // PHP Befehle 
                                                            endfor;
                                                      

                                                      Das { am Anfang der Schleife wird zu einen : am Ende der forach-Zeile, und das } am Ende der Schleife zu endfor;. Die alternative Syntax ist besser lesbar, wenn in der Schleife HTML steht. Das } übersieht man leicht, ein fettes endfor; nicht. In der Version, die ich verloren habe, statt noch die alternative Syntax drin. Das kannst Du noch ändern:

                                                                  foreach ($messages as $message) :
                                                      ?>
                                                      <article>
                                                         <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['email'])?>)</h2>
                                                         <p>Created <?= $message['datetime'] ?></p>
                                                         <p><?= $message['message'] ?></p>
                                                      </article>
                                                      <?php
                                                                  endfor;
                                                      

                                                      So, mehr sehe ich erstmal nicht.

                                                      Rolf

                                                      --
                                                      sumpsi - posui - clusi
                                                      1. Viele danke für deine bemüht !!

                                                        mit ,

                                                                 else
                                                                 {
                                                                         
                                                        
                                                                         $this->writeCommentToDatabase(); 
                                                        
                                                                         $messages = $this->getMessages();
                                                        
                                                                         foreach ($messages as $message):
                                                                         
                                                        ?>
                                                        <article>
                                                           <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['email'])?>)</h2>
                                                           <p>Created <?= $message['datetime'] ?></p>
                                                           <p><?= $message['message'] ?></p>
                                                        </article>
                                                        <?php
                                                               endfor;          
                                                                             
                                                                  } /* gehört zum else  ... */   
                                                                      
                                                             }
                                                             function writeCommentToDatabase()
                                                        

                                                        Bekomme dieser warnung;

                                                        Parse error: syntax error, unexpected 'endfor' (T_ENDFOR) in /var/www/html/classprove.php on line 84

                                                        nur wenn mache,

                                                        else 
                                                                     {
                                                                       
                                                                       
                                                        
                                                                         $this->writeCommentToDatabase(); 
                                                        
                                                                         $messages = $this->getMessages();
                                                        
                                                                         foreach ($messages as $message)
                                                                         {
                                                        ?>
                                                        <article>
                                                           <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['email'])?>)</h2>
                                                           <p>Created <?= $message['datetime'] ?></p>
                                                           <p><?= $message['message'] ?></p>
                                                        </article>
                                                        <?php
                                                                         
                                                                             
                                                                       }    
                                                                     }     
                                                             }
                                                             function writeCommentToDatabase()
                                                        

                                                        bekomme keine Warnung…

                                                        ich bekomme weder auf Website noch data bank keine ergebnis .

                                                        bei data-bank bekomme dieser Warnug,

                                                        warnung von dem data bank

                                                        1. Hallo Joseba,

                                                          oh Mist, natürlich gehört zu foreach ein endforeach, und nicht endfor. Das passiert, wenn man hastig Code schreibt und ihn nicht testen kann.

                                                          Die Fehlermeldung aus der Datenbank kommt von deiner eigenen Abfrage, mit der Du in die Datenbank hineinschauen willst? Man kann die Fehlermeldung mit Google finden. Die Ursache kann sein, dass dein phpMyAdmin zu alt ist für die PHP Version, die Du verwendest. Welche phpMyAdmin Version benutzt Du? Und auf welcher PHP Version wird es ausgeführt?

                                                          Die Version von phpMyAdmin steht auf der Übersichtsseite, die nach der Anmeldung gezeigt wird.

                                                          Hier steht, dass man für PHP 7.2 mindestens phpMyAdmin 4.8 braucht.

                                                          Rolf

                                                          --
                                                          sumpsi - posui - clusi
                                                          1. ich denke das du rechts hat....

                                                            Welche phpMyAdmin Version benutzt Du?

                                                            4.6.6deb4

                                                            Und auf welcher PHP Version wird es ausgeführt?

                                                            7.3.5-1+0~20190503093827.38+stretch

                                                            alles in eins…

                                                            phpmyadmind Allgemeine Einstellungen

                                                            jetzt versuche mein phpmyadmin zu update..

                                                            1. ich weiss nicht was scheische gemacht habe , aber habe probleme mit phpmyadmin... ich denke bis morgen kann nicht sage , wie deine Code funzioniert ...

                                                          2. ich sage dir morgen was mit deinen Code passiert , ich muss heute mein Computer neu installiert... aber ich denke das jetzt alles bekomme gut ...

                                                            1. So nach dem neue installation , bekomme noch keine ergebnise... , wie meine phpmyadmin habe,

                                                              wie meine phpmyadmin habe

                                                              wie sehe habe eine ähnliche probleme wie früher..., jetzt habe php-7.2 (früher php-7.3) das probleme ist mit phpmyadmin ich habe 4.6 , und wie du sagst muss 4.8 haben , das probleme ist das auf dem Linux die ich habe , habe keine neue Version... , ich möchte nicht mache wie vor zwei tage , die alles neue installiert musste...

                                                              1. Hallo Joseba,

                                                                phpMyAdmin 4.8 gibt es hier zum Download. Wie man es installiert, musst Du selbst herausfinden.

                                                                Rolf

                                                                --
                                                                sumpsi - posui - clusi
                              2. nur um zu wissen.. , um meine ergebnisse auf meine webseite zu bekommen , brauche ich Crud ?

                                1. Hallo Joseba,

                                  ja. Genau das bauen wir hier.

                                  CRUD ist eine Abkürzung für CREATE, READ, UPDATE, DELETE. Man benutzt das für Systeme, wo ein Anwender Daten zu irgendeinem Thema Anzeigen, Erzeugen, Ändern und Löschen kann. Das ist bei deinen Nachrichten ähnlich.

                                  CREATE haben wir gemacht, das ist der INSERT. Jeder darf es tun.

                                  READ kommt als nächstes, das ist der SELECT. Das darfst nur Du tun.

                                  UPDATE und DELETE brauchen wir hier nicht, weil deine Besucher ihre Nachrichten nicht ändern oder löschen sollen. Wenn Du als Betreiberin der Seite möchtest, dass Du Nachrichten löschen kannst, dann müssen wir noch eine Funktion bauen mit der man eine oder mehrere Nachrichten löschen kann.

                                  Rolf

                                  --
                                  sumpsi - posui - clusi
                                  1. Hallo Rolf B,

                                    ja. Genau das bauen wir hier.

                                    CRUD ist eine Abkürzung für CREATE, READ, UPDATE, DELETE.

                                    https://wiki.selfhtml.org/wiki/CRUD 😀

                                    Bis demnächst
                                    Matthias

                                    --
                                    Pantoffeltierchen haben keine Hobbys.
                                    ¯\_(ツ)_/¯
                                    1. Hallo Matthias,

                                      danke für den Hinweis.

                                      Aber... RUDI. Süß 😂

                                      Rolf

                                      --
                                      sumpsi - posui - clusi
                  3. warum $db->close() nicht funktioniert, verstehe ich nicht. Siehst Du eine Fehlermeldung?

                    Ja , aber jetzt nicht mehr weil jetzt habe mit

                    $this->db = null;
                          return $ok;
                    

                    Hast Du schon mal mit mysql eine Tabelle gelesen? Oder ist Dir das noch ganz neu?

                    Ja, bin ich ganz neu....

    2. Deine <input name=..> lauten Name, Email, Message. Du jedoch ermittelst

      $name = $_POST['name'];
      $email = $_POST['email'];
      $message = $_POST['message'];
      

      unter Missachtung der Großkleinschreibung. Von daher erhältst Du keine Daten. MFG

      PS: Für DateTime könnte man auch die MySQL Funktionalität mit dem entsprechenden Feld verwenden.