Array dynamisch mit $POST befüllen


coldstone28

Mitglied
Hallo,

ich versuche einen Array in PHP mit dem $POST zu befüllen.
Vielleicht liege ich auch am Ansatz falsch.

Also habe folgendes Formular:
HTML:
 <form id="" action="index.php" method="post">
      <input type="text" placeholder="Name" name="Name">
      <input type="text" placeholder="Telefonnummer" name="Telefonnummer">
      <input type="submit" value="hinzufügen">
</form>
Habe jetzt folgendes versucht um es:
PHP:
$namen = array($_POST);
print_r($namen);
Er weist dem Array immer die aktuell übermittelte $POST zu.
Wie weise ich es dynamisch hinzu, damit es immer befüllt wird?
 

coldstone28

Mitglied
Also im Grunde genommen möchte ich folgendes.
Es soll jedesmal wenn auf "submit" geklickt wird, Name und Telefonnummer in eine Datei geschrieben werden.
Danach von der Datei die Daten auslesen und in eine Array packen um danach über das Array iterieren mit einer Schleife, damit ich die Daten wieder ausgeben kann.
Nun in eine Datei schreiben kein Problem, nur aus der Datei die Daten wieder auszulesen um über die Daten zu iterieren klappt irgendwie nicht.
Daher dachte ich, Pack die Daten in eine Array und schreibe Sie dann in die Datei.
Einlesen:
PHP:
if(isset($_POST)) {
    $fh = fopen("Telefonliste.txt", "a");
    foreach($_POST as $value) {
        fputs($fh, " ".$value."\n");
    }
}
 

Sempervivum

Erfahrenes Mitglied
Verstehe. Du musst dafür aber unbedingt eine Datenbank verwenden! :LOL:
Scherz beiseite: Wenn Du ein Array in einer Textdatei ablegen willst, geht das am besten, wenn Du es JSON-kodierst.

Eintrag hinzu fügen:
PHP:
$txt = file_get_contents("Telefonliste.txt");
$telelist = json_decode($txt);
if(isset($_POST)) {
    $telelist[] = $_POST;
}
$txt = json_encode($telelist);
file_put_contents($txt);
Einträge auslesen:
PHP:
$txt = file_get_contents("Telefonliste.txt");
$telelist = json_decode($txt);
foreach ($telelist as $entry) {
    // $entry ist der aktuelle Eintrag, diesen kannst Du hier ausgeben
}
 

ComFreek

Mod | @comfreek
Moderator
(JSON-Dateien hab üblicherweise eine *.json Dateiendung :) Aber sonst stimme ich dem zu! Ggf. statt $telelist[] = $_POST gezielt die Daten reinlesen, sonst kommen möglicherweise unerwünschte andere $_POST-Daten auch mit rein.)
 

coldstone28

Mitglied
Einträge auslesen:
PHP:
$txt = file_get_contents("Telefonliste.txt");
$telelist = json_decode($txt);
foreach ($telelist as $entry) {
    // $entry ist der aktuelle Eintrag, diesen kannst Du hier ausgeben
}
PHP:
Parse error: syntax error, unexpected '}', expecting ';' or ',' in C:\xampp\htdocs\index.php on line 77
Bekomme beim auslesen folgende Fehlermeldung im Browser.
Weis gar nicht was an den geschweiften Klammern falsch sein soll!?

Und kann ich gezielt, die $entry einträge in HTML ausgeben?
ich meine folgendes:
HTML:
...
<p>Name</p>
<p>Telefonnummer</p>
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
Hm, ich kann da keinen Fehler erkennen. Die Fehlermeldung scheint vom PHP-Parser zu kommen. Welches ist denn Zeile 77?
 

coldstone28

Mitglied
Hm, ich kann da keinen Fehler erkennen. Die Fehlermeldung scheint vom PHP-Parser zu kommen. Welches ist denn Zeile 77?
Ok, keine Ahnung warum, aber nach schließen der Datei und neu einfügen des Codes jetzt geht es. :cool:
Habe da wohl irgendwo eine Klammer falsch gesetzt.

Jetzt muss ich nur noch den Inhalt Zeilenweise dynamisch in HTML einfügen:

HTML:
 <p>Name</p>
<p>Telefonnummer</p>
Vielen dank erstmals, ich versuche mal mein Glück und melde mich ggbf. wieder.:giggle:
 

coldstone28

Mitglied
Kann ich keine anker tags und listen tags in php einbinden?

Dachte jetzt an folgendes:

PHP:
$txt = file_get_contents("telefonliste.json");
$telelist = json_decode($txt,true);
foreach ($telelist as $entry) {
  
echo "<li>
        <a href=""class="check"></a>
        <span>Name</span>
        <span>Telefonnummer</span>
        <a href="" class="uncehcked"</a>
      </li>";
}
Ich dachte jetzt ich lasse bei jedem Schleifendurchlauf, daß HTML Grundgerüst je nach Größe immer hinzufügen.
Dabei den Wert aus $entry jeweils dem Namen und Telefonnummer hinzufügen.

Also ungefähr so:

PHP:
$txt = file_get_contents("telefonliste.json");
$telelist = json_decode($txt);
foreach ($telelist as $entry) {
  
echo "<li>
        <a href=""class="check"></a>
        <span><?php $entry["name"]?></span>
        <span><?php $entry["telefonnummer"]?></span>
        <a href="" class="uncehcked"</a>
      </li>";
}
Aber PHP -> HTML -> PHP ist glaube ich nicht erlaubt!?
Zumindest geht das nicht in meinem Fall.

