Я передал значение из одной страницы в другую в массиве. Я могу извлечь первые два vars взорваться, но я не могу получить третье значение, которое формируется в массиве.
Это мой массив:
$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>"; }
Но это ничего не показывает. Как я могу это получить?
Обновлено: это код перед отправкой 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\" /> <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/> <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']; }
вwhile($rec=mysql_fetch_array($result)){ $cost_ss[]=$rec['rate_ss']; $cost_nr[]=$rec['rate_nr']; }
вероятно, это будет неправильный $user_rate=$_POST['user_rate'];//15000|ss|Array
вы можете использовать serialize / unserialize
для массива
Вы можете serialize
параметры массива, прежде чем передавать его. Затем unserialize
их на 2-й странице.
$rate = serialize($rate);
На вашей второй странице перед запуском через цикл:
$rate = unserialize($rate);
вы можете кодировать значения на странице как
implode("|", array($total, $promo, implode(",",$rate));
Затем декодируйте его с помощью
list($total, $promo, $rates) = explode("|", $_POST["user_rate"]); $rates = explode(",", $rates);
Использование serialize определенно является ключом к тому, чтобы это работало, но base64_encode () – идеальный способ сделать его менее запутанным. Когда вы используете сериализацию, вы получаете точки с запятой, запятые, двойные кавычки, одинарные кавычки и несколько других символов, которые могут вызвать проблемы, когда вы передаете их в свой скрипт, который его собирает.
Например, после сериализации массива вы получите это, например, 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
– это функциональный массив
хорошо, много ответов и не повезло … я попробую еще раз:
у вас есть массив $ 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'], вы можете сделать эхо, если хотите посмотреть, как это выглядит.
Теперь вам нужно 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...
доступ $ arr в javascript:
echo "<script>"; echo "var jsarr = ".json_encode($arr).";\n"; echo "alert(jsarr.ss_total);\n"; echo "</script>";
Надеюсь, теперь ты получишь это.
Привет, я думаю, что я понимаю, что вы проблема, когда вы passe и массивы из строки пытаетесь «сериализовать» его и «unserialize» на другой странице, например:
$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);
он даст вам ваш массив назад