PHP: Form seçim kutusu DB değiştirilen seçim yazmaz

4 Cevap php

Tamam, bu yüzden url = 1? Düzenlemeyi eklerseniz düzenleme için bir DB rekor önyükleneceği ayarlandığında bu form var, o forma düzenleme için kayıt 1. yükleyecektir. Ben gibi bir kutu var bu-

<select class="field select addr">
  <option value="no"<?php if($row['has_amenities'] == "no") {echo ' selected=\"selected\"'; } ?>>No</option>
  <option value="yes"<?php if($row['has_amenities'] == "yes") {echo     'selected=\"selected\"'; } ?>>Yes</option>
</select>

Şimdi, o $ row ['has_amenities'] "evet", bu nedenle zaman form yüklendiğinde, seçim kutusu "Evet" gösteriyor diyelim.

Ben "Hayır" için seçme kutusunu değiştirmek ve kaydetmek tıklarsanız ANCAK, bu DB için "hayır" yazmaz, ama silip olmadığını rekorum "evet" ile hiçbir şey.

Ben yanlış ne yapıyorum?

İşte güncelleme kod -

    $sql = "UPDATE venues SET microsite_title = '$_POST[microsite_title]', 
microsite_city_title = '$_POST[microsite_city_title]', logo = '$_POST[logo]', photo1 = 
'$_POST[photo1]', photo2 = '$_POST[photo2]', photo3 = '$_POST[photo3]', photo4 = 
'$_POST[photo4]', photo5 = '$_POST[photo5]', photo6 = '$_POST[photo6]', photo7 = 
'$_POST[photo7]', photo8 = '$_POST[photo8]', website_primary = '$_POST[website_primary]', 
website_secondary = '$_POST[website_secondary]', paragraph_1_title = 
'$_POST[paragraph_1_title]', paragraph_1 = '$_POST[paragraph_1]', paragraph_2_title = 
'$_POST[paragraph_2_title]', paragraph_2 = '$_POST[paragraph_2]', paragraph_3_title = 
'$_POST[paragraph_3_title]', paragraph_3 = '$_POST[paragraph_3]', paragraph_4_title = 
'$_POST[paragraph_4_title]', paragraph_4 = '$_POST[paragraph_4]', paragraph_5_title = 
'$_POST[paragraph_5_title]', paragraph_5 = '$_POST[paragraph_5]', paragraph_6_title = 
'$_POST[paragraph_6_title]', paragraph_6 = '$_POST[paragraph_6]', top10_1 = 
'$_POST[top10_1]', top10_2 = '$_POST[top10_2]', top10_3 = '$_POST[top10_3]', top10_4 = 
'$_POST[top10_4]', top10_5 = '$_POST[top10_5]', top10_6 = '$_POST[top10_6]', top10_7 = 
'$_POST[top10_7]', top10_8 = '$_POST[top10_8]', top10_9 = '$_POST[top10_9]', top10_10 = 
'$_POST[top10_10]', top10_locale = '$_POST[top10_locale]', contact_title = 
'$_POST[contact_title]', contact_street_addr = '$_POST[contact_street_addr]', 
contact_street_addr2 = '$_POST[contact_street_addr2]', contact_city = 
'$_POST[contact_city]', contact_state = '$_POST[contact_state]', contact_zip = 
'$_POST[contact_zip]', contact_phone = '$_POST[contact_phone]', contact_tollfree = 
'$_POST[contact_tollfree]', latitude = '$_POST[latitude]', longitude =     '$_POST[longitude]', 
testimonial = '$_POST[testimonial]', sidebar_title = '$_POST[sidebar_title]', 
sidebar_content = '$_POST[sidebar_content]', has_amenities = '$_POST[has_amenities]' 
WHERE id = '$_POST[query]'";

O): Ayrıca, ben öncelikle onları temizlemeden $ _POST değerleri yazmak için iyi bir fikir olmadığını biliyorum, ama bu işe yarıyor sonra ben daha sonra temizlerim bir güvenlik duvarının arkasında vb bir iç şeklidir

Teşekkürler!

4 Cevap

Eleman hiç ad veya id var gibi görünüyor - sizin kod böyle? Eğer öyleyse, ben $ _POST [has_amenities] ayarlanamaz inanıyorum - $ _POST hiçbir has_amenities değeri olmazdı. Bunun yerine boş bir dize almak istiyorum.

Wrap all of the instances of $_POST[] in {} (curly braces) so it looks like this

'{$_POST['key']}'

Kaşlı bir çift tırnaklı dizge içinde ne zaman bir değişken olarak $ _POST değerlendirmek için PHP zorlamak için ihtiyacı vardır.

Also, quote your $_POST array keys like this

$_POST['key']

Sen $ _POST [anahtar] genelde işe yarar olsa da bu alışkanlığı elde etmek istiyoruz. PHP key tanımsız ise size bekliyorsanız davranışı olsun, otomatik olarak bir dize "anahtar" dönüşmüş olan, bir sabit olarak tedavi edilir.

Ancak, key zaten define() ) function, you'll get the value ne istediğiniz değil hangi key sabiti üzerinden (sabit olarak varsa.

Array do's and don'ts bölümüne bir göz atın.

Böylece gibi kaşlı ile dizi değişkenleri kaydırma deneyin:

'$_POST[paragraph_3]' = '{$_POST[paragraph_3]}'

Bu select etiketi için bir isim belirtmeniz gerekir. Ben de size (: kötü html seçilen \ "tam anlamıyla kullanmak olacaktır \" seçilen = \ çıkış gibi görünecektir böylece ") gereksiz olduğu, ters eğik çizgi ile çift tırnak kaçan görüyorum.

Bu kullanmayı deneyin:

<select name="has_amenities" class="field select addr">
  <option value="no"<?php if($row['has_amenities'] == "no") {echo ' selected="selected"'; } ?>>No</option>
  <option value="yes"<?php if($row['has_amenities'] == "yes") {echo     'selected="selected"'; } ?>>Yes</option>
</select>

SQL deyimi o şekilde çalışmak değil, bir tek alıntı kullanıcı tarafından girildiği takdirde, muhtemelen büyük bir güvenlik deliği neden ... deyimi kıracak olacaktır. Google "SQL enjeksiyon" check out.