2016-07-02 1 views
0

에 문자열 배열 만들기 PHP 세션의 일부로 페이지 (dest.php)가 있습니다. 다른 페이지 (source.php)의 양식이이 항목에 제출 될 때마다, POST의 문자열을 $_SESSION 변수의 다른 요소로 추가해야합니다. SESSION 변수 (PHP)

그래서 생각 나는 몇 가지 POST 변수 ( ['name'], ['gender'] 등)을 얻을 양식이 제출 처음으로, 그래서 내가 $_SESSION['name'][0] = $_POST['name']있을 것이다, $_SESSION 변수 배열 대응에 추가해야한다는 것입니다 그리고 이후에 source.php에서 submit 할 때마다 새로운 $_POST 개의 변수가 보내질 것이고 dest.php에는 배열에 항상 end($_SESSION['name']) = $_POST['name']과 같은 배열을 추가해야합니다.

나는 모든 $_SESSION 변수를 테이블에 반향시키려는 dest.php의 일부 PHP를 가지고 있지만 현재 다른 사람들과 다른 문자열을 처리 중입니다.

<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> 

어떻게 내가 $_SESSION 배열을 짓고 있어요 예 :

<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> 

이 참고로, 형태 인 ['name'] 변수를 제외하고

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']; 
} 

기대로 인쇄하고, ['gender'] 배열은 마치 큰 문자 배열처럼 인쇄합니다.

+0

단순화 : 다음 if들과 else들에 대한 필요는'$ _SESSION [ '이름'] [] = $ _POST [ '이름'] '등 ... – AbraCadaver

+0

사실 하나 그것을 시도하지 않았다 반복하지만 근본적인 문제는 해결되지 않았으므로 문제를 해결할 때까지 이미 가지고 있던 것을 고수하고 단순화/최적화에 대해 걱정할 것입니다. – Keith

+0

@AbraCadaver, 답변으로 답장을 보내 주시면 바로 동의하겠습니다. 나는 그 단순화를 시도하기 위해 되돌아 갔고, 세션을 끝내고 시작하기 전까지는 문제가 발생했습니다. 이제는 잘 작동합니다. 'array_push()'는 c-string을 (효과적으로) 푸시하지만, 단순화는 문자열을 단일 요소로 푸시하는 것입니다. – Keith

답변

2

단순화.

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

양식 제출에서 세션 변수에 계속 추가 하시겠습니까? – PRYM

+0

에 따라 다릅니다. 나는 장바구니 또는 멀티 페이지 테스트 또는 뭔가를 추측한다. – AbraCadaver

+0

아마도 서버에 잠재적 인 메모리 위험이있는 경우가 아니라면 특정 시점에 db를 채우는 것이 좋지만이 작업은 세션 중에 데이터를 유지해야하는 클래스에 대한 작은 할당이므로 작동합니다 일부 집단 인구의 위험이없는 곳에 나를 위해 – Keith

1

$_SESSION["gender"]$_SESSION["name"]이 배열로 처음 만들어 졌는지 확인해야합니다. 또한 추가하기 전에 배열이 설정되어 있지 않은지 확인해야합니다.

예 :

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); 
}