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

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



  #7  
ישן 07-01-2005, 02:25
  דקל דקל אינו מחובר  
 
חבר מתאריך: 20.02.03
הודעות: 2,396
קיבלתם נעיצה (עוגן בפרש) + תוספת קטנה :)
בתגובה להודעה מספר 6 שנכתבה על ידי שי משעלי שמתחילה ב "רעיון מעולה , דקל - אני ממליץ..."

אני יודע שאני לא מגיב לנושא הראשי... אין צורך להעיר לי על זה
דבר ראשון- תודה ל isoTop שהרים את הכפפה.
בנוגע למה ששי משעלי כתב. יש דרך הרבה יותר נוחה ומוצלחת והיא להשתמש בפונקציה של PHP שמבצעת את העבודה בצורה הנוחה ביותר.
הפונקציה הינה htmlspecialchars והיא יודעת להפוך כל תו שהדפדפן מפרש כתו HTML לתו שהדפדפן יודע להציג.בין השאר מוחלפים התוים
שכבר צויינו (<>) אולם גם התוים ("&')מוחלפים.
שימו לב שקיימות גם הפונקציות הבאות לטיפול במחרוזות (מבחינת עבודה עם HTML):כל אחד שימצא לעצמו את הדרך בה נוח לו לעבוד

בברכה, דקל
_____________________________________
"מתכנת זה אדם שפותר בעיה שעל קיומה לא ידעת, בדרך שאינך מבין"


נערך לאחרונה ע"י דקל בתאריך 07-01-2005 בשעה 02:47.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 06-01-2005, 23:19
  dead dead אינו מחובר  
 
חבר מתאריך: 08.11.04
הודעות: 357
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

"dead, dead תעזור לי, אני רוצה ללמוד PHP אבל לא יודע אילו כלים אני צריך..."
ת':
מה צריך לדעת כדי לעבוד עם PHP?
חייבים, אבל חייבים לדעת HTML, שפה זו היא הבסיס לתצוגת כל אתר, PHP היא רק התוכנה שמאחוריה

קודם, חייבים מנוע PHP , יש לך שתי אפשרויות:
  • להריץ את הקוד על שרת מרוחק
    זה לא ממש בעיה, חוסך ממך את העבודה, סיפוק, אפשרויות של התקנת שרת במחשב האישי והגדרתו, על מה שאתה צריך זה לפתוח חשבון אצל שרת שתומך בPHP כגון http://www.polarhome.com ולהפעיל אותו שם
  • להריץ את הקוד על המחשב האישי
    האפשרות היותר מסובכת.
    תחילה צריך להתקין שרת, במידה ואתה משתמש בווינדוס, יש לך את האופציה להתקין את השרת כחלק מהווינדוס עצמו, שרת כזה נקרא IIS (וכן, הוא מוצר של מייקרו$ופט), מדריך להתקנת IIS והגדרתו אפשר למצוא כאן
    אך אופציה נוספת היא להתקין שרת APACHE, שרת חינמי, מופץ על רישיון קוד פתוח, ובעיקר, לא של M$

    את הAPACHE ניתן להוריד מכאן (עדיף גרסאת BINARY למשתמשי ווינדוס)

------
לאחר התקנת תוכנת השרת (אפאצ'י או IIS, בשני המקרים חייבים למלא את השלב הבא ) נותר להתקין את המנוע PHP על השרת
את מנוע הPHP ניתן להוריד מכאן (שוב, עדיף גרסאת BINARY למשתמשי ווידוס)
מדריך להתקנת PHP ניתן למצוא כאן
ולבסוף, לאחר ההתקנה יוצרים קובץ PHP עם הקוד הבא:
קוד PHP:
<?php
phpinfo
();
?>

אם רואים מלא נתונים, ההתקנה עברה בהצלחה!

עם מה עורכים קבצי PHP?
אני אישית מעדיף להשתמש ב notepad הישן והטוב שבא עם הווידוס, למה?
* הממשק מאד קל להבנה ולא מסובך (לא שיש לי בעיה בהבנה )
* הוא עולה מהר
* לא צריך להוריד אותו או להתקין אותו בצורה מיוחדת
* לדעתי יש לי מספיק ניסיון בHTML ואני לא צריך ממשק WYSIWYG לעבוד איתו
אבל! זו דעה שלי, תוכנות טובות, ניתן למצוא הרבה ברשת אבל המלצה שלי, Zend Studio הכי טובה

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


נערך לאחרונה ע"י dead בתאריך 06-01-2005 בשעה 23:21.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 08-01-2005, 14:47
  dead dead אינו מחובר  
 
חבר מתאריך: 08.11.04
הודעות: 357
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

הודעה זו היא תיקון לקודמת, המקורית עברה "שיפוץ" קל ונמחקה.

"איך מחלקים תוצאות משאילתה לדפים?"

ת: תחילה ננסה להבין את הרעיון מאחורי הכל.
מה אנחנו צריכים? לבחור מספר קבוע של תוצאות מהמסד.
איך עושים זאת? ישנו תנאי LIMIT שניתן להוסיף לשאילתת SELECT (למידע נוסף: select syntax), התנאי הזה מפעיל את השאילתה SELECT ממיקום מסוים עד מיקום מסוים.
לדוגמא:
SELECT * FROM tbl LIMIT 1,15

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

הביצוע
נקבע את המשתנים הבאים:
קוד PHP:
 $msgs_per_page 10;
$page = (int) $_GET['page']; 

חשוב להגן על השאילתה מכל מיני מזיקים למיניהם:
קוד PHP:
 if(($page 1) || ($page 200000)){
$page 1;
}
# אלו בעיקרון כל ה"התקפות" שעלו במוחי 


המשתנה הראשון הוא msgs_per_page שבו מוצב מספר התוצאות לדף.
המשתנה השני הוא $_GET['page'] שהוא מקבל את הערך שלו ע"י מתודת GET, כלומר כשניגשים לקובץ בצורה כזאת:
index.php?page=8 הערך של המשתנה יהיה 8.

עכשיו נקבע עוד שני משתנים:
קוד PHP:
 $start $msgs_per_page $page $per_page;
$total $msgs_per_page $page

הראשון מכיל את הערך ההתחלתי של הLIMIT והשני מכיל את מספר התוצאות של השאילתה.
עכשיו ניתן להוסיף לשאילתה המרכזית:
קוד PHP:
LIMIT $start,$total


מה נותר לנו? ההדפסה של העמודים.
פה אנחנו צריכים שאילתה נוספת:
קוד PHP:
 $select_all mysql_query("SELECT count(*) FROM main_tbl");
if(!
$select_all){
    die(
mysql_error());



עכשיו כשיש לנו את השאילתה והתצאות שלה צריכים "לשאוב" ממנה מידע:
קוד PHP:
 $num_o_rows mysql_fetch_array($select_all); 


ובעזרת מספר התוצאות ניתן "לדעת" את מספר *כל* העמודים
קוד PHP:
 $num_o_pages ceil($num_o_rows[0]/$per_page); 


ולבסוף נותר להדפיס את המעבר לעמודים, זאת עושים ע"י לולאת FOR בצורה כזאת:
קוד PHP:
 for($i=1;$i<=$num_o_pages;$i++){
    echo
"<a href=".$_SERVER['PHP_SELF']."?page=$i>$i</a>";




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


נערך לאחרונה ע"י dead בתאריך 08-01-2005 בשעה 15:02.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #13  
ישן 12-01-2005, 17:14
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
משיכת חלק מהשורות בקובץ או ב HTML של אתר
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

קוד PHP:
<?php
          $page 
file_get_contents("http://www.walla.co.il/")
                  or DIE(
"Failed to fetch site\n");
          
$lines explode("\n"$page);
          for (
$i=48$i<=50$i++)
           echo 
$lines[$i-1]."\n";
          
?>

כאשר את "http://www.walla.co.il" אפשר להחליף בכל כתובת, וגם בשם של קובץ על השרת עצמו.

איך (ולמה) זה עובד?
1. קוראים את תוכן הקובץ/האתר לתוך משתנה (page$), ואם יש כשלון, מפסיקים מיד כי אין טעם להמשיך.
2. "מפוצצים" את המשתנה page$ על פי מיקומי השורה החדשה (n\), ומאכסנים את המערך שנוצר במשתנה חדש, $lines
1.3. מבצעים לולאה עם משתנה שרצה עם ערכים ממספר השורה ההתחלתי ועד מספר השורה האחרון שעד אליו מעוניינים להעתיק
2.3. בתוך הלולאה מבצעים הדפסה של הערך במערך שמספרו הסודר כמספר המונה, פחות 1, וזאת משום שב PHP התא הראשון במערך הוא 0, ולא 1
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #16  
ישן 13-02-2005, 14:12
  dead dead אינו מחובר  
 
חבר מתאריך: 08.11.04
הודעות: 357
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

לאור הבקשות הרבות- התקנת GD
הערה חשובה- אי אפשר להתקין GD על שרת מרוחק, השרת חייב ליהיות בבעלותך.

תחילה, פתח את קובץ הקונפיג של PHP (שמו php.ini והוא נמצא על פי ברירת מחדל ב: c:\php ), בערך בשורה 562, יש לך את הטקסט הבא:
קוד:
;extension=php_gd2.dll

שים לב ל ; (נקודה-פסיק), הורד את הסימן, שמור את השינויים וסגור את הקובץ.
הערה למשתמשי אפאצ'י על ווינדוס- בהתקנת PHP נאמר שמומלץ להעביר את קובץ הקונפיג של PHP לתיקייה windows, מומלץ תחילה לחפש בתיקייה c:\windows אחר הקובץ ולערוך אותו.


לאחר מכן, כנס לתיקייה ext ממיקום התקנת PHP, אתר את הקובץ php_gd2.dll והעבר אותו לתיקייה הראשית של PHP (שוב, על פי ברירת מחדל: c:\php ).

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #28  
ישן 22-01-2006, 15:25
  Ikki Ikki אינו מחובר  
 
חבר מתאריך: 01.06.04
הודעות: 29
כיצד אני מבצע "התחברות"/הזדהות משתמש - אלגורימתי
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

נקתלתי רבות בשאלה זו בעברי בפורומים רבים, ושוב ושוב אני עושה את אותה התושבה הבא לפניכם.

ש': כיצד ניתן לבצע בדיקה הזדהות אם השם שהוזן בטופס והסיסמא תואמת לפרטים.
ת': ניתן לבצע זואת ע"י פעולת הפנייה פשוטה, או במידה ומדובר בשימוש במסדי נתונים ע"י השאילתה עצמה!.

כיצד נבצע התניה ללא מסדי נתונים? - עלינו ליצור התנייה שתבדוק אם היוזר שנשלח בטופס זהה ליוזר שהזנו.
להלן דוגמא:
קוד PHP:
 if($_POST['user' ]== "user" && $_POST['password'] == "1234") {
echo 
"Welcome!";
} else {
echo 
"Error!"




כיצד נבצע בדיקה ע"י מסדי נתונים(mysql), נבצע זואת ע"י השאילתה עצמה, ובדיקה אם שאילתה כזו קיימת.

להלן דוגמא:
קוד PHP:
 $query mysql_query("select * from users where user='$user' and password='$password'") or die("Error: <BR>" mysql_error());
$arow mysql_num_rows($query); 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #35  
ישן 27-06-2006, 20:58
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
פיתרון לבעיית העוגיות
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

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





Warning:
Cannot modify header information -
headers already sent by (output started at /home/******/domains/*****/public_html/conf.php:23)
in /home/*****/domains/*****/public_html/file.php on line 50


אז הפיתרון הוא:

קודם כל ישנם מספר גורמים לבעיה:

1. שליחת header'ים לפני שליחת העוגיה.
2. כתיבת מידע כלשהו, אפילו אות או כל תו אחר לפני שליחת העוגיה.
3. הקובץ PHP נשמר עם BOM. הסבר: BOM זה מעיין 'חתימה' שנוצרת בתחילת הקובץ PHP (לפני הכל) כששומרים את הקובץ.

הפיתרונות:

1. קודם כל, צריך לוודא ולמצוא את כל ה-header הקודמים שנשלחו לפני שליחת העוגיה. אחרי שמצאת את כולם, חפש דרך לשלוח את העוגיה לפני כל ה-header'ים הללו.
2. הדרך היעילה ביותר והטובה ביותר למניעת בעיה זו, היא אגירת כל המידע של ה-HTML, CSS, JS וכל השאר בתוך משתנה אחד. ואז לבסוף, אחרי כתיבת כל הקוד PHP (ואחרים...) יש להדפיס את המשתנה שאגרו.

למשל:

קוד PHP:
<?php
$output 
''
$output .= $ _GET['some'] == 'hello' 'He send hello!' 'He didn\'t send hello!';
# The code is done!
# Let's print it all.
print $output;
?>


בצורה כזו העוגיה תישלח לפני שאפילו תו יחיד יודפס.

3. כדי לגרום לכך שלא יווצר BOM, זאת אומרת כדי להסיר את החתימה שנוצרת לפני כל הקוד PHP, יש להוריד תוכנה שנקראת notepad++ שבעזרתה כששומרים את הקובץ PHP, חתימת ה-BOM לא נוצרת. בצורה כזו, כשאין חתימה של BOM, הכל ייפעל כראוי (בתנאי שאין את בעיות 1 ו-2 כמובן).

להורדת התוכנה notepad++:

http://notepad-plus.sourceforge.net/uk/download.php
קישור ישיר: http://optusnet.dl.sourceforge.net/...npp.3.7.src.zip

* הערה: אם הקישור נשבר, תמיד אפשר לחפש ב-Google =)

אשכולות נוספים שקשורים לנושא:

http://www.fresh.co.il/vBulletin/sh...9&highlight=BOM
http://www.fresh.co.il/vBulletin/sh...ad.php?t=197708

(תודה לישראל K ולעוד כמה שעזרו לי בהבנת העניין ולמעשה בכתיבת קטע זה)
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #38  
ישן 18-10-2006, 17:09
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
אוסף ביטויים רגולריים פופולריים
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

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

אני אתחיל ב-3 שכתבתי (הראשון או השני נלקח ממקום אחר):

ביטוי רגולרי לכתובת אתר (HTTP):
קוד:
/^(http:\/\/)([\w.]+)\.([\w.]+)\.([\w.]+)[a-z]{2,6}$/i


ביטוי רגולרי לכתובת אימייל (eMail):
קוד:
/^[\w.]+@([\w.]+)\.[a-z]{2,6}$/i


ביטוי רגולרי לכתובת תמונה (חובה עם סיומת תמונה. ללא אפשרות של תמונות דינאמיות):
קוד:
/^(http:\/\/)(([\w.]\.)*)([^\W_]+)\.([\w.]+)[a-z]{2,6}(\/|\\)((([\w.]+)(\\|\/))*)([\w.]+)\.([\w.]+)$/i


יש לציין שבדקתי את כולם והם עובדים כשורה. למרות שיש סיכוי (כמו תמיד) שבמצב ספציפי שלא חשבתי עליו הם לא יעבדו.

עוד ביטויים רגולריים ניתן למצוא פה (בתגובות, למטה בעמוד):
http://www.php.net/manual/en/refere...tern.syntax.php
http://www.php.net/manual/en/function.preg-replace.php

ובשאר הקישורים לפונקציות השונות שנמצאים בצד שמאל בעמוד...

אתם מוזמנים בהמוניכם להוסיף עוד ביטויים

נערך לאחרונה ע"י DCD בתאריך 18-10-2006 בשעה 17:12.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #39  
ישן 21-05-2007, 21:03
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
החלפת ערך משתנה
בתגובה להודעה מספר 38 שנכתבה על ידי DCD שמתחילה ב "אוסף ביטויים רגולריים פופולריים"

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

הביטוי:
קוד:
/\Q$\E".$search[0]."\s*\[['\"]".$search[1]."['\"]\]\s*=\s*(?(?=['\"]{1})(['\"]{1})([^.]*)(['\"]{1})|([^'\"][^.]*[^'\"]))\;/i


דוגמא להחלפה:
קובץ הקוד:
קוד PHP:
<?php
$search 
= array('VarName''Key''The Var\'s new value');    # Search for veriable
$file 'configs.php';

$pattern "/\Q$\E".$search[0]."\s*\[['\"]".$search[1]."['\"]\]\s*=\s*(?(?=['\"]{1})(['\"]{1})([^.]*)(['\"]{1})|([^'\"][^.]*[^'\"]))\;/i";
$replacewith "$".$search[0]."['".$search[1]."'] = \\1".$search[2]."\\3;";

if (@
is_readable($file) AND @is_writable($file) AND @is_file($file) AND @file_exists($file))
{
    if (
$string file_get_contents($file))
    {
        if (
preg_match($pattern,$string,$matches))
        {    
            echo 
'<br /><br />';
            
print_r($matches);    
            echo 
'<br />There\'s a match!!!<br />';
            
$string preg_replace($pattern,$replacewith,$string);
            if (
file_put_contents($file,$string))
            {    echo 
'<br />The Var\'s value replaced successfully.';    }
        }
        if (!
preg_match($pattern,$string,$matches))
        {    
print_r($string);
            echo 
'No Match! <br />';
        }
    }
    else
        echo 
'problem occured while trying to fetch the file into a veriable.';
}
else
    echo 
"can't access the file ".$file." OR bad file name";
?>


הקובץ שבו מחליפים את תוכן המשתנה, לפני השינוי:

קוד PHP:
<?php

$VarName
['info1'] = 100;
$VarName['info2'] = 'Hello';
$VarName['key'] = "DCD tries";

?>


אחרי השינוי:

קוד PHP:
<?php

$VarName
['info1'] = 100;
$VarName['info2'] = 'Hello';
$VarName['key'] = "The Var's new value";

?>


נשאר רק לסדר את בעיית הגרשים...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #40  
ישן 23-07-2007, 03:14
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
כתיבת עיברית תקינה על תמונה - GD
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

על מנת לכתוב עיברית על תמונה, ובכלל ליצור תמונה, יש לאפשר בשרת שלכם את הפעילות של ספריית ה-GD וספרית ה-Font. פרטים על הפעלתם תוכלו למצוא ב: http://www.php.net/manual/en/ref.image.php.

אחרי שהפעלתם את האפשרות לשימוש בפונקצית תמונה, יש צורך ליצור קובץ חדש שמקודד בקידוד UTF-8. חשוב שלקובץ הזה לא תהיה חתימת BOM שנוצרת בתחילתו, ואת החתימה אפשר להסיר עם תוכנות מסוימות כמו notepad++, שניתן להוריד אותה מהאתר הבא: http://notepad-plus.sourceforge.net/uk/site.htm . (אם הלינק שבור, חפשו בגוגל)

חשוב שכל הקובץ, כולל הקוד שבתוכו יקודד באותו הקידוד שהוא UTF-8 כדי שהעיברית תפעל כמו שצריך. וכיוון שמשתמשים פה בקידוד multiByte (קידוד UTF-8 מתרגם כל 2 בתים לתו גרפי\ויזואלי יחיד), יש צורך להשתמש בפונקציות mbString שאפשר למצוא בעמוד הבא: http://www.php.net/manual/en/ref.mbstring.php .

קודם אפרסם את הקוד שמפעיל את העיברית התקינה על התמונה ואח"כ אסביר בקצרה על החלקים בו:

קוד PHP:
<?php
# Author: DCD.
/* GD Image - Hebrew Proper Result */
$encoding 'UTF-8';
header('Content-type: image/png;');
mb_detect_order($encoding.', ASCII, ISO-8859-8-I');
mb_regex_encoding($encoding);
mb_internal_encoding($encoding);

/* Vars setup: */
$tSize 16;    # Font size: 16
$font 'c:\windows\fonts\TIMES.TTF';    # Font type: times new roman
$text 'טקסט בדיקה. שילוב English לבדיקה מקיפה, וגם סימנים אחרים!';    # The output-to-image string

/* Text Correction: */
$wordsCache = array();
$properStr '';
$text mb_ereg_replace('([\S]+[\s]*)'"Reverse('\\1')"$text'e');
$text lastReverse();


$boxSize imagettfbbox($tSize0$font$text);

$width $boxSize[2]+3;
$height $boxSize[1] - $boxSize[7] + $boxSize[3];
$im imagecreatetruecolor($width,$height);

$black imagecolorallocate($im000);
$white imagecolorallocate($im255255255);

imagefilledrectangle($im00$width$height$white);

imagettftext($im$tSize0020$black$font$text);

imagepng($im);
imagedestroy($im);

function 
charsReverse($text)
{
    global 
$encoding;
    
$cacheChars '';
    for(
$i=mb_strlen($text); $i 0; --$i)
        
$cacheChars .= mb_substr($text$i-11$encoding);
    return 
$cacheChars;
}

function 
Reverse($inStr)
{
    global 
$wordsCache;

    if (
mb_ereg_match('([\x{05D0}-\x{05EA}]+)'$inStr) || mb_ereg_match('([\W\d_]+)'$inStr))
        
$wordsCache[]= charsReverse($inStr);
    else
        
$wordsCache[]= mb_ereg_replace('(([\S]+)([\s]*))''\\3\\2'$inStr);
}

function 
lastReverse()
{
    global 
$properStr$wordsCache;
    
    for (
$i count($wordsCache); $i >= ; --$i )
        
$properStr .= $wordsCache[$i];
        
    return 
$properStr;
}

?>


הקוד הנ"ל אמור להיות בתוך הקובץ שמקודד בקידוד UTF-8 ושללא חתימת BOM.

נעבור להסבר על החלקים...:

הקוד:
קוד PHP:
 $encoding 'UTF-8';
header('Content-type: image/png;');
mb_detect_order($encoding.', ASCII, ISO-8859-8-I');
mb_regex_encoding($encoding);
mb_internal_encoding($encoding); 

הסבר:
הגדרת הקידוד (UTF-8) שאנחנו הולכים להשתמש בו בפונקציות ה-mbString, וקביעת כותר של תמונה בפורמט png.

הקוד:
קוד PHP:
 /* Vars setup: */
$tSize 16;    # Font size: 16
$font 'c:\windows\fonts\TIMES.TTF';    # Font type: times new roman
$text 'טקסט בדיקה. שילוב English לבדיקה מקיפה, וגם סימנים אחרים!';    # The output-to-image string 


הסבר:
הגדרות ראשוניות הניתנות לשינוי. יש את גודל הטקסט, סוג הפונט של הטקסט והטקסט עצמו...
הקוד:
קוד PHP:
 $wordsCache = array();
$properStr '';
$text mb_ereg_replace('([\S]+[\s]*)'"Reverse('\\1')"$text'e');
$text lastReverse(); 


הסבר:
בגלל שבדר"כ הטקסט המוצג בתמונות הוא מהופך (לדוגמא במקום שייכתב "שלום" ניכתב בתמונה "םולש") יש צורך להפוך אותו. בלוק הקוד הנ"ל והפונקציות שנמצאות בחלק התחתון ביותר בקוד הכללי הופכות את העיברית כדי שהיא תוצג כמו שצריך בתמונה.

הקוד:

קוד PHP:
 $boxSize imagettfbbox($tSize0$font$text);

$width $boxSize[2]+3;
$height $boxSize[1] - $boxSize[7] + $boxSize[3];
$im imagecreatetruecolor($width,$height); 


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

הקוד:

קוד PHP:
 $black imagecolorallocate($im000);
$white imagecolorallocate($im255255255);

imagefilledrectangle($im00$width$height$white);

imagettftext($im$tSize0020$black$font$text);

imagepng($im);
imagedestroy($im); 


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

---------------------------------------------------------

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

הערה: עשיתי את כל הפונקציות האלה כדי שיהיה אפשרות לשלב אנגלית ועיברית ביחד, באותה המחרוזת ובאותה התמונה. אחרת אני חושב שהיה אפשר ביותר קלות לבצע את הפיתרון הזה.

בהצלחה.

נערך לאחרונה ע"י DCD בתאריך 23-07-2007 בשעה 03:26.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #44  
ישן 07-08-2007, 11:11
  mikiller mikiller אינו מחובר  
 
חבר מתאריך: 24.05.07
הודעות: 1,602
שימוש בexplode ו strlen
בתגובה להודעה מספר 43 שנכתבה על ידי mikiller שמתחילה ב "אוקי קיבלתי"

אוקי שאלתי בפורום הזה ופורמים נוספים שעוסקים בphp איך אני יכול לקחת 5 מילים ראשונות ממחרוזת
גם אם יש ל 500 מילים לקחת את ה5 הראשונות ומתוחם לקחת רק מילים שיש להם יותר מ3 אותיות .
פירוק המחרוזת למילים בודדות
קוד PHP:
 $pizza "עד מתי נוב 04 עיפים מתי נשתחרר מצהל.";
$pieces explode(" "$pizza ); 

החלק השני והיותר מורכב
לולאה שתרוץ 5 פעמים מ0 עד 4 כלומר תרוץ על ה5 מילים הראשונות שלנו ($pieces[$a]).
כמו כן יש לנו תנאי שבודק באמצעות הפונקציה strlen אם יש שלוש אותיות במידה וכן הוא מכניס אותו
$searching .
קוד PHP:
 for ($a=0$a<=4$a++)
{
    if ((
strlen($pieces[$a]))>=3) {
$searching="$searching $pieces[$a] "
    }




הקוד המלא
קוד PHP:
<?php
$pizza 
"עד מתי נוב 04 עיפים מתי נשתחרר מצהל.";
$pieces explode(" "$pizza );
 
for (
$a=0$a<=4$a++)
{
    if ((
strlen($pieces[$a]))>=3) {
$searching="$searching $pieces[$a] "
    }
}
echo 
$searching ;
 
?>

שאלות
1)משהו יודע איך אפשר לעשות שיהיו גם ערכים אם שלוש אותיות שלא יכנסו לערך $searching נגיד מילים כמו להם,מתי,עוד וכו' ??
2)לגבי התוכנה Notepad++ יש לי קצת בעיות בעברית משהו יודע איך מסדרים את זה אני אשמח מאוד

נערך לאחרונה ע"י mikiller בתאריך 07-08-2007 בשעה 11:17.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #45  
ישן 07-08-2007, 21:26
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 44 שנכתבה על ידי mikiller שמתחילה ב "שימוש בexplode ו strlen"

יצרתי פונקציה מבוססת על זה, שיכולה לקבל בארגומנטים:
1) את המחרוזת (כמובן)
2) מספר המילים שאתה רוצה להוציא
3) מספר האותיות המינימאלי לכל מילה
4) מערך עם מילים לסינון

הוספתי עוד 2 אפשרויות: אי-רגישות לאותיות גדולות\קטנות (כמובן שצריך שהמערך של המילים לסינון יהיה באותיות קטנות, היה נראה לי מיותר לעבור על המערך בלולאה ולוודא שהכל עם אותיות קטנות) ומחיקת רווחים מיותרים שיכולים להיווצר, השתמשתי ב- 2 פונקציות בשביל זה:
1) trim, שמוציאה רווחים בשוליים של מחרוזת
2) strtolower שהופכת מחרוזת להיות בעלת אותיות קטנות

