1

あるページから別のページに配列で値を渡しました。爆発によって最初の 2 つの変数を抽出できますが、配列で形成された 3 番目の値を取得できません。

これは私の配列です:

$user_rate=$_POST['user_rate'];//15000|ss|Array
list($total,$promo,$rate)=explode("|",$user_rate);

だから私は得る:

$total=15000;
$promo=ss;
$rate=Array;

配列は前のページから取得されますが、日次レートをループして配列に入れます。そして、各レートが何であるかを知る必要があるので、次のように書きました。

foreach($rate as $val){
echo "$val<br>";
}

しかし、それは何も示していません。どうすればこれを入手できますか?

Updated : これは var が送信される前のコードです。

echo "
<tr>
<td align=\"right\" colspan=\"3\">Total</td>
<td align=\"right\"><label for=\"promo_3\"><input type=\"radio\" name=\"user_rate\" id=\"promo_3\" value=\"$ss_total|ss|$cost_ss\" />&nbsp;<u><b>".number_format($ss_total)."</b></u></label></td>
<td align=\"right\"><label for=\"promo_1\"><input type=\"radio\" name=\"user_rate\" id=\"promo_1\" value=\"$net_total|nc|$cost_nr\" checked/>&nbsp;<u><b>".number_format($net_total)."</b></u></label></td>
</tr>";

そして、この値の形式は変更できません。後の JavaSCRIPT 抽出で必要になるためです

$cost_ssと$ cost_nrは、データベース クエリのループから派生しています。

while($rec=mysql_fetch_array($result)){
$cost_ss[]=$rec['rate_ss'];
$cost_nr[]=$rec['rate_nr'];
}
4

6 に答える 6

2

これはおそらく間違っている$user_rate=$_POST['user_rate'];//15000|ss|Array

serialize / unserialize配列に使用できます

于 2013-05-29T15:04:10.007 に答える
1

わかりました、多くの答えと運がありません...もう一度試します:

フォームを送信する前に、配列 $rate があります。

foreach($rate as $val){
   echo "$val<br>";
}

$ss_total と文字列 "ss" を追加して送信したいので、次のことを行う必要があります。

$newarray = array('rate'=>$rate, 'type'=>'ss', 'ss_total'=>$ss_total); 
// now you have a 2-dimensional array ($newarray)

// the next step is to prepare it for form-submitting (serialize and base64_encode):
$stringvalue = base64_encode(serialize($newarray));    

// ok, now you are able to submit it as radio-field-value:
echo '<input type="radio" name="user_rate" id="promo_3" value="'.$stringvalue.'" />';

フォームが送信されると、$_POST['user_rate'] でシリアル化されエンコードされた文字列が取得されます。それがどのように表示されるかを確認したい場合は、echo を実行できます。

base64_decode と unserialize が必要です:

$arr = unserialize(base64_decode($_POST['user_rate']));

これで、アレイに完全にアクセスできるようになりました:

echo $arr['type']."<br />";

echo $arr['ss_total']."<br />";
echo $arr['rate']['index_of_rate']; // i dont know the keys of rate array...

JavaScript で $arr にアクセスします。

echo "<script>";
echo "var jsarr = ".json_encode($arr).";\n";
echo "alert(jsarr.ss_total);\n";
echo "</script>";

今すぐ手に入れてください。

于 2013-05-29T15:02:57.200 に答える
1

ページ上の値を次のようにエンコードできます

implode("|", array($total, $promo, implode(",",$rate));

次に、それをデコードします

list($total, $promo, $rates) = explode("|", $_POST["user_rate"]);
$rates = explode(",", $rates);
于 2013-05-29T15:13:57.660 に答える
1

渡す前に、配列パラメーターを使用できserializeます。それunserializeから2ページ目にそれら。

$rate = serialize($rate);

ループを実行する前の 2 ページ目:

$rate = unserialize($rate);
于 2013-05-29T15:02:20.270 に答える
1

serialize を使用することは間違いなくこれを機能させるための鍵ですが、難読化を軽減するには base64_encode() が理想的な方法です。serialize のみを使用すると、セミコロン、コンマ、二重引用符、単一引用符、および再構築するスクリプトに渡すときに問題を引き起こす可能性のあるその他のいくつかの文字が得られます。

たとえば、配列をシリアル化した後、Sidux が指摘したように、これが得られます

a:3:{i:0;s:4:"toto";i:1;s:4:"titi";i:2;a:2:{i:0;s:4:"coco";i:1;s:4:"cici";}}

ミックスに base64_encode を追加すると、操作しやすい値が得られます。

YTozOntpOjA7czo0OiJ0b3RvIjtpOjE7czo0OiJ0aXRpIjtpOjI7YToyOntpOjA7czo0OiJjb2NvIjtpOjE7czo0OiJjaWNpIjt9fQ==

これにより、トリミングやスラッシュの追加などを行うことなく、保存した配列を簡単に送受信できます。

この方法でデータを送信すると仮定すると、新しいコードは次のようになります

$user_rate=$_POST['user_rate'];//15000|ss|Array
list($total,$promo,$rate)=explode("|",$user_rate);
$rate = unserialize( base64_decode($rate) );

さて、$rate関数配列です

于 2013-05-29T15:39:54.683 に答える
0

こんにちは、私はあなたの問題を理解していると思います。たとえば、文字列として渡して配列を「シリアル化」し、他のページで「シリアル化解除」しようとすると、次のようになります。

$array = serialize(array('toto', 'titi', array('coco', 'cici')));

このようなものをあなたに与えるでしょう

a:3:{i:0;s:4:"toto";i:1;s:4:"titi";i:2;a:2:{i:0;s:4:"coco";i:1;s:4:"cici";}}

使用unserialize($array);すると、配列が返されます

于 2013-05-29T15:09:23.170 に答える