Und wie spreche ich die einzelnen Elemente im Array an?
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
Selbstverständlich kannst Du li-Tags erzeugen, alles was es in HTML gibt. Und die Werte aus dem Array kannst Du so einfügen:
Code:
      echo "<li>
        <a href=""class="check"></a>
        <span>$entry['Name']</span>
        <span>$entry['Telefonnummer']</span>
        <a href="" class="uncehcked"</a>
      </li>";
 

coldstone28

Mitglied
PHP:
$txt = file_get_contents("telefonliste.json");
$telelist = json_decode($txt);
foreach ($telelist as $entry) {
    
echo "<li>
        <a href=""class="check"></a>
        <span>$entry['Name']</span>
        <span>$entry['Telefonnummer']</span>
        <a href="" class="uncehcked"</a>
      </li>";
}
Bei mir gibt er im Browser folgende Fehlermeldung:

Code:
Parse error: syntax error, unexpected '"class="' (T_CONSTANT_ENCAPSED_STRING), expecting ';' or ',' in C:\xampp\htdocs\index.php on line 6
 

Sempervivum

Erfahrenes Mitglied
Da gibt es jetzt ein Problem mit den doppelten Hochkommas: Wenn Du eines notierst, das eigentlich zum HTML gehört, wird es als Stringende interpretiert. Beim Generieren von HTML mit Attributen ist es einfacher mit den einfachen Hochkommas:
Code:
$txt = file_get_contents("Telefonliste.txt");
$telelist = json_decode($txt, true);
foreach ($telelist as $entry) {
    echo '<li>
        <a class="check"></a>
        <span>' . $entry['Name'] . '</span>
        <span>' . $entry['Telefonnummer'] . '</span>
        <a href="" class="unchecked"</a>
      </li>';
}
 

coldstone28

Mitglied
Ok, soweit ok.
Wenn ich die Daten im Browser eingebe kommen die auch auf die gewünschte Position, nur wenn ich nichts eingebe und Submit auslöse, wird trotzdem eine leer Zeile eingefügt.
Dachte jetzt eigentlich mit isset löse ich es nur aus, wenn Daten übermittelt werden.
Also code sieht folgendermassen jetzt aus:

PHP:
     if(isset($_POST)) {  
    $txt = file_get_contents("telefonliste.json");
$telelist = json_decode($txt, true);
foreach ($telelist as $entry) {

    echo '<li>
        <a href=""class="check" title=""></a>
        <span>' . $entry['Name'] . '</span>
        <span>' . $entry['Telefonnummer'] . '</span>
        <a href="" class="unchecked" title="">löschen</a>
      </li>';
}
}
Wenn ich die Seite neu lade, kommt auch immer folgende Fehlermeldung im Browser:

Code:
Notice: Undefined index: Menge in C:\xampp\htdocs\index.php on line 8

Notice: Undefined index: Ware in C:\xampp\htdocs\index.php on line 9
 

m.scatello

Mitglied
Da in den geposteten Zeilen weder auf einen Index mit dem Namen Menge noch Ware zugegriffen wird , passen diese Meldungen nicht zu dem Quellcode
 

coldstone28

Mitglied
Verstehe ich nicht ganz.
Wenn meine json datei wie folgt aussieht:

JSON:
[{"Name":"Peter","Telefonnummer":"123456789"}]
Dann müsste er doch auf mit:

PHP:
echo '<li>
        <a href=""class="check" title=""></a>
        <span>' . $entry['Name'] . '</span>
        <span>' . $entry['Telefonnummer'] . '</span>
        <a href="" class="unchecked" title="">löschen</a>
      </li>';
auf Name und Telefonnummer aus der json datei zugreifen und ausgeben?
Oder verstehe ich da beim Ablauf was falsch?

Oder liegt das Problem bei den [ " ] und [ ' ]???
 

coldstone28

Mitglied
Kann mir jemand sagen was ich hier falsch mache?

PHP:
.
.
.
    if(isset($_GET['delete'])) {
unset($list[$i]);
}
.
.
.
$txt = file_get_contents('telefonliste.json');
$list = json_decode($txt, true);
$i=0;       
foreach ($list as $entry) {
     echo         
        '<li>
        <a href=""class="done" title=""></a>
        <span>' . $entry['Name'] . '</span>
        <span>' . $entry['Nummer'] . '</span>
        <a href="index.php?delete=<?php echo $i?>" class="delete" title="Eintrag löschen">löschen</a>
      </li>';
$i++;}
?>
Wenn ich auf den Anker link zum löschen klicke bekomme ich die folgende fehlermeldung im Browser:

Notice: Undefined variable: i in C:\xampp\htdocs\index.php on line 5

Ich kann mir vorstellen, daß der Fehler im PHP Code im Anker liegt
PHP:
        <a href="index.php?delete=<?php echo $i?>" class="delete" title="Eintrag löschen">löschen</a>
aber was genau an der Schreibweise falsch ist, weis ich nicht.

Browserzeile übernimmt auch den php code direkt, und nicht den Inhalt von $i.
Code:
http://localhost/index.php?delete=<?php echo $i?>
 

Sempervivum

Erfahrenes Mitglied
Du befindest dich bei der fraglichen Zeile schon in einem PHP-Abschnitt, und zwar in der Definition eines Strings. Daher wird das <?php echo $i?> einfach in der String übernommen und erst geparst, wenn Du auf den Link geklickt hast.
Du musst die Variable $i genau so in den String einfügen, wie Name und Nummer:
<a href="index.php?delete=' . $i . '" class="delete" title="Eintrag löschen">löschen</a>
 
Zuletzt bearbeitet:

Neue Beiträge