|
06-05-2006, 20:03
|
|
|
|
חבר מתאריך: 02.10.05
הודעות: 2,355
|
|
מדריך ליצירת מנוע חיפוש
בעיקרון כתבתי את המדריך הזה ל- netaneldj אבל האשכול ננעל, בשביל שמדריך כזה מושקע (שעה ישבתי) לא יירד לתימיון, החלטתי לפרסם אותו, כי דור כבר נעל את הנושא (בצדק) אז הנה המדריך:
החלטתי לכתוב מדריך, מצידי שיהיה בארכיון.
בכל מקרה, אני ילמד איך ליצור מנוע חיפוש במספר שלבים.
אוקי, הנה מדריך ליצירת מנוע חיפוש בקובץ אחד, שלצורך העניין נקרא לו search.php.
השפה של המנוע החיפוש היא אנגלית, בגלל שאין לי כוח להתעסק עם ישורים וכו'
בעיקרון ההתחלה של הקובץ זה הצגת התוצאות, אבל כדי למנוע בלבול, החלטתי להתחיל בטופס מנוע החיפוש, HTML רגיל, בתקן xHtml, שעובד בשיטת POST, מכיוון שאני מניח שכולם יודעים פה את החומר, אני פשוט יכתוב קוד מכיוון שמיותר להסביר אותו, אז הנה הוא:
קוד PHP:
<form action="search.php" method="post"> <span>Search me:</span><input type="text" name="searchTXT" /> <input type="submit" name="submited" value="TRUE" /> </form>
מכיוון שהחיפוש בנוי על קובץ אחד, צריך לבדוק עם הטופס נשלח, מה שעושים זה בודקים עם הערך של כפתור השליחה קיים (שאם הטופס לא הייה נשלח הוא לא הייה קיים)
קוד PHP:
if(isset($_POST['submited'])) {
כתבתי את רק את תחילת הבלוק כי כל הצגת החיפוש נמצאת על תנאי, כל הקוד הבא, עד לסגירת הבלוק יהיה תנאי. עכשיו אחרי שיש את תחילת התנאי, אנחנו יוצרים פונקציה שתטפל בשגיאות הקוד, שוב פעם, קוד בסיסי שאני בטוח שכולם מבינים.
קוד PHP:
function my_err($my_msg) { global $failed; global $err_msg; if ($failed == FALSE) { $failed=TRUE; $err_msg .="Error(s): <br /> \n"; } $err_msg .= "$my_msg <br /> \n"; }
עכשיו מגיע החלק של השאילתה, כמובן שתוכלו להוסיף לפני מה שתרצו, מדובר פה במנוע חיפוש מאוד בסיסי, אפילו הכי בסיסי. במקרה הזה אנחנו מניחים שאנחנו מחפשים הורדות, הנה הטבלה שלנו שקוראים לה dwonloads עם העמודות:
id, link ו- des (קיצור של description)
בתוך שהאילתה נכנס גם הקטע של ההגדרות בעזרת מטודת GET,יש את המשתנה page, ומוגדר שבכל דף יהיה 10 הורדות, אז הנה השאילתה:
קוד PHP:
$start=mysql_query("SELECT `link`, `des` FROM `downloads` WHERE `des` LIKE '%".$_POST['searchTXT']."%' LIMIT ".$_GET['page'] * 10 - 10.", ".$_GET['page'] * 10);
עכשיו בודקים אם הגיעו תוצאות, אם כן, ממשיכים אם לא, מוצגת שגיאה:
קוד PHP:
if(mysql_num_rows($start) == 0) { my_err('subject not found'); } else {
הרעיון הוא לחפש בתיאור מילה דומה למילת החיפוש ולקבל את התוצאות רק בתחום הרצוי.
הנה מגיע החלק המשמעותי, הצגת כל התוצאות, הנה זה:
קוד PHP:
while($info=mysql_fetch_array($start)) { $info['des'] = str_replace($info['des'], '<b>'.$info['des'].'</b>; echo '<div>'; echo $info['des'].'<br />'; echo '<a href="'.$info['link'].'">Download now!</a>'; echo '</div>'; echo '<br />'; }
סך הכל יוצר שיכבה, אפילו בלי סגנון, כותב תיאור ויוצר קישור להורדה. עכשיו לחלק היותר מסובך , קישורים לעמודים הבאים, הנה זה מגיע!
השאילתה ששולפת את כל התוצאות:
קוד PHP:
$start=mysql_query("SELECT `id` FROM `downloads` WHERE `des` LIKE '%".$_POST['searchTXT']."%'");
ואז אני סופר את מספר השורות שהתקבלו:
קוד PHP:
$rows=round(mysql_num_rows($start));
עכשיו אני מציג את הקישורים לעמודים הבאים:
קוד PHP:
echo '<span>links:'; for($i = 1; $i <= $rows; $i++); { if($i == $_GET['page']) { echo '<a href="search.php?page='.$i.'"><b>'.$i.'</b></a>'; continue; } echo '<a href="search.php?page='.$i.'">'.$i.'</a>'; } echo '</span>';
עכשיו סוגרים את התנאי ופורשים בשיא:
כמו שאתם רואים, עם זה עמוד הוא העמוד הנוכחי, הוא מודגש.
עכשיו מציגים הודעות שגיאה:
קוד PHP:
if($failed) echo '<span>'.$err_msg.'</span>';
והנה התוצאה:
קוד PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head> <title>Untitled</title> </head> <body> <?php if(isset($_POST['submited'])) { function my_err($my_msg) { global $failed; global $err_msg; if ($failed == FALSE) { $failed=TRUE; $err_msg .="Error(s): <br /> \n"; } $err_msg .= "$my_msg <br /> \n"; } $start=mysql_query("SELECT `link`, `des` FROM `downloads` WHERE `des` LIKE '%".$_POST['searchTXT']."%' LIMIT ".$_GET['page'] * 10 - 10.", ".$_GET['page'] * 10); if(mysql_num_rows($start) == 0) { my_err('subject not found'); } else { while($info=mysql_fetch_array($start)) { $info['des'] = str_replace($info['des'], '<b>'.$info['des'].'</b>; echo '<div>'; echo $info['des'].'<br />'; echo '<a href="'.$info['link'].'">Download now!</a>'; echo '</div>'; echo '<br />'; } $start=mysql_query("SELECT `id` FROM `downloads` WHERE `des` LIKE '%".$_POST['searchTXT']."%'"); $rows=round(mysql_num_rows($start)); for($i = 1; $i <= $rows; $i++); { if($i == $_GET['page']) { echo '<a href="search.php?page='.$i.'"><b>'.$i.'</b></a>'; continue; } echo '<a href="search.php?page='.$i.'">'.$i.'</a>'; } echo '</span>'; echo '</body> </html>'; exit; } ?> <?php if($failed) echo '<span>'.$err_msg.'</span>'; ?> <form action="search.php" method="post"> <span>Search me:</span><input type="text" name="searchTXT" /> <input type="submit" name="submited" value="TRUE" /> </form> </body> </html>
_____________________________________
|
|