Nasıl sonrası istekten sonra seçilen form öğeleri tutmak için?

3 Cevap php

Ben basit bir html formu var. Php sayfada. Basit bir liste biçiminde yerleştirilir. Bana sayfa yenileme veriyor bu yüzden bu sayfayı bu formu (seçilen liste öğeleri) gönderin. Ben formu submited sonra seçilecek GÖNDERİLEN edildi öğeler istiyorum.

Benim form için ben böyle kod kullanmak, Ve sadece iyi çalışıyor, ama optimal ya da benim kodu için bazı optimizasyon önerebilirsiniz?

<form action="FormPage.php" method="post">
   <select id="Streams" class="multiselect ui-widget-content ui-corner-all" multiple="multiple" name="Streams[]">
     <?php      
     $query = "
SELECT s.streamId, s.userId, u.username
FROM streams AS s
JOIN user AS u ON s.userId = u.id
LIMIT 0 , 30
  ";
$streams_set = mysql_query($query, $connection);
    confirm_query($streams_set);    
    $streams_count = mysql_num_rows($streams_set);

while ($row = mysql_fetch_array($streams_set)){


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

      $array =  $_POST[Streams];
$count = count($array);
echo ",sid=" ;
for ($i = 0; $i < $count; $i++) {
 if($array[$i] == $row['streamId']){  echo '<option value="' , $row['streamId'] , '" selected="selected" >  ' , $row['username'] , ' (' , $row['streamId'] ,')' ,'</option> ';    }else
     {  echo '<option value="' , $row['streamId'] , '">  ' , $row['username'] , ' (' , $row['streamId'] ,')' ,'</option> ';  }
 }
} else { echo '<option value="' , $row['streamId'] , '">  ' , $row['username'] , ' (' , $row['streamId'] ,')' ,'</option> ';}

}
      </select>
      <br/>
      <input type="submit" class="ui-state-default ui-corner-all" name="submitForm" id="submitForm"  value="Play Stream from selected URL's!"/>    
  </fieldset>
</form>

3 Cevap

Eğer POST aldığınızda, doğru veritabanını güncellemek ve <option> unsurları selected özniteliğini ayarlamak gerekir. Örneğin:

$streams = $_POST['Streams'];
$selected = array_combine($streams, array_fill(0, count($streams), true);
$query = <<<END
SELECT s.streamId, s.userId, u.username
FROM streams AS s
JOIN user AS u ON s.userId = u.id
LIMIT 0 , 30
END;
$streams_set = mysql_query($query, $connection);
confirm_query($streams_set);    
$streams_count = mysql_num_rows($streams_set);
while ($row = mysql_fetch_array($streams_set)) {
  $id = $row['streamId'];
  $sel = $selected[$id] ? ' selected' : '';
  echo '<option value="' , $row['streamId'] , '"' . $sel . '>  ' , $row['username'] , ' (' , $row['streamId'] ,')' ,'</option> ';
}

Kullanıcı tarayıcınızın geri düğmesini kullanıyorsa eğer yanlışlıkla formu göndermek çünkü bu söyleniyor, bu en iyi uygulama olarak kabul edilmez. Bu nedenle birçok kişi POST+REDIRECT+GET pattern kullanmayı tercih.

Senin durumunda script bir POST olduğunu göreceksiniz ve veritabanına verileri kaydetmek. Daha sonra bir HTTP sayfayı yeniden yükleyin veya (gerektiği gibi) farklı bir URL yüklemek için kullanıcıya geri yönlendirme göndereceğiz. Yani GET isteği kaydedilmiş bilgilere sahip olacaktır. Bu bir ekstra sunucu tur gezisi ancak genellikle daha iyi bir kullanıcı deneyimi sonuçlanır.

Seçenek 1. Yenileme çıkarın ve form AJAX kullanarak göndermek uygulamak

Bu URL parametreleri / veya oturumları kullanarak bazı diğer değişken geçen MEKANİZMASI olarak yükler ve sayfayı yeniden elde eğer URL / oturumu değerleri alarak formda göstermek zaman seçimi 2. Form sonrası parametreleri geri gönder.

first of all the name of select field must be "Streams[]" not "Streams". Or you won't get multiple choices. Also, your code looks too spaghetty for me. I suggest you to divide it into 2 parts: business logic and presentation logic.
First, we get all data:

<?php      
$query = "
SELECT s.streamId, s.userId, u.username
FROM streams AS s
JOIN user AS u ON s.userId = u.id
LIMIT 0 , 30
";
$streams_set = mysql_query($query, $connection);
confirm_query($streams_set);    
$streams_count = mysql_num_rows($streams_set);

while ($row = mysql_fetch_array($streams_set)){
  if (in_array($row['streamId'], $_POST['Streams'])) {
    $row['sel'] = 1; 
  } else {
    $row['sel'] = 0;
  }
  $select1[]=$row;
}

Sonra, bu çıkışı yapmak

<form action="FormPage.php" method="post">
   <select id="Streams" class="multiselect ui-widget-content ui-corner-all" multiple="multiple" name="Streams[]">
   <? foreach ($select1 as $row): ?>
     <option value="<?=$row['streamId']?>" <?if($row['sel'])?>selected<?endif?> >
       <?=$row['username']?> ( <?=$row['streamId']?> )
     </option>
   <? endforeach ?>
   </select>
      <br/>
      <input type="submit" class="ui-state-default ui-corner-all" name="submitForm" id="submitForm"  value="Play Stream from selected URL's!"/>    
  </fieldset>
</form>

Temiz görünüyor, değil mi?