Ich habe eine Seite (dest.php) als Teil einer PHP-Sitzung, jedes Mal, wenn ein Formular auf einer anderen Seite (source.php) diese einreicht, Ich muss die Zeichenfolgen aus der POST
als ein anderes Element in einer $_SESSION
Variable hinzufügen.Erstellen eines Arrays von Strings in einer SESSION-Variablen (php)
So ist die Idee ist, dass ich POST
Variablen mehrere bekommen (['name']
, ['gender']
, usw.) und müssen sie so erstmals entsprechende $_SESSION
Variable Arrays, hinzufügen das Formular abgeschickt wird, werde ich $_SESSION['name'][0] = $_POST['name']
und jedes nachfolgende submit von source.php wird neue $_POST
Variablen senden, und auf dest.php muss ich zu den $_SESSION
Arrays so hinzufügen, dass end($_SESSION['name']) = $_POST['name']
jederzeit.
Ich habe ein paar PHP später in dest.php, das alle $_SESSION
Variablen in einer Tabelle ausgibt, aber es behandelt derzeit einige der Strings anders als andere.
<table>
<?php
for($cntr = 0; $cntr < count($_SESSION['name']); $cntr++)
{
echo '<tr><td><input type="button" name="' . $cntr . '" value="edit"></td><td>';
echo $_SESSION['name'][$cntr] .' adopted a ' . $_SESSION['gender'][$cntr] . ', ' . $_SESSION['colors'][$cntr];
echo $_SESSION['species'][$cntr] . ' when visiting ' . $_SESSION['city'][$cntr] . '!' ;
echo '</td></tr>';
}
?>
</table>
Als Referenz ist die Form:
<form action="petSentence.php" method="POST" accept-charset="UTF-8">
<table><tr><td>
Your name: <input type="text" name="name"></td></tr><tr><td>
<bold>Pick a city</bold></br>
<input type="radio" name="city" value="Portland"> Portland<br>
<input type="radio" name="city" value="Seattle"> Seattle<br>
<input type="radio" name="city" value="Corvallis"> Corvallis</td><td>
<bold>Pick the color(s)</bold>
<input type="checkbox" name="colors[]" value="brown"> brown<br>
<input type="checkbox" name="colors[]" value="red"> red<br>
<input type="checkbox" name="colors[]" value="green"> green<br>
<input type="checkbox" name="colors[]" value="blue"> blue</td></tr>
<tr><td>
Gender: <select name="gender">
<option value="male">Male</option>
<option value="female">Female</option>
</select></td><td>
What Species:
<select name="species">
<option value="cat">cat</option>
<option value="dog">dog</option>
<option value="bird">bird</option>
<option value="chinchilla">chinchilla</option>
</select></td></tr>
<tr><td><input type="submit" value="Submit"></td></tr>
</table>
</form>
und ein Beispiel dafür, wie ich den Aufbau der $_SESSION
Arrays:
if(isset($_SESSION['name']))
{
array_push($_SESSION['name'], $_POST['name']);
}
else
{
$_SESSION['name'] = $_POST['name'];
}
if(isset($_SESSION['gender']))
{
array_push($_SESSION['gender'], $_POST['gender']);
}
else
{
$_SESSION['gender'] = $_POST['gender'];
}
Mit Ausnahme der ['name']
Variable gedruckt wird erwartet, aber das ['gender']
-Array druckt so, als wäre es nur ein großes Zeichen-Array.
Simplify: '$ _SESSION [ 'name'] [] = $ _POST [ 'name'];' etc ... – AbraCadaver
Ich versuchte tatsächlich, dass in einer Iteration, aber es hat das zugrunde liegende Problem nicht behoben, also blieb ich bei dem, was ich bereits hatte, bis ich das Problem behebe, dann mache ich mir Sorgen über Vereinfachungen/Optimierungen. – Keith
@AbraCadaver, wenn du das als Antwort schreibst, akzeptiere ich es sofort. Ich ging zurück, um diese Vereinfachung zu versuchen, und es verursachte Probleme, bis ich die Sitzung beendete und damit anfing, jetzt funktioniert es großartig. 'array_push()' drückt einen C-String (effektiv), aber Ihre Vereinfachung drückt einen String auf ein einzelnes Element. – Keith