10-07-2009, 09:23
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
ממבט ראשון זה לא נראה כתיבה טובה בכלל (אבל זה בסדר כי אתה רק מתחיל).
הנה קוד אחר, שכולל מניעת SQL injections ופשטות הקוד:
קוד PHP:
if ($_POST['announcement'] != '')
{
$update = 'UPDATE `misc` SET `announcment` = '. filter_SQL(filter_HTML($_POST['announcement']));
if (mysql_query($update))
echo 'the database has been updated.';
else
echo 'Could not update, an error occurred (error number #',mysql_errno(),'): ', mysql_error();
}
else
echo "you leaved an empty field";
כמה נקודות לתיקון:
- אין צורך להשתמש בסוגריים כשכותבים echo.
- במקרה הנ"ל הנחתי ש-$_POST['announcement'] ייחשב שדה שלא מילאו אותו בתנאי שהוא שווה למחרוזת ריקה. לא היית צריך לכתוב בתנאי ה-if ובתנאי ה-elseif פעמיים את הפונקציה empty כי זה מיותר.
- מיקום מחרוזת השגיאה של עידכון מסד הנתונים היה לא נכון, בקוד שכתבת PHP מעולם לא היה מריץ את זה ופולט ללקוח.
- תתחיל כבר עכשיו לכתוב עם הזחות את הקוד שלך, אחרת יהיה לא נוח וקשה לשמור אותו מסודר.
בנוגע לפונקציות filter_SQL ו- filter_HTML, זה בהנחה שלא סיננת את המידע לפני כן, ובהנחה שאתה לא רוצה שהמשתמש יוכל לכתוב קוד HTML שהדפדפן יפענח.
אם תרצה שהמשתמש יוכל לכתוב קוד HTML, פשוט תוריד את הפונקציה filter_HTML.
הפונקציות האלו צריכות להכיל את הקוד הבא:
קוד PHP:
function filter_HTML($str)
{
return htmlspecialchars($str);
}
function filter_SQL($str)
{
return mysql_real_escape_string($str);
}
אם היית מתחבר למסד נתונים דרך ממשק אחר, כמו mysqli, היית צריך להבריח את התוים עם פונקציה\מתודה אחרת.
תקרא על אשכול הקידוד שפתחתי בבניית אתרים, כדי למנוע בעיות קידוד בהמשך...
|