הנה הפונקציה:
קוד PHP:
 function shortText($words$limit$letters$filter)
{
    
$returnVal "";
    
$words explode(" "trim($words));
    --
$limit;

    for(
$i=0$i <= $limit$i++)
    {
        
$word trim(strtolower($words[$i]));
        
        if(!(
strlen($word) <= $letters OR isset($filter[$word])))
            
$returnVal .= " ".$words[$i];
    }    
    return 
trim($returnVal);


ובדוגמא הזאת ניקח את ה- 7 מילים הראשונות מהמחרוזת This is a test string 1 2 3 4 5 HELLO
נסנן מילים עם פחות מ- 3 תווים, ונסנן את המילים word, hello ו- string

הנה קוד שבדקתי אצלי:
קוד PHP:
<?php
function shortText($words$limit$letters$filter)
{
    
$returnVal "";
    
$words explode(" "trim($words));
    --
$limit;

    for(
$i=0$i <= $limit$i++)
    {
        
$word trim(strtolower($words[$i]));
        
        if(!(
strlen($word) <= $letters OR isset($filter[$word])))
            
$returnVal .= " ".$words[$i];
    }    
    return 
trim($returnVal);
}

$filter = array("world" => "world""hello" => "hello""string" => "string");
echo 
shortText("hello This is a test string 1 2 3 4 5 HELLO "73$filter);
?>

והפלט:
This test
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #46  
ישן 01-10-2007, 16:40
צלמית המשתמש של netaneldj
  netaneldj netaneldj אינו מחובר  
 
חבר מתאריך: 01.05.06
הודעות: 7,861
Facebook profile
בניית שעון ספירה לאחור - Countdown
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

אז איך בונים שעון ספירה לאחור?

אציג קודם את הקוד ואז אסביר אותו.


קוד:



קוד PHP:
 # 'countdown' function calculates a difference between objective given time and local time, and presents it like a clock.

function countdown($objective_time) {
 
//initializing global variables for out-function use.
global $years$months$days$hours$minutes$seconds;
 
//converts the given string into Timestamp.
$objective_time = (is_string($objective_time)) ? strtotime($objective_time) : die('$objective_time has to be a string');
//gets the time difference between the local and the objective time.
$timestamp abs($objective_time time());
/* mathematic calculation parsing of timestamp into time data */
$years floor($timestamp/(60*60*24*30*12));
$months floor($timestamp/(60*60*24*30)%12);
$days floor($timestamp/(60*60*24)%30);
$hours floor($timestamp/(60*60)%24);
$minutes zInsert(floor($timestamp/60%60));
$seconds zInsert(floor($timestamp%60));
return 
$timestamp;
}
# 'zeroInsert' function adds a zero digit for numbers below 10 (for instance time should be 13:07:02 and not 13:7:2).
function zInsert($num) {
 
if (!
is_numeric($num)) die('$num has to be numeric');
if (
$num 10)
return 
'0'.$num;
else
return 
$num;





שימוש בפונקציות:
הסבר:

תחילה בנינו פונקציה בשם countdown אשר תחזיר את הפרשי הזמן בין הזמן הנתון לזמן הנוכחי (כדי לאפשר חישובים נוספים אח"כ).

UNIX TimeStamp הוא בעצם פורמט של זמן אשר כולל בו את מספר השנים מ1970 עד היום (בשניות).

שינוי ממחרוזת ל- TimeStamp אנו מבצעים בעזרת הפונקציה strtotime.

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


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



קוד:
60*60*24*30*12


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

על אותו עיקרון פועלת השיטה לגבי שאר המשתנים, רק ששם משתמשים במודולה % (שארית חילוק).
אם אנחנו רוצים את מספר הימים למשל, אנחנו רוצים שהטווח יהיה בין 1-30, ולכן נבצע את הפעולה הבאה:



קוד:
$timestamp/(60*60*24)%30



הפונקציה zInsert שיצרנו בודקת אם מספר קטן מ 10, ובהתאם מוסיפה לו 0 בהתחלה.

למשל אם לא היינו משתמשים בפונקציה, הזמן היה יכול להיות: 10:2:3 אך אנו רוצים בכך שהזמן יראה כך: 10:02:03.


דוגמא לקריאה לפונקציה:



קוד PHP:
 countdown('31 October 2007'); 


והצגת הנתונים:



קוד PHP:
 echo <<<HTML

<pre>
Countdown:
Years: <b><i>
{$years}</i></b>
Months: <b><i>
{$months}</i></b>
Days: <b><i>
{$days}</i></b>
<b><i>
{$hours} : {$minutes} : {$seconds}</i></b>
</pre>
HTML; 




הקוד המלא:
https://2007-uploaded.fresh.co.il/2...1/10684055.phps


אשמח לקבל תיקונים.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #58  
ישן 02-08-2009, 20:48
צלמית המשתמש של netaneldj
  netaneldj netaneldj אינו מחובר  
 
חבר מתאריך: 01.05.06
הודעות: 7,861
Facebook profile
איך לעשות תגובות משורשרות [כמו בפרש]
בתגובה להודעה מספר 1 שנכתבה על ידי isoTop שמתחילה ב "FAQ"

אני אתן את הדוגמה הכי פשוטה ומינימלית שיכולה להיות, בעיקר כדי להקל על ההבנה.

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

כדי לא לבזבז משאבים מיותרים מהשרת, נעביר את כל המידע לתוך מערך ואח"כ נוכל לטפל בו:
קוד PHP:
 $query mysql_query('SELECT * FROM `posts`');

while ((
$post mysql_fetch_assoc($query)) !== false)
    
$posts$post['id'] ] = $post


נכתוב פעולה שתעזור לנו להדפיס את ההודעות:
קוד PHP:
 function output($id$content$date$pad)
{
$pad = (int)($pad) * 25;

return <<< HTML
<div style="width:300px;border:solid 1px #afafaf;margin:0 {$pad}px 3px {$pad}px;padding:3px;">
<sub>#
{$id} - {$date}:</sub>
<pre style="white-space:normal;">
{$content}</pre>
</div>
HTML;



* ופעולה רקורסיבית שמריצה עבור כל הודעה סריקה שבודקת האם יש תת-הודעות שמופנות אליה:
קוד PHP:
 function tree(array $posts$id 0$pad 0)
{
    foreach(
$posts as $post)
    {
        if (
$post['refer_to'] == $id)
        {
            echo 
output($post['id'], $post['content'], $post['date'], $pad);
            
tree($posts$post['id'], $pad 1);
        }
    }
}
tree($posts); 

הקוד המלא:
https://2009-uploaded.fresh.co.il/2...2/33685096.phps

השורות שהכנסתי:
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
התוצאה:
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה


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

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

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

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

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



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

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

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

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