לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 06-05-2006, 20:03
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
מדריך ליצירת מנוע חיפוש

בעיקרון כתבתי את המדריך הזה ל- 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:
 exit;


כמו שאתם רואים, עם זה עמוד הוא העמוד הנוכחי, הוא מודגש.
עכשיו מציגים הודעות שגיאה:
קוד 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> 
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 06-05-2006, 21:29
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
מעולה
בתגובה להודעה מספר 1 שנכתבה על ידי tnadav1 שמתחילה ב "מדריך ליצירת מנוע חיפוש"

למען האמת אין לי סבלנות לקרוא את כל המדריך, כך שקראתי רק עד קטע ה-PHP השלישי (עד ועד בכלל) ועל כל אחד מהם יש לי לפחות ההערה/הארה אחת...

1. את המלל המתאר לגולש את מהות השדה כדאי לתחום ב-label ולא ב-span.

2. לתת שם לשדה קלט מסוג input זהו בזבוז זכרון מיותר, למרות שמדובר במשתנה מחרוזת בעל אורך קצר, עדיין, זה פשוט קוד מיותר כיון שכבר קיים בשרת משתנה שמכיל את המידע אם נשלח טופס או לא.
המשתנה הוא _SERVER['REQUEST_METHOD'] ואם נשלח טופס בשיטת POST הרי שתכולתו תהיה מחרוזת המכילה את הערך 'POST'.
אמנם במקרה של: א. שליחת טופס בשיטת GET. ב. שליחת טופס מדף המכיל יותר מטופס אחד. כן צריך מזהה מסויים כדי לדעת האם הטופס נשלח או איזה טופס נשלח. אך גם כאן במילא קיימים כנראה שדות שונים בכל טופס, כך שאפשר פשוט לבדוק אם אחד משדות אלו הוגדר כדי לדעת אם או איזה טופס נשלח, ובכך לחסוך קוד מיותר גם אם לא מדובר בדבר מסובך.

3. לא כל כך הבנתי מה אתה רוצה לעשות עם המשתני הגלובליים בקטע השלישי (כיון שכמו שאמרתי, לא המשכתי לקרוא), אך אני בדרך כלל כותב כך:
קוד PHP:
 function add_x_form()
{
    
// print the form
}

function 
add_x()
{
    if(!
$_POST['name'])
        
$msg .= 'please...';
    if(!
$_POST['tel'])
        
$msg .= 'please...';

    if(
$msg) return $msg;


    if(
mysql_query('INSERT INTO ...'))
        return 
'successfully...';
    else
        return 
'error';
}

if(
$_SERVER['REQUEST_METHOD'] == 'POST')
    echo = 
add_x();
add_x_form(); 

פונקציה אחת מדפיסה את הטופס, פונקציה אחרת מטפלת בטופס.
הדפסת הטופס מתבצעת תמיד, טיפול בטופס נעשה רק במידה והוא נשלח.

הקוד שלי כמובן לא נראה כך מהרבה סיבות, רק שכדי לא לסבך יותר מדי בשיטה שאני רגיל לעבוד הצגתי רק את הרעיון שנוגע למה שכתבת.
הפונקציה שמטפלת בנתוני טופס פשוט ראשית בודקת את השגיאות, אם ישנם כאלו היא מחזירה הודעת שגיאה, אחרת היא מזינה את המידע למסד ואז שוב אם יש שגיאה היא מחזירה הודעת שגיאה. לכל גוף אחר שחי באיזור הגלובלי אין צורך לדעת אם ארעה שגיאב בדף או לא, למרות שאם יש צורך אני עדיין יכול להתאים את זה בלי שזה יקלקל את הפשטות שבשיטה זו.

אמנם לא קראתי את כל המדריך, אך זה מן הסתם יועיל למי שיחפש מידע בנושא, טוב שזה בארכיון.

המשך שבוע מעולה
ישראל
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 08-05-2006, 09:10
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 1 שנכתבה על ידי tnadav1 שמתחילה ב "מדריך ליצירת מנוע חיפוש"

גליתי בעיה בסקריפט, הנה המתוקן:
קוד 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> 

והנה הוא מבוסס GET:
קוד 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 '%".$_GET['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="get">
        <span>Search me:</span><input type="text" name="searchTXT" />
        <input type="submit" name="submited" value="TRUE" />
    </form>
</body>
</html> 
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 00:59

הדף נוצר ב 0.18 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר