2012-03-10 2 views
1

У меня есть 2 набора из 4 полей ввода в моей HTML-форме. Я ожидаю, что в конечном итоге у вас будет более 20 наборов, но для этого примера они предоставили всего 2.Удаление данных из переменной, если поля ввода неполные - PHP

Можно , если «набор» полей неполно, что я могу просто удалить эту строку из моих результирующих $ все переменной. Поэтому вместо того, чтобы иметь строку с данными '| | | |» он просто будет совершенно пустым.

Это просто поможет очистить вещи.

Этого было бы достаточно легко достичь?

Вот мой текущий stuff.php сценарий, который я использую для тестирования.

<html> 

<head> 

<title>Test PHP</title> 

</head> 

<body> 

<?php 

if (isset($_POST['sendform'])) { 


    $ierrors = array(); 
    $all = ''; 

    // Loop over the values 1 through 2 
    foreach(range(1, 2) as $i) 
    { 
     // Create an array that stores all of the values for the current number 
     $values = array( 
      'p' . $i . 'height' => $_POST['p' . $i . 'height'], 
      'p' . $i . 'width' => $_POST['p' . $i . 'width'], 
      'p' . $i . 'length' => $_POST['p' . $i . 'length'], 
      'p' . $i . 'weight' => $_POST['p' . $i . 'weight'] 
     ); 

     // Validate every value 
     foreach($values as $key => $value) 
     { 
      if(empty($value)) 
      { 
       $ierrors[] = "Value $key is not set"; 
      } 
      // You can add more validation in here, such as: 
      if(!is_numeric($value)) 
      { 
       $ierrors[] = "Value $key contains an invalid value '$value'"; 
      } 
     } 

     // Join all of the values together to produce the desired output 
     $all .= implode('|', $values) . "\n\n"; 
    } 

    var_dump($all); 

} 

?> 

<form action="stuff.php" method="post"> 

    <div id="npup0" class="hidden"> 
     <div class="parcel-group"> 
      <div class="parcel-title"> 
       <label for="p1weight">Parcel 1</label> 
      </div> 
      <div class="minis weight"> 
       <input type="text" id="p1weight" name="p1weight" value="<?php if ((isset($_POST['sendform'])) && (!empty($_POST['p1weight']))) { echo htmlspecialchars($_POST['p1weight']); } ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> 
      </div> 
      <div class="minis length"> 
       <input type="text" id="p1length" name="p1length" value="<?php if ((isset($_POST['sendform'])) && (!empty($_POST['p1length']))) { echo htmlspecialchars($_POST['p1length']); } ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> 
      </div> 
      <div class="minis width"> 
       <input type="text" id="p1width" name="p1width" value="<?php if ((isset($_POST['sendform'])) && (!empty($_POST['p1width']))) { echo htmlspecialchars($_POST['p1width']); } ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> 
      </div> 
      <div class="minis height"> 
       <input type="text" id="p1height" name="p1height" value="<?php if ((isset($_POST['sendform'])) && (!empty($_POST['p1height']))) { echo htmlspecialchars($_POST['p1height']); } ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> 
      </div> 
     </div> 
    </div> 

    <div id="npup1" class="hidden"> 
     <div class="parcel-group"> 
      <div class="parcel-title"> 
       <label for="p1weight">Parcel 2</label> 
      </div> 
      <div class="minis weight"> 
       <input type="text" id="p2weight" name="p2weight" value="<?php if ((isset($_POST['sendform'])) && (!empty($_POST['p2weight']))) { echo htmlspecialchars($_POST['p2weight']); } ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> 
      </div> 
      <div class="minis length"> 
      <input type="text" id="p2length" name="p2length" value="<?php if ((isset($_POST['sendform'])) && (!empty($_POST['p2length']))) { echo htmlspecialchars($_POST['p2length']); } ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> 
      </div> 
      <div class="minis width"> 
      <input type="text" id="p2width" name="p2width" value="<?php if ((isset($_POST['sendform'])) && (!empty($_POST['p2width']))) { echo htmlspecialchars($_POST['p2width']); } ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> 
      </div> 
      <div class="minis height"> 
      <input type="text" id="p2height" name="p2height" value="<?php if ((isset($_POST['sendform'])) && (!empty($_POST['p2height']))) { echo htmlspecialchars($_POST['p2height']); } ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> 
      </div> 
     </div> 
    </div> 

    <p><input type="submit" value="click me" id="sendform" name="sendform" /></p> 

</form> 

</body> 

</html> 

Большое спасибо за любые указатели. Некоторое время боролся с этим.

+0

Зачем использовать диапазоны? вместо этого у вас есть два разделенных имени более чем достаточно для представления –

+0

Привет Сэм. Я использую диапазоны, поскольку, как я полагаю, в конечном итоге у вас будет более 20 наборов из этих 4 полей ввода. – michaelmcgurk

ответ

1

Да, укажите условие, которое объединяет только $values с $all до тех пор, пока $values не пуст.

// Assume all values are empty. 
$allEmpty = true; 

// Validate every value 
foreach($values as $key => $value) 
{ 
    if(empty($value)) 
     $ierrors[] = "Value $key is not set"; 
    else 
     $allEmpty = false; 


    // You can add more validation in here, such as: 
    if(!is_numeric($value)) 
     $ierrors[] = "Value $key contains an invalid value '$value'"; 
} 

// Join all of the values together to produce the desired output 
if (!$allEmpty) 
    $all .= implode('|', $values) . "\n\n"; 
+0

Спасибо за ваш ответ. К сожалению, он все еще выводит пустую строку. Я заполняю поля «Посылка 1» и оставляю поля «Партия 2» пустыми, но он все еще выводит: строка ''4 | 3 | 2 | 1 ||| '(length = 14) ' – michaelmcgurk

+1

@mcgarriers Я заметил, что я наблюдал за использованием' empty' в массиве пустых значений. Рассмотрим мое обновление. – Josh

+0

Спасибо за редактирование. Я все еще верю, что мы еще не на 100% правы. Теперь, когда я заполняю поля «Посылка 1» и оставляю поля «Партия 2» пустыми, но он все равно выводит: 'string '||| '(length = 5) ' – michaelmcgurk

 Смежные вопросы

  • Нет связанных вопросов^_^