У меня есть список выпадающих списков выбора, и меня интересует размещение каждого элемента массива в переменной. Чтобы вы поняли мой вопрос, я приведу здесь код:
<html dir="ltl"> <?php header('Content-Type: text/html; charset=utf-8'); $db=mysqli_connect("localhost","root","","travelersdb"); mysqli_query($db,"SET NAMES 'utf8'"); ?> <head> <link href="Styles/StyleEx.css" rel="stylesheet" type="text/css"/> </head> <script type="text/javascript"> var expanded = false; function showCheckboxes() { var checkboxes = document.getElementById("checkboxes"); if (!expanded) { checkboxes.style.display = "block"; expanded = true; } else { checkboxes.style.display = "none"; expanded = false; } } </script> <body> <tr> <td>Languages</td> <td dir="rtl"> <form method="post" action="exxx.php"> <div class="multiselect" dir="rtl"> <div class="selectBox" onclick="showCheckboxes()" dir="rtl"> <select> <option>Choose language:</option> </select> <div class="overSelect" dir="rtl"></div> </div> <div id="checkboxes"> <label for="one"> <input type="checkbox" id="one" name="languages[]" value="English">English</label> <label for="two"> <input type="checkbox" id="two" name="languages[]" value="German" >German</label> <label for="three"> <input type="checkbox" id="three" name="languages[]" value="French">French</label> <label for="four"> <input type="checkbox" id="four" name="languages[]" value="Spanish">Spanish</label> <label for="five"> <input type="checkbox" id="five" name="languages[]" value="Italien">Italien</label> </div> </div> <input type="submit" name="submit"> </form> </td> </tr> <?php if (isset($_POST['submit'])) { $languages = $_POST['languages']; $language1 = $languages[0]; $language2 = $languages[1]; $language3 = $languages[2]; $language4 = $languages[3]; $language5 = $languages[4]; echo $language1; echo $language2; echo $language3; echo $language4; echo $language5; } ?> </body> </html>
Если я проверяю все флажки, это не проблема, но если я проверю менее 5, я получу это сообщение:
Notice: Undefined offset:
Это означает, что размер массива. Как я могу избежать этого и повторять переменные, если было проверено менее 5 языков?
Вы можете использовать $$ для определения переменной. проверить демо-версию
Обратите внимание, что вы можете получить доступ ко всей переменной вне области foreach.
foreach($languages as $k => $v) { $name = 'language' . ($k + 1); $$name = $v; } print_r($language1);
Используйте цикл. Самый простой был бы предвестником.
<?php foreach ($_POST['languages'] as $lang) { echo $lang; } ?>
поскольку $ _POST ['languages'] является массивом, вы можете прокручивать все его элементы. Сколько бы там ни было. Вам даже не нужно проверять, есть ли какие-либо элементы вообще, если их нет, foreach будет опущен.
Вы должны перебирать языки и создавать переменную переменную.
for($i = 0, $cnt = count($languages); $i < $cnt; $i++) { $name = sprintf("language%d",$i+1); ${$name} = $languages[$i]; }
Он будет создавать $ language1, $ language2, .., но будет создавать столько же, сколько количество элементов в массиве (поэтому он будет создавать только 3, если было проверено 3)
Попробуй это..
if (isset($_POST['submit'])) { if(count($_POST['languages'])>0){ foreach($_POST['languages'] as $key=>$val){ echo $val; } } }
Используя рекомендации из приведенных выше ответов, я добавлю идею использовать переменные переменные, чтобы вы могли называть отдельные переменные из массива $ _POST по мере их поступления. Чтобы узнать больше об этой методике, прочитайте документацию по PHP. Также , имейте в виду, что с этим методом существует риск атаки на инъекции, поэтому вам нужно иметь способ проверить, что элементы из $ _POST – это то, что вы ожидаете.
вы можете попробовать это, foreach loop – лучший способ показать / обработать массивы
if(!empty($_POST['languages']){ $languages = $_POST['languages']; foreach($languages as $lang){ echo $lang; } }
Правильный способ сделать это – использовать функцию extract
. Сначала вам нужно сохранить в массиве, где keys
будут name of variable
а values
будут values of variable
.
Попробуйте этот фрагмент кода здесь
<?php ini_set('display_errors', 1); $array=array(); foreach($languages as $key => $language) { $array["language".($key+1)]=$language; } extract($array); echo $language1; echo $language2;