liebewinter: Kommentar wird nicht in Tabelle gezeigt

erste zu sage das mein deutsch nicht so gut ist und php kenntnisse sehr einfach ist…

so , ich habe diese Kommentar in php gebaut..

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="viewport" content="initial-scale=1.0">

	<title>Prove</title>
<style>
</style>
</head>
<body>

<form action="" method="post" id="form">
			<label>E-Mail: *<br><input placeholder="my e-mail" type="text" name="email"><br></label>
         <br>			
			<label> Name: *<br><input placeholder="my name" type="text" name="name"><br></label>
         <br>			
			<label> Message: <br><textarea cols="45" rows="6" type="text" name="message"></textarea><br></label>
         <p>			
			<input  type="submit" name="post" value="POST COMMENT" id="comment">
         </p>
         <br>          
          <h2>Comments:</h2>
         
         
         

</form>
<?php
	
	
	
	$file = "test.php";  
	
if(empty($_POST['name'])  || 
		   empty($_POST['email']) || 
		   empty($_POST['message'])) {
				
	   echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";
	   
	}

else
	{
	 $name = $_POST['name']; 
	 $email = $_POST['email']; 
	 $message = $_POST['message'];
   }

if(isset($name) && isset($email) && isset($message)){

	$data = array("name" => $name, "email" => $email, "message" => $message, "datetime" => date('m/d/Y h:i:s a', time()));
	$data = serialize( $data );
        }




echo "<table border='1'>";
echo "<tr><td><b>Name</b></td><td><b>E-Mail</b></td><td><b>Message</b></td></tr>";

        foreach ($data as $name=>$email=>$message) 
        {
           echo "<tr><td>$name</td><td>$email</td><td>$message</td></tr>"; 
        }
        echo "</table>";

	   
         
?>


</body>
</html>

Auf meine $file = "test.php"; bekomme alles zusammen ohne Tabelle…

a:4:{s:4:"name";s:7:"vvvvvvv";s:5:"email";s:2:"gg";s:7:"message";s:14:"vvvvvvvvvvvvvv";s:8:"datetime";s:22:"09/08/2018 12:09:22 pm";} a:4:{s:4:"name";s:4:"vvvv";s:5:"email";s:16:"bccc@hotmail.com";s:7:"message";s:39:"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv";s:8:"datetime";s:22:"09/08/2018 12:13:53 pm";} a:4:{s:4:"name";s:2:"ff";s:5:"email";s:1:"m";s:7:"message";s:19:"ggggggggggggggggggg";s:8:"datetime";s:22:"09/08/2018 12:21:41 pm";}

und ich möchte so.…


Name | E-Mail | Message

