O $ _POST boş kalan zaman nasıl bir şifre alanı güncelleştirmek etmeyin?

3 Cevap php

UPDATE: I solved the problem myself and the answer is below. Carry on...

PHP ve MySQL kullanarak hesabınızı güncellemek için bir form var. Göndermek üzerinde, yeni bir kullanıcı () nesne için $ _POST tüm değişkenler atar ve sonra SQL UPDATE sorgusu çalıştıran kullanıcı nesne üzerinde update () yöntemini yapar.

Ben önceden doldurmak değil parola için DIŞINDA kullanıcının tüm bilgilere formu açıkça benimsenmiş. Onların şifresini değiştirmek istediğiniz sürece boş.

Ben bu adrese bir şey olmadıysa alan teslim boş olduğundan, her hesap güncelleme, için "" kişinin şifresini sıfırlamak olacaktır. Bu kötü olurdu. Peki bunu düzeltmek için, ben bu kodu ekledi:

    if(empty($_POST['password']) || is_null($_POST['password']) || !isset($_POST['password']) || $_POST['password'] == "") {
		$user->hashed_password = $edituser->hashed_password;
	} else {
		$password = $database->escape_value($_POST['password']);
		$user->hashed_password = md5($password);
	}

$ _POST Parola değeri boş ise temelde, mevcut kullanıcının parolasını ($ edituser gerekirse geçerli kullanıcının bilgileri kaydetmek için önceden oluşturulan bir nesnedir) için şifre ayarlayabilirsiniz. İnan bana, sadece güvenli olması için "" boş çalışması gerekir çünkü ben sadece () (boş) ise ilk denedim, fakat olmadı, bu yüzden, isset null'unu eklenmiş, ve hatta! ==.

Ne olursa olsun ben ne, şifre boş sıfırlanır. Neden?

3 Cevap

Harika, ben sadece bir aptalım çıkıyor!

Benim kullanıcı sınıfı çalışması için nesne öznitelik adlarıyla aynı olması db alan adlarını gerektiren nitelikleri işlevi vardır. Bu yüzden ne olursa olsun boş güncellendi - Benim sınıf özniteliği benim db alan adı "hashed_password" idi, $ parola idi.

Bu saat eğlenceli bir çift oldu!

Alan boş olsa bile, yine de $ _POST mevcut olacaktır.

$Password = trim(isset($_POST['Password']) ? $_POST['Password'] : '');

if($Password)
{
    //validate password
    //update password
}

Uyarıları açmak sen var mı? Sen eğer tablosunda ilk! Isset için ($ _POST ['password']) gerekebilir

Bu, böyle hata ayıklama şeylerle bana hizmet vermiştir:

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors','On');