2016-07-02 12 views
0

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.

+0

Simplify: '$ _SESSION [ 'name'] [] = $ _POST [ 'name'];' etc ... – AbraCadaver

+0

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

+0

@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

Antwort

2

Vereinfachen. Keine Notwendigkeit für die if s und else s:

$_SESSION['name'][] = $_POST['name']; 
$_SESSION['gender'][] = $_POST['gender']; 
+0

Ist es ratsam, dies zu tun, weiter zu Sitzungsvariable aus einem Formular senden? – PRYM

+0

Hängt davon ab. Ich schätze einen Einkaufswagen oder einen mehrseitigen Test oder so. – AbraCadaver

+0

Wahrscheinlich nicht, wenn es potenzielle Speicherrisiken auf dem Server gab, sollten Sie zu einem bestimmten Zeitpunkt eine db füllen, aber dies war eine kleine Aufgabe für eine Klasse, in der die Daten während einer Sitzung persistent sein sollten für mich, wo kein Risiko für eine Massenbevölkerung besteht – Keith

1

Sie müssen sicherstellen, dass die $_SESSION["gender"] und $_SESSION["name"] zunächst als Arrays erstellt werden. Sie sollten auch sicherstellen, dass sie nicht nur festgelegt sind, sondern Arrays vor dem Anhängen sind:

z.

function append_to_session_array($var_name) 
{ 
    if (is_array($_SESSION[$var_name])) 
    { 
    $_SESSION[$var_name][] = $_POST[$var_name]; 
    } 
    else 
    { 
    $_SESSION[$var_name] = array($_POST[$var_name]); 
    } 
} 

foreach (array("gender","name") as $v) 
{ 
    append_to_session_array($v); 
} 
Verwandte Themen