Dizi her zaman olduğu gibi boş geri geliyor

6 Cevap php

Aşağıda benim oyun için benim kayıt formu ve kullanıcı yapmış olabilir, ama bir hata bulunursa bile alışkanlık $errors dizinin üzerine eklemek hataları arıyor. I print_r dizisi boş döner.

Bir şey yanlış gidiyor inanıyorum eğer fonksiyonları çünkü dışarıdan gelen biri diziye bir değer eklerseniz onu ekler işlevleri eğer.

İşte benim kod:

if (isset($_GET['action'])){
db_connect();
db_select();

if ($_GET['action'] == "register"){
  $username = $_POST['username'];
  $password = $_POST['password'];
  $confirm = $_POST['confirm'];
  $email = $_POST['email'];
  $agree = $_POST['agree'];

  $errors = array();
  if (!isset($username)){
    $errors['0'] = "You did not specifiy a username";
  }elseif (ereg("[^a-z0-9]", $username)) {
    $errors_array['0'] = "Usernames can only contain lowercase letters and numbers";
  }elseif (mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = '{$username}'")) > 0) {
    $errors['0'] = "The username you chose has already been taken";
  }

  if (!isset($password)){
    $errors['1'] = "You did not specify a password";
  }elseif ($password != $confirm){
    $errors['1'] = "The password and password confirm fields do not match";
  }

  if (!isset($email)){
    $errors['2'] = "You did not specify a E-mail address";
  }elseif (mysql_num_rows(mysql_query("SELECT email FROM users WHERE email = '{$email}'")) > 0) {
    $errors['2'] = "The E-mail you specified is already being used";
  }
  print_r($errors);
  }
}

6 Cevap

Öncelikle bunu:

$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];

Eğer $ username, $ password, vb isset () ve ardından denetlemek. (Sadece onları başlatıldı çünkü) bu her zaman doğru dönecektir. Yapmanız gereken ise $ _POST değişkenler (yarattığınız IE değil değişkenler) üzerinde (isset ()).

Eğer gerçek veri (geçerli bir e-posta adresi, min / max kullanıcı adı uzunluğu, vb) kontrol edin herhangi kontrolleri yapmıyoruz çünkü bu nedenle tüm kontrolleri, mükemmel çalışacaktır.

Bu gibi sorunları keşfetmek için basit bir yolu E_ALL için error_reporting ayarlamaktır. Bu Varolmayan bir değişken / set olmamıştır kullanırsanız, bu size bir uyarı verecektir, tüm hataları / uyarılar / duyurular / vb gösterecektir.

Bazı hızlı noktaları:

  • Tek bir yerde size $errors_array yerine $errors kullanın
  • Bunun yerine diziye yazarken dizinleri kullanarak, kullanmak $errors[] = "some_error". Bu dizinin sonuna some_error ekleyecektir.

Eh, ben yapardım ilk şey tuşu ederek diziler adresi değildir. Yalnızca hata e-mail adresi ise, o zaman gerçekten 'tek hata '2 tarafından dizine istiyorsun?

Kullanıcı $ hata [] = 'bir şey ... "Daha iyi;

yaratma üzerine dizi için bir test case eklemeyi deneyin.

$errors = array('test'=>'Test');

Eğer print_r sadece bu çıktıyı alırsanız o zaman bilmeniz sizin tablolar beklendiği gibi çalışmıyor öyle eğer.

Hangi değerleri hakkında daha fazla bilgi olmadan değişkenler debugs onun zor girişte var.

Belki emin size düşünüyorum değerler alma yapmak için $ _POST (print_r ($ _POST)) bir dökümü yok.

Orada bir yerde size ['0 '] $ errors_array çağırıyor, sen [] = "Foo" $ hataları yaparak diziye eklemek gerekir;

2. Safe SQL içine bakın

3 onay ifadeleri ne çalıştırıyorsanız. Yer echo "1"; sizin ifadeleri if (ve her yerleşim için 1 bu sayıyı artırmak. Sonra aslında çalışan görebilirsiniz. (Eğer tüm)) her birine

Benim kendi sorunu çözüldü, ben "boş" değil! "Isset" kullanıyor olmalıydı benim işlevleri eğer. onlar gösterir aşağıdaki gibi belirlenmiştir çünkü:

$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];

Neyse yardım için teşekkürler.