it-swarm.com.de

So entfernen Sie eine Variable aus einem PHP Session-Array

Ich habe PHP Code, der zum Hinzufügen von Variablen zu einer Sitzung verwendet wird:

<?php
    session_start();
    if(isset($_GET['name']))
    {
        $name = isset($_SESSION['name']) ? $_SESSION['name'] : array();
        $name[] = $_GET['name'];
        $_SESSION['name'] = $name;
    }
    if (isset($_POST['remove']))
    {
        unset($_SESSION['name']);
    }
?>
<pre>  <?php print_r($_SESSION); ?>  </pre>

<form name="input" action="index.php?name=<?php echo $list ?>" method="post">
  <input type="submit" name ="add"value="Add" />
</form>

<form name="input" action="index.php?name=<?php echo $list2 ?>" method="post">
  <input type="submit" name="remove" value="Remove" />
</form>

Ich möchte die Variable, die in $list2 angezeigt wird, aus dem Sitzungsarray entfernen, wenn der Benutzer "Entfernen" wählt. 

Wenn ich aber nicht setze, werden ALLE Variablen im Array gelöscht.

Wie kann ich nur eine Variable löschen?

46
LiveEn
if (isset($_POST['remove'])) {
    $key=array_search($_GET['name'],$_SESSION['name']);
    if($key!==false)
    unset($_SESSION['name'][$key]);
    $_SESSION["name"] = array_values($_SESSION["name"]);
} 

Da $_SESSION['name'] ein Array ist, müssen Sie den Array-Schlüssel finden, der auf den gewünschten Namenswert zeigt. In der letzten Zeile wird der Index des Arrays für die nächste Verwendung neu angeordnet.

51
dnagirl

So entfernen Sie eine bestimmte Variable aus der Sitzung:

session_unregister('variableName');

( siehe Dokumentation ) oder 

unset($_SESSION['variableName']);

HINWEIS:session_unregister() wurde ab PHP 5.3.0 DEPRECIERT und ab PHP 5.4.0 ENTFERNT.

43
Andreas

Ist die Variable $ _SESSION ['name'] ein Array? Wenn Sie einen bestimmten Schlüssel aus einem Array löschen möchten, müssen Sie im unset () - Aufruf genau auf diesen Schlüssel verweisen. Andernfalls löschen Sie das gesamte Array, z.

$name = array(0 => 'a', 1 => 'b', 2 => 'c');
unset($name); // deletes the entire array
unset($name[1]); // deletes only the 'b' entry

Ein weiteres kleines Problem mit Ihrem Snippet: Sie mischen GET-Abfrageparameter mit einem Formular POST. Gibt es einen Grund, warum Sie die Formulare nicht mit "Name" in einem verborgenen Feld übergeben können? Es ist am besten, Get- und Post-Variablen nicht zu mischen, insbesondere wenn Sie $ _REQUEST an anderer Stelle verwenden. Es kann jede Menge Spaß beim Versuch herauszufinden, warum $ _GET ['name'] nicht dasselbe wie $ _POST ['name'] ist, weil der Server eine andere EGPCS-Reihenfolge in 'variables_order' hat. .ini Einstellung.

<form blah blah blah method="post">
  <input type="hidden" name="name" value="<?= htmlspecialchars($list1) ?>" />
  <input type="submit" name="add" value="Add />
</form>

Beachten Sie den Aufruf von htmlspecialchars (). Wenn $ list1 oder $ list2 ein doppeltes Anführungszeichen (") enthalten, wird Ihr HTML-Code beschädigt

5
Marc B

Derzeit löschen Sie das Namensarray. Sie müssen das Array und dann den Index aufrufen, den Sie innerhalb des Arrays aufheben möchten:

$ar[0]==2
$ar[1]==7
$ar[2]==9

unset ($ar[2])

Zwei Möglichkeiten, Werte innerhalb eines Arrays zu deaktivieren:

<?php
# remove by key:
function array_remove_key ()
{
  $args  = func_get_args();
  return array_diff_key($args[0],array_flip(array_slice($args,1)));
}
# remove by value:
function array_remove_value ()
{
  $args = func_get_args();
  return array_diff($args[0],array_slice($args,1));
}

$fruit_inventory = array(
  'apples' => 52,
  'bananas' => 78,
  'peaches' => 'out of season',
  'pears' => 'out of season',
  'oranges' => 'no longer sold',
  'carrots' => 15,
  'beets' => 15,
);

echo "<pre>Original Array:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# For example, beets and carrots are not fruits...
$fruit_inventory = array_remove_key($fruit_inventory,
                                    "beets",
                                    "carrots");
echo "<pre>Array after key removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# Let's also remove 'out of season' and 'no longer sold' fruit...
$fruit_inventory = array_remove_value($fruit_inventory,
                                      "out of season",
                                      "no longer sold");
echo "<pre>Array after value removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';
?> 

Unset gesetzt hat also keine Auswirkung auf den internen Array-Zähler !!!

http://us.php.net/unset

1
James Campbell

Wenn Sie alle $ _SESSION-Werte entfernen oder deaktivieren möchten, versuchen Sie es mit diesem

session_destroy();

Wenn du bestimmte $ _SESSION ['name'] entfernen willst, versuche dies

session_unset('name');
1
Asad Ali

Probier diese:

if(FALSE !== ($key = array_search($_GET['name'],$_SESSION['name'])))
{
    unset($_SESSION['name'][$key]);
}
0