הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   עזרה דחופה במשהו פשוט! (https://hosts.co.il/forums/showthread.php?t=91459)

dor77 14-08-11 14:31

עזרה דחופה במשהו פשוט!
 
אני מנסה להצגיע בטבלה פריטים שנשלפים מהמסד.
אני צריך שיהיו 4 בשורה ו5 שורות במאונך.
הוא מציג לי רק שורה אחת..
במקום להציג לי ככה:


* * * *
* * * *
* * * *
* * * *
* * * *

הוא מציג לי ככה:
* * * *


הנה הקוד:

PHP קוד:


$query_4 
mysql_query("SELECT * FROM businesses WHERE category = '$id' AND sub_category = '2'");
$i=1;
$g=1;
echo 
'<table style="margin-right:-15px; border: 1px silid red;">';
while (
$g!=6)
{
echo 
'<tr>';
while ((
$row_4=mysql_fetch_array($query_4)) && ($i!=5))
{
echo 
'
<td>
<div class="box_1">
<br />
<span class="title">' 
$row_4['title'] . '</span>
<br /><br />
<img src="http://t3.gstatic.com/images?q=tbn:ANd9GcT2t-3e3Y7po7HiaZIdB5NB6mOOWJuT7uOopfU2nAD7l_4PNADlLQ" style="margin-right: 25px;border: 1px solid #70059E; width:130px; height:120px; margin-top:15px;">
<br /><br />
<span class="text">' 
$row_4['text'] . '</span>
<br /><br />
<span class="price_title">מחיר: <span class="price">' 
$row_4['price'] . '</span></span>
<br />
<img src="more_d.png" style="margin-right: 45px; margin-top:5px; border: 0px;">
</td>
'
;
$i++;
}
echo 
'</tr>';
$g++;
}
echo 
'
</table>
'


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

dor77 14-08-11 16:49

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

Kfir.G 16-08-11 18:58

אני יודע שזה קצת off topic אבל בגלל הדוגמת קוד שלך חשבתי שיהיה נחמד לתת לך כמה טיפים.

דבר ראשון השאילתה שלך. בחרת לכתוב אותה ישירות ולא להשתמש בכלי שבונה את השאילתה, שזאת החלטה מובנת, אם כי לדעתי לא אידאלית. בכל מקרה כדאי להקפיד על הזחות בשאילתות. נכון שבשאילתות קצרות כמו זאת שנתת כאן לא ממש מרגישים את ההבדל אבל כשתעשה שאילתות מורכבות יותר (עם תת שאילתות, joinים, תנאים וכד') אז זה בהחלט מורגש. חוץ מזה הייתי מציע לך לא להכניס את המשתנים בצורה ישירה כמו שעשית עם ID אלא בעזרת פונקציית עזר שעושה פילטר מסויים. ואחרי החפירה הקצרה הזאת הקוד:
PHP קוד:

<?php
// Your code
$query_4 mysql_query("SELECT * FROM businesses WHERE category = '$id' AND sub_category = '2'");

// My suggestion

// Build the query
$sqlGetBusinesses = <<<SQL
SELECT    *
FROM    `businesses`
WHERE    (`category` = %d) AND
    (`sub_category` = 2)
LIMIT    20
SQL;

// Add the parameters
$sqlGetBusinesses sprintf($sqlGetBusinesses$id);

// Execute the query
$qryGetBusinesses = @mysql_query($sqlGetBusinesses);

// Handle errors
if (!$qryGetBusinesses)
{
    
// error stuff here
}
else
{
    
// Processing here

    // Free memory
    
mysql_free_result($qryGetBusinesses);
}
?>

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

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

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

ועוד דבר בPHP, כמו ברוב שפות העילית יש נושא של short-circuit evaluation. מה שזה אומר זה שהתנאי יבדק רק עד איפה שצריך כדי לדעת אם התוצאה שלו היא true או false. אני מציע לך לקרוא עוד קצת על האופרטורים באתר הרישמי.
http://php.net/manual/en/language.operators.logical.php
אם היית מחליף את הסדר של הבדיקות בלולאה הפנימית שלך היית חוסך קריאה מיותרת ל mysql_fetch_array.

ובסופו של דבר, כדאי לך לקרוא עם mysqli. מגיע היום בכל התקנה של PHP5 והוא טוב יותר מהפלאגין הרגיל של mysql.

מקווה שעזרתי במשהו..


כל הזמנים הם GMT +2. הזמן כעת הוא 15:25.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