سلام،
دوست عزیز کد شما مشکلاتی داره:
1 - ورودیهای کاربر (مثل username و password) باید حتماً فیلتر بشه. اگر ار یک فیلتر قوی استفاده نکنید راه را برای خرابکاری هکرها کاملاً باز گذاشتهاید.
من چند مورد ذکر میکنم که به شما کمک میکنه، البته تأکید میکنم؛ کدهای من فقط جهت مثال است و به موارد و کار بیشتری نیاز دارد.
تابع trim :
این تابع فضای خالیِ قبل و بعد از ورودی را حذف میکند، شاید کاربر در انتهای Username خود یک Space زده باشد!
$username = trim( $_POST['username'] );
//'username ' => 'username'
تابع addslashes :
این تابع کاراکتر ' را به صورت \' در میآورد. اگر کاراکتر ' یا " در Query قرار بگیرد میتواند خطرات بسیار جدیای ایجاد کند. امنییت این مسئله برای پایگاه داده و Query ها بسیار مهم است.
$username = addslashes( $_POST['username'] );
//addslashes("'username") => \'username
تابع htmlentities :
این تابع کدهای HTML را غیر فعال میکند. مطمئن شوید که کدهای HTML و جاوا اسکریپت (JavaScript) در ورودیها فیلتر شود.
$username = htmlentities( $_POST['username'] );
//'<div>username</div>' => <div>username</div>gt;
توابع دیگری هم وجود دارد که هر کدام را بهر کاری ساختند، مثل : htmlspecialchars , strip_tags و ...
2 - لازم نیست result را در یک حلقه قرار بدهید.
حلقهها، مثل while برای زمانی است که نتیجهی متغیرهای ما دربرگیرندهی بیش از یک مقدار باشد. در اینجا شما فقط دادههای یک کاربر را از پایگاه داده میگیرید نه بیشتر، پس حلقه لازم نیست.
3 - در PHP تمام Header ها باید قبل از نمایش خروجی چاپ شود، قبل از نمایش کدهای HTML. در غیر این صورت با خطا مواجه میشوید. این قانون در مورد session_start هم صدق میکند.
4 - اولاً بهتر است کدهای PHP را در یک فایل جداگانه از HTML بنویسید. اگر اینکار را نمیکنید حداقل کدهای PHP را در ابتدای صفحه بنویسید.
5 - فراموش نکنید Password ها را حتماً به صورت Hash (یا همان رمز شده) در پایگاه داده ذخیره کنید.
در همین تاپیک امنییت، موارد بسیار خوبی مثال زده شده است.
6 - لازم و شاید عاقلانه هم نباشد که بررسی Password کاربر در داخل Query انجام شود.
ابتدا اطلاعات کاربر را مطابق با username از پایگاه داده بگیرید، اگر کاربر وجود داشت سپس رمز آن را بررسی کنید.
7 - برای کار با پایگاههای داده SQL از PHP PDO استفاده کنید بهتر است. آموزشهای زیادی در اینباره وجود دارد.
امیدوارم راهنماییهای اندک من به شما کمک کند.
موفق باشید.