2012-06-06 4 views
0

Привет, У меня возникли проблемы с определением способа включения if clauses внутри foreach. Я пишу страницу, которая позволяет пользователю видеть данные, которые они ввели в предыдущей форме, прежде чем передать их в базу данных. Они могут выбрать выбор из данных, которые ранее были введены для разных размеров, количества и т. Д., А также для ввода собственных новых параметров. Прямо сейчас, как у меня есть, все варианты отображаются, но все они находятся на одной строке и сложены внутри ячейки. Моя проблема в том, что мне нужно создать новую строку и напечатать $size и $side для каждого значения., если внутри foreach php

<tr> 
    <td> 
<?php 
    if(isset($_POST['var1'])) { 
     $var1 = $_POST['var1']; 
     foreach($var1 as $value) { 
      echo $value . "<br>"; 
     } 
    } 
    if(isset($_POST['new_var1'])) { 
     $new_var1 = $_POST['new_var1']; 
     foreach($new_var1 as $value) { 
      echo $value . "<br>"; 
     } 
    } 
?> 
    </td> 
    <td> 
<?php 
    if(isset($_POST['var2'])) { 
     $var2 = $_POST['var2']; 
     foreach($var2 as $value) { 
      echo $value . "<br>"; 
     } 
    }  
    if(isset($_POST['new_var2'])) { 
     $new_var2 = $_POST['new_var2']; 
     foreach($new_var2 as $value) { 
      echo $side . "<br>"; 
     } 
    } 
?> 
    </td> 
</tr> 

Есть ли способ inlude if заявления в пределах foreach таким образом я могу проверить, чтобы увидеть, какие выборы будут установлены, то цикл через все выборы сразу, а затем включить <tr></tr> метки в пределах foreach? Я думал об этом, сделав несколько операторов if, которые проверяют каждую комбинацию isset для моих переменных и имеют foreach заявления, которые включают только набор вариантов, но это кажется очень неуклюжим и окольным способом делать то, что мне нужно.

+0

ли '' screw_side' и screw_size' такой же длины? – Eric

+0

Знаете ли вы, что вы можете закрыть и повторно открыть теги php по своему усмотрению? например:

+0

@JeromeWAGNER: Зачем вы это делаете здесь? – Eric

ответ

0

Да, условные обозначения допускаются в foreach заявлениях. Вы бы включили их нормально. Кроме того, код, который у вас есть, уязвим для атак XSS (межсайтовый скриптинг). Вы можете захотеть дезинформировать данные, отправляемые по почте.

Я извиняюсь, если я неправильно понял вопрос, он сформулирован немного .. интересно ..

EDIT: if(isset($var1) && isset($var2) &&...etc)

2

Я не очень понимаю вашу ситуацию, но я хотел бы предложить изменения вашего форма быть так:

<input name="screws[0][size]" /> 
<input name="screws[0][side]" /> 

<input name="screws[1][size]" /> 
<input name="screws[1][side]" /> 

<input name="screws[2][size]" /> 
<input name="screws[2][side]" /> 

Когда PHP получает, что вы можете сделать:

<?php 
$screws = @$_GET['screws']; 
$newscrews = @$_GET['newscrews']; 
?> 
<table> 
    <?php if($screws) foreach($screws as $screw): ?> 
    <tr> 
     <td><?php echo $screw['size'] ?></td> 
     <td><?php echo $screw['side'] ?></td> 
    </tr> 
    <?php endforeach ?> 
</table> 
+0

@ Eric, поэтому вы предлагаете изменить мою форму так, чтобы все переменные, связанные с «винтом», были многомерным массивом, а затем запускали foreach через это? так что это будет user1440701

+0

Это имеет для меня наибольшее значение. В конце концов, каждое поле' size' связано в поле 'side', поэтому имеет смысл иметь массив винтов, а не массив для каждого свойства. Думаю, вам нужно указывать числовые индексы в квадратных скобках, хотя - PHP только указывает индекс в конце, IIRC – Eric

+0

@ user1440701: Возможно, вы не поняли, но '@ $ _ GET ['screw']' мешает вам выполнять 'isset'.Вместо того, чтобы давать ключевую ошибку, он просто возвращает 'NULL', если ключ не установлен. – Eric

0

Вот еще одно решение, используя существующий формат данных:

<?php 
$sizes = @$_GET['screw_sizes']; 
$sides = @$_GET['screw_sides']; 
$screws = array() 

if($sides && $sizes) { 
    $n = min(count($sizes), count($sides)) 
    for ($i=0; $i < $n; $i++) { 
     $screws[$i]['side'] = $sides[$i]; 
     $screws[$i]['size'] = $sizes[$i]; 
    } 
} 
?> 

Путь эхо это одно и то же:

<table> 
    <?php foreach($screws as $screw): ?> 
    <tr> 
     <td><?php echo $screw['size'] ?></td> 
     <td><?php echo $screw['side'] ?></td> 
    </tr> 
    <?php endforeach ?> 
</table> 
Смежные вопросы