Parola sıfırlama komut sadece yarım saat patlar

1 Cevap php

Ben onların adı veya e-posta adresini girerek bir kullanıcı dayalı şifreleri sıfırlamak için kod verimsiz bir parça vardı. PHP komut dosyası kullanılan tanımlayıcı bağlı olarak dallı. Ben onların e-posta adresi girerseniz, kullanıcı adları girer ama eğer şimdi çalışır birine içine çöktü. Burada göze çarpan kodu:

$identifier = isset($_POST["username"])?"username":"email";
$ident = isset($_POST["username"])?trim(mysqli_real_escape_string($mysqli,(check_chars_username($_POST["username"])))):trim(mysqli_real_escape_string($mysqli, (check_chars_email($_POST["email"]))));


    //create and issue the query
    $sql = "SELECT * FROM aromaMaster WHERE $identifier = '$ident'";
    $sql_res =mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

    if(mysqli_num_rows($sql_res) == 0) {
      //wrong login info
      header("Location: password_reset_form.html/error=$ident");
      exit();
    }
      $info = mysqli_fetch_array($sql_res);
        $userid = $info["id"];
        $username = stripslashes($info["username"]);
        $email = stripslashes($info["email"]);

Ben kontrol ve e-posta form alanı e-posta denir kontrol katına ve öyle. Benim kafamı çizilmemesi var. Özellikle ilginç başlık yönlendirme olduğunu. Ben bir e-posta adresinizi girin ve yönlendirildi, değişken $ ident boş görünür.

1 Cevap

Eğer yorumunuzda Belirttiğimiz gibi, boş olması $_POST dizisinin username değişkeni kontrol etmek zorunda.

Bu değişken ek olarak ilk etapta bile varsa ve bunu boş olan karşı test etmeden önce kontrol etmek için de iyi bir fikirdir.

$identifier = 
 (isset($_POST["username"]) && !empty($_POST["username"])) ? "username":"email";

Eğer genelinde formu göndererek olduğunuzda, metin giriş alanlarının hepsi boş olsanız bile, gelecek. Boş boş olarak aynı değildir. Bu üçlü operatörün ilk bölümü başlangıç ​​koduna daima true olan nedenidir.