| Stephen |stephen003@web.de | ich bin glückig weil der Sommer beende
---------------------------------------------------------------------------------
|Judith |Judithherbst@web.de | ich auch...............

  1. Aloha ;)

    An dieser Stelle...

    if(isset($name) && isset($email) && isset($message)){
    
    	$data = array("name" => $name, "email" => $email, "message" => $message, "datetime" => date('m/d/Y h:i:s a', time()));
    	$data = serialize( $data );
            }
    

    ...speicherst du erst Werte in einem Array, und dann überschreibst du das Array mit einem String (nämlich der serialisierten Version des Array).

    Die Variable $data enthält nun einen String.

    Hier...

            foreach ($data as $name=>$email=>$message) 
            {
               echo "<tr><td>$name</td><td>$email</td><td>$message</td></tr>"; 
            }
            echo "</table>";
    

    ...greifst du dann auf die Variable $data, die einen String enthält, mit foreach (einer Methode für den Zugriff auf ein Array) zu.

    PHP kann also die Daten gar nicht richtig bekommen, denn $data ist ja ein String.

    Abgesehen davon ist die Syntax von foreach fehlerhaft, du kannst bei phpinfo nachlesen, wie das korrekt geht.

    Versuch zunächst mal, die Speicherung der Daten im Array noch einmal zu überprüfen, so, dass die Daten nachher tatsächlich in einem Array stehen. Danach solltest du, wenn du foreach korrekt benutzt, vermutlich (nach allem was ich sehe) deine Daten tatsächlich in einer Tabelle haben.

    Mir ist zusätzlich aufgefallen, dass dein HTML an einigen Stellen unglücklich ist. Zum Beispiel sollte <h3> nur zur Auszeichnung von Überschriften verwendet werden, du benutzt es hier zur Formatierung. Ich empfehle dir, dazu nochmal in den HTML-Teil unseres Wikis zu schauen, du kannst zum Beispiel hier einsteigen.

    Grüße,

    RIDER

    --
    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
    # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
    1. Erste vielen Dank für deine empfehlen !

      Versuch zunächst mal, die Speicherung der Daten im Array noch einmal zu überprüfen, so, dass die Daten nachher tatsächlich in einem Array stehen. Danach solltest du, wenn du foreach korrekt benutzt, vermutlich (nach allem was ich sehe) deine Daten tatsächlich in einer Tabelle haben.

      , ich habe versuche so..

       $all = $data, $name, $message;
              foreach ($data as $all) 
              {
                 echo "<tr><td>$data[$name]</td><td>$data[$email]</td><td>$data[$message]</td></tr>"; 
              }
              echo "</table>";
      

      aber ohne erfolgt ... auf dem fenster wo habe test.php es nicht passiert....

      1. Aloha ;)

        Erste vielen Dank für deine empfehlen !

        Gerne. Nun hast du allerdings auch kein Array, die Array-Definition im ursprünglichen code war schon richtig, du hast die Variable nur nochmal überschrieben.

        Versuch es mal so:

          $data = array("name" => $name, "email" => $email, "message" => $message, "datetime" => date('m/d/Y h:i:s a', time()));
               
          echo "<tr><td>{$data['name']}</td><td>{$data['email']}</td><td>{$data['message']}</td></tr>"; 
                 
          echo "</table>";
        

        So kriegst du natürlich nur einen Kommentar dargestellt. Für mehrere brauchst du auch mehrere Arrays, oder ein multidimensionales und tatsächlich mit foreach zugreifen. Ich empfehle dir allerdings nachdrücklich, dich nochmal mit den Grundlagen zu beschäftigen.

        Erst jedes einzelne Teilstück im Code verstehen und anwenden können, dann benutzen.

        Sonst geht das grandios schief - und dir fehlen an der Stelle wirklich Grundlagen.

        Grüße,

        RIDER

        --
        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
        # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
        1. Hello,

          außerdem müssen die auszugebenden Arrayelemente für den HTML-Kontext escaped werden mit htmlspecialchars().

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es!
          Das Leben selbst ist der Sinn.
        2. Danke für deine Code !

          was ich habe verendert ist , wo er wird gezeigt ,ich habe der Varieble $file = "test.html"; , ich möchte das er wird auf test.html gezeigt, aber wenn ich in meine Browser , öffnet test.html , wird nichts gezeigt.... ich habe so geschrieben..

           $file = "test.html";  
          	
          if(empty($_POST['name'])  || 
          		   empty($_POST['email']) || 
          		   empty($_POST['message'])) {
          				
          	   echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";
          	   
          	}
          else
          	{
          	 $name = $_POST['name']; 
          	 $email = $_POST['email']; 
          	 $message = $_POST['message'];
             }
          if(isset($name) && isset($email) && isset($message)){
          	$file = array("name" => $name, "email" => $email, "message" => $message, "datetime" => date('m/d/Y h:i:s a', time()));
          	
          		}
          echo "<table border='1'>";
          echo "<tr><td>{$file['name']}</td><td>{$file['email']}</td><td>{$file['message']}</td></tr>"; 
                   
            echo "</table>";
          	   
          
          1. Hello,

            bitte schau Dir die Stellen im PHP-Code an, die mit Kommentaren "###" eingefügt wurden.

             $file = "test.html";  
             
            ### hier testest Du, ob die POST-Parameter vorhanden sind und ungleich "0" oder Leerzeichnen sind:
            if(empty($_POST['name'])  || 
            		   empty($_POST['email']) || 
            		   empty($_POST['message'])) {
            				
            	   echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";
            	   
            	}
            else
            	{
            ### hier überträgst Du die Post-Parameter in lokale Variablen, was vollkommen unnötig ist. Damit sind die lokalen Variablen dann aber gesetzt:
             
            	 $name = $_POST['name']; 
            	 $email = $_POST['email']; 
            	 $message = $_POST['message'];
               }
            ### Hier fragst Du, ob die lokalen Variablen gesetzt sind, was DU aber gerade im Block darüber selber getan hast. 
             
            if(isset($name) && isset($email) && isset($message)){
            	$file = array("name" => $name, "email" => $email, "message" => $message, "datetime" => date('m/d/Y h:i:s a', time()));
            	
            		}
            echo "<table border='1'>";
            echo "<tr><td>{$file['name']}</td><td>{$file['email']}</td><td>{$file['message']}</td></tr>"; 
                     
              echo "</table>";
            	   
            

            Das Escapen mit htmlspecialchars() vor der Ausgabe in den HTML-Kontext hast Du aber immer noch nicht drin.

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
            1. vielen danke für deinen bemüht ! , entschuldigung warum habe dich nicht frühr geantwortet , ich arbeite zur Zeit als Spüler und habe Abends wenig Zeit zu lernen ,noch bin ich sehr Müde... aber ich habe etwas gemacht....

              so, mit meinen Erste Teile gehe es alles gut , das ist , sie wird auf meine Datei prove.php gespeichen...

              Erste Teil Code:

              <?php  ### messages.php ### utf8 ### äöüÄÖÜ ###
                  header('Content-Type: text/html; Charset=utf-8');
                  mb_internal_encoding('UTF-8');
                  date_default_timezone_set('Europe/Berlin');
              ?>
              
              <html>
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
              <meta name="viewport" content="initial-scale=1.0">
              
              	<title>Prove</title>
              </head>
              <body>
              
              <form action="" method="post" id="form">
              			<label>E-Mail: *<br><input placeholder="my e-mail" type="email" name="email"><br></label>
                       <br>			
              			<label> Name: *<br><input placeholder="my name" type="text" name="name"><br></label>
                       <br>			
              			<label> Message: <br><textarea cols="45" rows="6"  name="message"></textarea><br></label>
                       <p>			
              			<input  type="submit" name="post" value="POST COMMENT" id="comment">
                       </p>
                       <br>          
                        <h2>Comments:</h2>
                       
                       
                       
              
              </form>
              
              if(empty($_POST['name'])  || 
              		   empty($_POST['email']) || 
              		   empty($_POST['message'])) {
              				
              	   echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";
              }
              
              	
              else
              {
              	 $name = $_POST['name']; 
              	 $email = $_POST['email']; 
              	 $message = $_POST['message'];
                       $datetime = date('m/d/Y h:i:s a', time());
                 
                       echo "<br>"
              	      . "<b>From: </b>" . htmlspecialchars( $name)  
                      . "<b> at: </b>" . htmlspecialchars($datetime ) 
                      . "<br><br>" . htmlspecialchars( $message) 
                      . "<br><hr>";
                       
              } 
              

              Das Probleme bekomme mit dem Zweite Teile , wenn ich möchte die auf test.html Speiche wird…

              Zweite Teil Code:

              if(isset($name) && isset($email) && isset($message) && isset($datetime)){
              
              	$data = array("name" => $name, "email" => $email, "message" => $message, "datetime" => date('m/d/Y h:i:s a', time()));
              	$data = serialize( $data );
              	file_put_contents( $file, $data . "\n", FILE_APPEND|LOCK_EX );
                 
                   
              
               }
              
              
              $messages = file($file);
              
              echo "<table border='1'>";
              echo "<tr><td><b>Name</b></td><td><b>Email</b></td><td><b>Message</b></td><td><b>datetime</b></td></tr>";
                  		
              foreach ( $messages as $line ) {
              	if ( $line and $data = unserialize( $line ) ) {
                 } 
                  echo "<tr>"
                        . "<td>" . htmlspecialchars( $data["name"]     ) . "</td>"
                        . "<td>" . htmlspecialchars( $data["email"]    ) . "</td>"
                        . "<td"  . htmlspecialchars( $data["message"]  ) . "</td>"
                        . "<td>" . htmlspecialchars( $data["datetime"] ) . "</td>"
                        . "</tr>";
                 }
                      
               
                 echo "</table>";
              
              ?>
              
              
              
              </body>
              </html>
              

              Bekomme zwei Probleme , ein wie der Tabelle wird gezeigt , zweitens ,der wird nicht auf test.html gespeichert , sonder in prove.php , wie das Bild Zeigt..

              wie der prove.html wird gezeigt

              1. Hallo liebewinter,

                so, mit meinen Erste Teile gehe es alles gut ,

                Nein.

                    header('Content-Type: text/html; Charset=utf-8');
                
                <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
                

                Verwende auch da UTF-8.

                Außerdem fehlt <!doctype html>.

                <form action="" method="post" id="form">
                			<label>E-Mail: *<br><input placeholder="my e-mail" type="email" name="email"><br></label>
                         <br>			
                			<label> Name: *<br><input placeholder="my name" type="text" name="name"><br></label>
                         <br>			
                			<label> Message: <br><textarea cols="45" rows="6"  name="message"></textarea><br></label>
                         <p>			
                			<input  type="submit" name="post" value="POST COMMENT" id="comment">
                         </p>
                         <br>          
                          <h2>Comments:</h2>
                </form>
                
                • <form action="" ist ungültig. Verwende kein action-Attribut, wenn du die Ausgabe in derselben Ressource haben möchtest.
                • Die placeholder sind in diesen Fällen wirklich sinnlos.
                • br-Elemente sind nicht für das Erzeugen von Abständen gedacht. Dafür gibt es CSS.
                • E-Mail und Name sind verpflichtend, die Nachricht aber nicht??
                • das submit-input sollte ein button sein.
                • Die Kommentare sind kein Bestandteil des Formulars.

                Bis demnächst
                Matthias

                --
                Rosen sind rot.
                1. vielen danke für deinen bemüht !

                  das ist wie jetzt mein Code siehst:

                  <?php  ### messages.php ### utf8 ### äöüÄÖÜ ###
                      header('Content-Type: text/html; Charset=utf-8');
                      mb_internal_encoding('UTF-8');
                      date_default_timezone_set('Europe/Berlin');
                  ?>
                  
                  <!doctype html>
                  <html>
                  <head>
                  <meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
                  <meta name="viewport" content="initial-scale=1.0"/>
                  
                  	<title>Prove</title>
                  </head>
                  <body>
                  
                  <form method="post" id="form">
                  			<label>E-Mail: *<br><input placeholder="my e-mail" type="email" name="email"><br></label>
                           <br>			
                  			<label> Name: *<br><input placeholder="my name" type="text" name="name"><br></label>
                           <br>			
                  			<label> Message: *<br><textarea cols="45" rows="6"  name="message"></textarea><br></label>
                           <p>			
                  			<input  type="submit" name="post" value="POST COMMENT" id="comment"></input>
                           </p>
                           <br>          
                            <h2>Comments:</h2>
                           
                           
                           
                  
                  </form>
                  

                  was ich nicht gut verstande habe , sind die bedeutung von den letzten vorschlagen :

                  • das submit-input sollte ein button sein.

                  • Die Kommentare sind kein Bestandteil des Formulars.

                  1. das submit-input sollte ein button sein.

                    ich habe so geschriben :

                    <button  type="submit" name="post" value="POST COMMENT" id="comment"></button>
                    

                    und dann sollte ich in css das button großer machen .....

                    1. Hallo liebewinter,

                      ich habe so geschriben :

                      <button  type="submit" name="post" value="POST COMMENT" id="comment"></button>
                      
                      <button name="post" id="comment">POST COMMENT</button><!-- warum die ID? -->
                      

                      Bis demnächst
                      Matthias

                      --
                      Rosen sind rot.
                      1. es war ein Code der gehört anderem Form... , ich habe ihn gelöscht....

                  2. Hallo liebewinter,

                    <meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
                    

                    besser: <meta charset="utf-8" />

                    <meta name="viewport" content="initial-scale=1.0"/>
                    

                    besser: <meta name="viewport" content="width=device-width, initial-scale=1.0" />

                    	<label>E-Mail: *<br><input placeholder="my e-mail" type="email" name="email"><br></label>
                    
                    • ohne <br>!
                    • ohne placeholder!
                    • ohne *!

                    Vielleicht besser

                    <label for="email">E-Mail</label>
                    <input type="email" id="email" name="email" />
                    <label for="name">Name</label>
                    <input id="name" name="name" /> <!-- type="text" kann man weglassen. -->
                    

                    Welche der beiden Varianten (label mit for oder input in label) man verwenden möchte, ist beinahe egal.

                    label::after { content: ": "; }
                    

                    was ich nicht gut verstande habe , sind die bedeutung von den letzten vorschlagen :

                    • Die Kommentare sind kein Bestandteil des Formulars.

                    <h2>Comments:</h2> sollte nicht innerhalb von <form> stehen.

                    Bis demnächst
                    Matthias

                    --
                    Rosen sind rot.
                    1. jetzt habe so…

                      <?php  ### messages.php ### utf8 ### äöüÄÖÜ ###
                          header('Content-Type: text/html; Charset=utf-8');
                          mb_internal_encoding('UTF-8');
                          date_default_timezone_set('Europe/Berlin');
                      ?>
                      
                      <!doctype html/>
                      <html>
                      <head>
                      <meta charset="utf-8"/>
                      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
                      
                      	<title>Prove</title>
                      <style>
                      
                      button {
                      	display: block;
                              width: 13em;
                              height: 3em;
                      	
                      }
                      
                      label::after { content: " "; }
                      
                      </style>
                      </head>
                      <body>
                      
                      <form method="post" id="form">
                      			<label for="email">E-Mail</label>
                                              <input type="email" id="email" name="email" />
                                              <label for="name">Name</label>
                                              <input id="name" name="name" /> 
                               
                               <br>			
                      			<label> Message: <br><textarea cols="45" rows="6"  name="message"></textarea><br></label>
                               <p>			
                      			<button  type="submit" name="post"  value="POST COMMENT">POST COMMENT</button>
                               </p>
                               <br>          
                                
                               
                               
                               
                      
                      </form>
                      

                      Was Unten stehe bleib gleich , nur habe eine probleme....wenn auf den $file = "/var/www/html/test.txt"; datei , schreibe test.txt ,bekomme diesen Fenster

                      mit test.txt

                      aber wenn schreibe $file = "/var/www/html/test.html"; , das ist test.html diesen andere Fenster…

                      mit test.html

                      aber in beiden Dateien test.txt und test.html , werden keine Text geschrieben , beiden Dateien bleiben leer...

                      1. ich habe mein test.html so gebaut:

                        <!doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                        <html>
                        <head>
                        <meta charset="utf-8"/>
                        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
                        </head>
                        
                        
                        
                        
                        
                        
                        </html>
                        
          2. Aloha ;)

            was ich habe verendert ist , wo er wird gezeigt ,ich habe der Varieble $file = "test.html"; , ich möchte das er wird auf test.html gezeigt, aber wenn ich in meine Browser , öffnet test.html , wird nichts gezeigt.... ich habe so geschrieben..

            Du möchtest eine Ausgabe auf der Seite test.html.

            Dann musst du in die Seite test.html auch etwas hineinschreiben. Das tust du aber mit deinem Code überhaupt nicht. Es ist nicht damit getan, einfach nur eine Variable zu setzen, die den Namen der Zielseite als String enthält. Du musst dann schon auch Inhalte nach $file schreiben.

             $file = "test.html";  
            

            Wie gesagt, das alleine hilft nicht. Und noch schlimmer: Du überschreibst die Variable dann später ja sogar noch.

            	$file = array("name" => $name, "email" => $email, "message" => $message, "datetime" => date('m/d/Y h:i:s a', time()));
            

            Ich kann das nur nochmal sagen: Beschäftige dich mit den Grundlagen.

            Das was du da im Begriff bist zu tun ist eine unglaublich schlechte Idee. Du möchtest Inhalte, die von deinen Usern kommen, ungeprüft auf eine Seite schreiben, die dann von Jedem aufgerufen werden kann.

            Du hast ein unglaubliches Sicherheitsproblem und das liegt einfach nur daran, dass du erst keine Ahnung davon hast was du tust, aber dann auch nach Aufforderung nicht bereit bist, die Basics zu lernen. Wir sind hier gerne bereit zu helfen, wenn es irgendwo Verständnisschwierigkeiten gibt, aber das setzt voraus, dass du auch verstehen und lernen willst. Das sehe ich im Moment nicht.

            Ich werde dir deshalb so lange nicht weiterhelfen, bis du verstehst was der Code, den du da schreibst, tut. Im Moment stocherst du nur im Nebel und das ist absolut nicht Sinn der Sache.

            Grüße,

            RIDER

            --
            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
            # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
            1. Erste vielen danke für deinen bemüht ! .

              Bitte ärger du dich nicht , mein Leben ist nicht so Einfach ..., ich arbeite als Spüler , bin keine Junge mehr ,ich habe nur Realschüler Abschluss und habe es gemacht vor einige Jahre , nicht auf meine Junge Zeit.... .

              ich habe dieses Buch gekauft , ich bin jetzt auf den Seite 200 .

              Du hast ein unglaubliches Sicherheitsproblem

              ich denke der Sicherprobleme die du sagst ist weil meine PHP Code auf prove.html steht , ich möchte erste lösunge die Pröbleme die ich gefragt habe... , Später möchte meine Code auf andere datei speichen , die nicht Öffentlich wird.. , Beispiel , meine PHP Code wird auf der Datei , code.php und er wird verbunden mit dem Datei prove.php , mit include "prove.php"; .

              1. Aloha ;)

                Erste vielen danke für deinen bemüht ! .

                Gern geschehen.

                Bitte ärger du dich nicht , mein Leben ist nicht so Einfach ..., ich arbeite als Spüler , bin keine Junge mehr ,ich habe nur Realschüler Abschluss und habe es gemacht vor einige Jahre , nicht auf meine Junge Zeit.... .

                Ich ärgere mich nicht, das sollte auch kein Angriff werden. Ich vermute nur, dass ich dir nicht weiterhelfen kann.

                Grüße,

                RIDER

                --
                Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
                # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[