PHP tanımlanmamış değişken hatası

6 Cevap php
Notice: Undefined variable: username in C:\xampp\htdocs\test_class.php
        on line 20
Notice: Undefined variable: password in C:\xampp\htdocs\test_class.php
        on line 20

Benim veritabanı ile kullanıcı adımı ve şifremi aşağı kontrol için bu kod parçası kullandığımda yukarıdaki hatayı alıyorum.

<?php
    class test_class {

    	public function __construct() {	

    	}
    	public function doLogin() {

    		include("connection.php");

    		if (isset($_POST['username']))
    			{
    			$username= $_POST['username'];
    			}
    			if (isset($_POST['password']))
    			{
    			$password= $_POST['password'];
    			} 

    		$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
    		$result = mysql_fetch_array(mysql_query($query));
    		if(!$result)

    		{

    		return 'assa';

    		}else{

    		return 'assa112121212';

    		}

    			}
    	}
?>

6 Cevap

Bu form teslim edilmediğini, büyük olasılıkla, demektir. Sen onlar var eğer sadece değişkenleri kullandığınızdan emin olun. Ayrıca, never ever bunu doğrulayarak olmadan kullanıcıların girişini kullanmak gerekir. Örneğin, aşağıdakileri deneyin:

if (isset($_POST['username']) && isset($_POST['password']))
{
	$username= $_POST['username'];
	$password= $_POST['password'];
	$query = "SELECT *
                      FROM users
                      WHERE username = '".mysql_real_escape_string($username)."'
                      AND password = '".mysql_real_escape_string($password)."'";
	$result = mysql_fetch_array(mysql_query($query));
	# ...
}
else
{
	return NULL;
}

Bu değişkenler kapsam olmadan sorguda başvurulan bu sadece bir notice olduğunu.

DoLogin üstünde () de $ username ve $ parola tanımlayın ve Null veya benzer onları başlatıldı. Daha sonra bunları kontrol edebilirsiniz.

Ayrıca ne olursa olsun $ username ve ayarlanan $ parola sorgu yürütme gibi görünüyor. Sen daha fazla gibi bir şey yapmalıyım:

if( isset($_POST['username']) && isset($_POST['password'])){
     //create vars, do query
}else{
     // Nothing to process
}

Hem hataları ben sorgu dizesi enterpolasyon olduğunu varsayalım 20 hattı üzerinde meydana gelir. Burada konular şunlardır:

  1. tutarsız kapsam / (zaten PHP hangi berbat) başvuru
  2. Sizin IFS biraz daha düzenli olması gerekir. Bu hata küçük, ama böyle değişkenleri işlemek durumunda kötü olanları daha sonra serseri seni ısıracak :)

Also: escape your variables before dumping them like hot coals into your SQL see PDO (which I would go for) or mysql_escape_string()

good luck!

Bir daha mutlu sınıf ve ücretsiz hata :)

<?php
class test_class
{
    private $post = array();
    public function __construct ()
    {
    }
    public function doLogin ()
    {
        $this->post = $_POST;
        include ("connection.php");
        if ($this->post['username'] && $this->post['password']) {
            $username = $this->post['username'];
            $password = $this->post['password'];
            $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
            $result = mysql_fetch_array(mysql_query($query));
            if (! $result) {
                return 'assa';
            } else {
                return 'assa112121212';
            }
        }
    }
}
?>
<?php
class test_class {

    public function doLogin() {
        include("connection.php");

        if (isset($_POST['username']) && isset($_POST['password']) {
            $username = $_POST['username'];
            $password = $_POST['password'];

            $query = "SELECT * ".
                     "FROM users " .
                     "WHERE username = '$username' ".
                     "  AND password = '$password'";
            $result = mysql_fetch_array(mysql_query($query));
            if(!$result) {
               return 'assa';
            } else {
               return 'assa112121212';
            }
        } else {
            echo "Missing parameter 'username' and/or 'password'";
        }
    }
}

Ayrıca, gerektiği escape $username ve $password sql injection saldırıları önlemek için.

Ayrıca bir kullanıcı adı ve şifre verilir olmadığını veritabanını kontrol ediyor.

Belki de böyle bir şey;

public function doLogin() {

	include("connection.php");
	$username = (isset($_POST['username'])) ? $_POST['username'] : NULL ;
	$password = (isset($_POST['password'])) ? $_POST['password'] : NULL ;
		if ( $username !== NULL && $password !== NULL )  {
	                $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
	                $result = mysql_fetch_array(mysql_query($query));
			/* auth code here */

		} else {
		return false; // no u/p provided	
	}

    }

Ayrıca veritabanı yakın yere koymadan önce, ya da kullanarak girdileri kaçan edilmelidir mysql_real_escape_string or PDO (PHP Data Objects)

Sen error_reporting (E_ALL ^ ​​E_NOTICE) kullanmak istediğiniz gidiyoruz; sayfasından Sam bağlantılı. Uyarılar gerçekten gereksiz ve gcc ile DUVAR ve Werror bayraklarını kullanarak gibidir.