onksyonları ile bir dize değeri alma konfüzyon () ve split ()

2 Cevap
buy.php

<form action="cart.php">
<input style="width:10px; margin-left:9px; " name="price[]" type="checkbox" value="'  .    $variety['price']. '_'. $variety['variety'] '_'. $product['name']. '"  />
 </form>

Ben bunu beğendim almak inthere cart.php için yukarıdaki giriş formu yolluyorum:

list($aDoor, $variety,$productname) = split('_', $_POST['price']);
$aDoor = array();
$variety = array();
$productname= // $productname is a string how can I set it up here?

foreach ($_POST['price'] as $p)
{
  list($a, $b,$c) = explode('_', $p);
  $aDoor[] = $a;
  $variety[] = $b;
  $productname =$c; // and I have put it equal to the variable $c here
}

Yukarıda tek sorun buy.php yılında formdan gelen endeks $ Ürünü ['name'] alıyor

Cart.php ben $ ProductName tarafından alınacak kurmak var ama gördüğünüz gibi bu bir dize değil bir o onksyonları ile bir dize olduğunda onu ayarlayabilirsiniz nasıl array () ve split () olan bu Beni karıştırır.

2 Cevap

Tamam. Lütfen komut ile yanlış bir kaç şey var.

Varsayılan veri, bir 'GET' olarak sunulacak böylece 1), form etiketi üzerinde bir yöntem belirtilmeyen ettik. Eğer komut $ _POST kullanıyorsanız, yani bu değerler boş olacak ve foreach döngü yok $ _POST ['fiyat'] olarak başarısız olur.

2) "fiyat []" olarak onay adlandırma ediyoruz. [] $ _GET ['Fiyat'] bir dizi olacak ki, bu aynı adla sunulan çoklu değerler olacağını PHP söyler. Bölünmüş dizeler değil diziler çalışır gibi kod ilk birkaç satır sonra, başarısız olur. Sen atanan aşağıdaki değerleri ile bitireceğiz

 $aDoor = "Array"
 $variety = NULL;
 $productname = NULL;

PHP sizin $ orada GET['price'] array to a string, but this defaults to just coming back as the string 'Array', and there's no " "değerleri, yani listenin geri kalanı (kendilerine tahsis edilecek bir şey olması) değişkenleri dönüştürmek için çalışır, bu yüzden boş olur.

3) Bölünmüş onaylanmaz oldu ve PHP 6 silinecektir, bu nedenle patlayabilir () yerine (sadece birkaç satır sonra yapmak gibi) kullanın

Yürürlükte bölünmüş çizgi yararsız olduğunu bu yüzden 4) Daha sonra hemen, $ Adoor $ ve çeşitli boş diziler atayarak bu değerleri çöpe

Yerine bir dize $ productname dizi, atamak istiyoruz, bu yüzden $ productname [] = $ c kullanacağız olsa foreach döngü, iyi görünüyor;

5) I would, however, not store the data you're explode()ing in three seperate arrays. It would make more sense to store it like this:

$products = array();
foreach($_POST['price'] as $p) {
   list($a, $b, $c) = explode('_', $p);
   $products[] = array('aDoor' => $a, 'variety' => $b, 'productname' => $c);
}

(: UpdateInventory ($ ürünleri [7]) yani;) Bu şekilde bu verileri kullanarak herhangi bir fonksiyon etrafında 3 diziler geçmek (ya da onlara 'küresel' yapmak) zorunda değilsiniz, sadece tek bir değişken iletebilirsiniz

Bu alışveriş sepeti komut vahşi salınan ise 5), bu sunucu üzerinde kocaman bir güvenlik açığı olabilir. Ne gibi bir şey ileterek kendi fiyatını inşaa birini durdurmak istiyorum "$ 0.00_fire motor kırmızı ferrari" fiyat alan olarak? Ben her zaman ücretsiz bir Ferrari istedim ve yuvarlak açma kullanıcının tarayıcısı üzerinden fiyatlandırma verilerini almak için güzel bir yoldur. , Hiç böyle fiyatı gibi kritik verileri, yukarı kesmek değil bir müşteri asla güvenme.

Eğer form ve method niteliğini belirtmek istemiyorsanız, varsayılan GET. Lütfen komut size POST, form için POST yöntemi koyarak deneyin kullanırken:

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

İkincisi, $productname bir dize bile ancak böylece kod olur, [] ile suffixing tarafından (diğer değişkenler için yapmış gibi) diziye dönüştürebilirsiniz:

$aDoor = array();
$variety = array();
$productname = array();

foreach ($_POST['price'] as $p)
{
  list($a,$b,$c) = explode('_', $p);
  $aDoor[] = $a;
  $variety[] = $b;
  $productname[] = $c;
}

Şimdi bu üç diziler verilerinizi içerir.