2017-03-06 6 views
0

私のページが送信されるたびに配列に追加し続けるコードを実装しようとしています。 serialize/unserializeメソッドを使ってこれを行いたい。何らかの理由で私の配列は単純に1つの項目を追加し、フォームを送信するたびにその項目を変更します。隠し要素によるPHPビルド配列

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<?php 
    $array_var=array("Name"=>"Doe","Karma"=>"45","Date"=>"2012-08-30"); 
?> 

<form action="testtestmain.php" method="post"> 
    <input type="hidden" id="str_var" name="str_var" value="<?php print base64_encode(serialize($array_var)) ?>"> 
    <input type="text" name="name" value="Name"> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

<?php 
if (isset($_POST['str_var'])) { 
    $str_var=$_POST['str_var']; 
    $str_var=unserialize(base64_decode($_POST['str_var'])); 
    $str_var[]=$_POST['name']; 

    foreach ($str_var as $cur) { 
     echo $cur."<br>"; 
    } 
} 
?> 

</body> 
</html> 

答えて

0

PHP値はリクエスト間に保存されません.HTTPはステートレスプロトコルです。したがって、ページを送信して更新するたびに、配列は空になります。

データを保持したい場合は、クッキー、ファイル、セッション、またはデータベースのいずれかに保存する必要があります。

また、フォームを正しく入力できるようにPHPを上に移動して、隠しフィールドから配列全体を再送信することもできます。

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 

</head> 
<body> 

<?php 

$str_var = isset($_POST['str_var']) ? unserialize(base64_decode($_POST['str_var'])) : []; 

if(isset($_POST['str_var'])) 
{ 
    $str_var[] = $_POST['name']; 
} 

?> 

<form action="testtestmain.php" method="post"> 
    <input type="hidden" id="str_var" name="str_var" value="<?php print base64_encode(serialize($str_var)) ?>"> 
    <input type="text" name="name" value="Name"> 
    <input type="submit" name="submit" value="Submit"> 

</form> 

<?php 
foreach($str_var as $cur) 
{ 
    echo $cur."<br>"; 
} 
?> 


</body> 
</html> 
+0

こんにちはFreidは入力として隠れ要素にそれを保存する方法はありませんか? – lolsharp

+0

ああ、申し訳ありませんが、私はあなたが何をしようとしているか理解していません。私は自分の答えを更新しました^。 – Freid001

+0

セッションやデータベースを使用する必要があると思うのは初めてです – lolsharp

関連する問題