Nakledilen boş form giriş dizi önleyin?

2 Cevap

Maalesef bu yere cevaplandığında ise; Hatta yardım aramak için nasıl ifade için sorun oldukça emin değilim.

Her neyse, ben kullanıcı girişi olacak üç şarkı başlıkları üç metin girişi kutuları ile bir form var. (Ben, diyelim ki, istediğiniz gelecekte 100 şarkı başlıkları çünkü) ve başka bir belgeye şarkı başlıklarını yazmak ben bir dizi olarak bu giriş kutuları tedavi kurmak basit PHP var.

<form method="post">
<input type="text" name="songs[]" value="" />
<input type="text" name="songs[]" value="" />
<input type="text" name="songs[]" value="" />
<button type="submit" name="submit" value="submit">Submit</button>
</form>

<?php
if (isset($_POST['submit'])) {
   $open = fopen("test.html", "w");

   if(empty($_POST['songs'])) { }
   else {
      $songs = $_POST['songs'];
      foreach($songs as $song) {
         fwrite($open, $song."<br />");
      };
   };
};
?>

Bu doğru bir dış dosyaya şarkı başlıkları yazıyor. Giriş kutuları boş bile Ancak, dış dosya hala (sadece <br /> 's ile) yazılı olacaktır. Ben if deyimi kutuları boş olsaydı hiçbir şey olmazdı temin edeceğini kabul ediyorum, ama tabii ki böyle değil.

Ben bunu düşündüm gibi dizi gerçekten boş değil sanırım, ama ben bu konuda ne gelir etkileri gerçekten emin değilim. Ben yanlış ne yapıyorum biliyor musun?

(Ben, vb korkunç açıklanan Ve yine eğer, ben, PHP gelince clueless değilim, bu yüzden önce bir milyon kez cevap olmuştur eğer beni affet)

2 Cevap

Her girdiyi kontrol etmelisiniz:

<?php
if (isset($_POST['submit'])) {
   $open = fopen("test.html", "w");

   foreach($_POST['songs'] as $song) {
       if(!empty($song)) {
           fwrite($open, $song."<br />");
      };
   };
};
?>

Indeed $_POST['songs'] is not an empty array, it's an array of 3 empty strings. You can use the following to clear out all the empty values:

$song_titles = array_filter($_POST['songs'], function($title) {return (bool) trim($title);});

Ayrıca bu geri arama fonksiyonu (beyaz liste sadece alphanumerics ve diğer bazı karakterler (boşluk, tire vb)) içine diğer bazı kontroller koyabilirsiniz.

PHP bir sürümü varsa görmek http://us2.php.net/manual/en/function.array-filter.php, ayrı ayrı geri arama işlevini tanımlamak gerekecek 5.3 daha eski