Array dynamisch mit $POST befüllen

coldstone28

Mitglied
Bekomme aber immer noch dieselbe meldung.

PHP:
<?php
$fh = fopen("telefonliste.json", "a");
$txt = file_get_contents("telefonliste.json");

if($txt == "" or $txt == null) {
    $list = array();
} else {
    $list = json_decode($txt);
}

if(isset($_POST['Name'])) {
    $list[] = array('Name' => $_POST['Name'],
                        'Name' => $_POST['Name']);
}
$txt = json_encode($list);
file_put_contents("telefonliste.json", $txt);

if(isset($_GET["delete"])) {
unset($list[$i]);
}
?>

.
.
.
<?php
$txt = file_get_contents('telefonliste.json');
$list = json_decode($txt, true);
$i=0;    
foreach ($list as $entry) {
    echo      
        '<li>
        <span>' . $entry['name'] . '</span>
        <span>' . $entry['nummer'] . '</span>
        <a href="index.php?delete=' .  $i . '" class="delete"löschen">löschen</a>
      </li>';
$i++;}
?>
 

Sempervivum

Erfahrenes Mitglied
Jetzt ist das $i hier undefiniert:
Code:
 if(isset($_GET["delete"])) {
unset($list[$i]);
}
Weise es zu und wir sollten einen Schritt weiter sein:
Code:
 if(isset($_GET["delete"])) {
    $i = $_GET["delete"];
    unset($list[$i]);
}
 

coldstone28

Mitglied
ok, aber es wird trotzdem kein Eintrag gelöscht beim klicken auf den link.
In der Browserzeile wird der Arrayzähler übergeben, aber nicht gelöscht in der json datei

Code:
http://localhost/index.php?delete=1
 

Sempervivum

Erfahrenes Mitglied
Du musst das geänderte Array auch speichern:
Code:
<?php
//$fh = fopen("telefonliste.json", "a");
$txt = file_get_contents("telefonliste.json");

if($txt == "" or $txt == null) {
    $list = array();
} else {
    $list = json_decode($txt);
}

if(isset($_POST['Name'])) {
    $list[] = array('Name' => $_POST['Name'],
                        'Name' => $_POST['Name']);
}

if(isset($_GET["delete"])) {
unset($list[$i]);
}
$txt = json_encode($list);
file_put_contents("telefonliste.json", $txt);
?>
Und das fopen brauchst Du nicht, wenn Du file_get_contents benutzt
 

coldstone28

Mitglied
Du musst das geänderte Array auch speichern:
Wenn ich das so mache, kann ich einen Eintrag löschen. Wenn ich dann aber noch einen Eintrag daraufhin löschen möchte kommt folgende Fehlermeldung:
Code:
Fatal error: Uncaught Error: Cannot use object of type stdClass as array in C:\xampp\htdocs\index.php:43 Stack trace: #0 {main} thrown in C:\xampp\htdocs\index.php on line 43
line 43 verweist auf --> unset($list[$i]);
 

coldstone28

Mitglied
PHP:
unset($list[$i]);
Wo soll denn $i herkommen?
Wie meinst du das?

$i ist doch mein arrayzeiger und zeigt auf die position des Array eintrages welches gelöscht werden soll.
Ich verstehe die Zeilen wie folgt:
if(isset($_GET["delete"])) {
Wenn per GET delete gesetzt ist, führe folgendes aus:
Weise $i den Wert von $_GET["delete"] zu, z.B. 0, wenn ich auf den ersten eintrag auf löschen klicke, weil dieser in der $list[0] position im array liegt.
unset($list[$i]); --> lösche array an position $list[0].
Verstehe ich das falsch?
 

coldstone28

Mitglied
UPDATE:

Es lag an $txt = json_encode($list, true);
Der true Wert musste gesetzt werden. :)

Vielen dank für die nette Unterstützung.
 
Zuletzt bearbeitet: