Php ile $ _POST verilen Strings karşılaştır

8 Cevap php

Ben şeyler boyutlarda gönderen bir form var ve ben buna göre fiyat ayarlayabilirsiniz böylece dizeleri eşit olduğunu görmek gerekir. Ben bu yapmaya çalıştığınızda, onlar eşit olmadıklarını söylüyor, ve ben hiçbir fiyatlarla almak. Bu ben kullanıyorum kodu:

if ($_POST['sizes'] == "Small ($30)"){$total = "30";}
if ($_POST['sizes'] == "Medium ($40)"){$total = "40";}
if ($_POST['sizes'] == "Large ($50)"){$total = "50";}
else {$total = $_POST['price'];}

Ben burada yanlış ne yapıyorum? Ben $ _POST ['boyutları'] echo ve bana bu şeylerin tam birini verir.

8 Cevap

Ne Paul Dixon said doğrudur. Ben de bir switch ifadesi yerine bu aksak yığın kullanarak tavsiye olabilir eğer ifadeler (ki aslında bir mantık hata var, ben ekleyeyim - $total her zaman olacak eşit $_POST['price'] değilken { [(3)]})

<?php

switch ( $_POST['sizes'] )
{
    case 'Small ($30)' :
    	$total = 30;
    	break;
    case 'Medium ($40)' :
    	$total = 40;
    	break;
    case 'Large ($50)' :
    	$total = 50;
    	break;
    default:
    	$total = $_POST['price'];
    	break;
}

?>

Bu sizin 'başka' bir varsayılan olmak, bir switch / case ifadesi için iyi bir aday.

Lütfen $ _POST ['boyutları'] Büyük değilse Ayrıca, Orta ve Büyük üzerindeki elseif bulunuyor kullanmadan, sonra $ toplam daima $ _POST ['fiyat'] olacaktır. Bu seni de kapalı atma olabilir.

Yani bilirsin, if / else 's ile sorun başka bir son her zaman oluyor olmasıdır. Bir anahtarı hala iyidir, ama burada kodu olmalıdır budur:

if ($_POST['sizes'] == "Small ($30)") { $total = "30";
} else if ($_POST['sizes'] == "Medium ($40)") { $total = "40";
} else if ($_POST['sizes'] == "Large ($50)") { $total = "50";
} else { $total = $_POST['price']; }

Sorun vb, $ 40, $ 30 olduğunu söylüyor herkes, o değil. PHP vs, 40 $ görmezden böylece Değişkenler bir sayı ile başlayamaz

Veya, aksak anahtarı bile daha iyi, bu basit mantık yararlanmak ve 'veri güdümlü programlama' pratik yapabilirsiniz:

$vals = array(
    'Small ($30)' => 30,
    'Medium ($40)' => 40,
    'Large ($50)' => 50
);

$total = array_key_exists($_POST['sizes'], $vals)
    ? $vals[$_POST['sizes']]
    : $_POST['price'];

Bunun dışında hata gerçek nedeni sizi etiketlerin dışındaki değerleri kullanılmış olsaydı, bu örneğin, kaçınılması olabilirdi:

<select name="sizes">
    <option value="small">Small ($30)</option>
    <option value="meduim">Medium ($40)</option>
    <option value="large">Large ($50)</option>
</select>

Tek tırnak kullanmayı deneyin

if ($_POST['sizes'] == 'Small ($30)'){$total = "30";}
elseif ($_POST['sizes'] == 'Medium ($40)'){$total = "40";}
elseif ($_POST['sizes'] == 'Large ($50)'){$total = "50";}
else {$total = $_POST['price'];}

Çift tırnaklı dizeleri değişken enterpolasyon kullanın, böylece $ sembolü belirgin hale gelir! this manual page PHP dize değişmezleri bildirebilirsiniz nasıl farklar için bkz.

(- Diğerleri belirtildiği gibi, bir anahtar burada çok daha net olurdu mantık hatasını düzeltmek için düzenlenmiş)

$ Bir dize toplam mı?

$ Toplam = "30"; bir dize için sözdizimi. = 30 $ toplam; Sayısal için doğru olacaktır.

Burada bir güvenlik delik var değil mi? Ya birisi sadece onlar varsayılan fıkra için istedikleri fiyat gönderir olur?