הבעייה פשוטה מאוד.
תסתכל על הקוד שלך - הוספתי רווחים כדי שיהיה יותר מסודר:
PHP קוד:
if (isset($_POST['submit'])) {
mysql_connect("localhost", "root", "");
mysql_select_db("phpmyadmin");
$user_name = mysql_real_escape_string(htmlspecialchars($_POST['user_name']));
$password = mysql_real_escape_string(htmlspecialchars(md5($_POST['password'])));
$query = mysql_query("SELECT * FROM users WHERE user_name='$user_name'");
$row = mysql_fetch_array($query);
$row_password = $row['password'];
$row_user_name = $row['user_name'];
$password_cookie = $row['password'];
$user_name_cookie = $row['user_name'];
if ($row_password == $password && $row_user_name == $user_name) {
setcookie("username", $user_name, time() + 60000);
setcookie("id", $id_cookie, time() + 60000);
header("location: index.php");
exit;
} else {
echo "Login Fail";
}
}
נסה "להריץ את זה בראש" כשלא שולחים כלום, ותראה מה יקרה (ז"א isset($_POST['submit'] = FALSE)
אגב, יש לך עוד כמה בעיות והרגלים לא נכונים בקוד...
בשורה 6,
PHP קוד:
]));
$password = mysql_real_escape_string(htmlspecialchars(md5($_POST['password'])));
למה htmlspecialchars או mysql_real_escape_string? md5 תמיד מחזירה string בעל 32 תווים מהבסיס ההקסדימאלי (0-9, a-f), ולכן לא צריך לעשות שום "סינון" לזה.
בשורה 7,
PHP קוד:
])));
$query = mysql_query("SELECT * FROM users WHERE user_name='$user_name'");
למה לשלוף את הכל? שלוף תמיד רק את מה שאתה צריך. ובנוסף - זאת התחברות. אתה אמור לעשות משהו בסגנון של
PHP קוד:
])));
$query = mysql_query("SELECT * FROM users WHERE user_name='$user_name' AND password='$password'");
ואז כמובן שורה 8 מיותרת.
בשורה 9, אתה קורא למשתנה שכבר ידוע לך - השתמשת בו בשאילתה.
בקיצור כל החלק הזה:
PHP קוד:
$row_password=$row['password'];
$row_user_name=$row['user_name'];
$password_cookie=$row['password'];
$user_name_cookie=$row['user_name'];
דיי מיותר.
את ה-if כמובן צריך להוריד כי אתה כבר בודק את זה בשאילתה.
ו-$user_name ו-$id_cookie לא מוגדרים.
זה על רגל אחת.