ספירת ערכים כפולים בget בphp
-
האם יש דרך לספור כמה פעמים נשלח אותו הערך בget?
(אני צריך את זה בשביל הapi של ימות
אני רוצה לבנות תפריט עם אפשרות של חזרה שלב אחד אחורה
למשל אנא הקש את מספר המוצרים
ובתפריט הבא נבחרו X מוצרים לאישור הקש 1 לביטול 2
אם הוא הקיש 2 יחזור לתפריט הקודם ויבחר כמות מוצרים ואז ימשיך שוב לתפריט לאישור וכו'
חשבתי לבנות משהו כזהif (!$item){ a: exit( "read=t-אנא בחר כמות מוצרים =item,no,1,1,7,No,,,," ); } if($approve_count<$item_count){ exit( "read=t-לאישור הקש אחת לביטול שתיים=approve,no,1,1,7,No,,,,#12*,," ); } if($approve==2){ goto a; }
אם יש לכם פתרון אחר לזה אשמח לשמוע)
-
@MusiCode
אולי רציתי, לא זכור לי שיצא משהו בסוף.
@nigun
אני אף פעם לא השתמשתי ב PHP בגו טו, אין לי מושג כמה זה יעיל.
אבל מה שכן אני הייתי הולך על כיון אחר, לוקח את $_SERVER["QUERY_STRING"]; ששם יש את המחרוזת של הGET, ומפצל אותו או עושה חיפוש כמה פעמים מופיע הערך המבוקש, וכך אתה יודע באיזה מוצר הוא אוחז.
אבל בכל מקרה זה לא נכון כי אם אתה שולח תמיד את אותו שם של הפרמטר, זה ידרוס תמיד את הערך שנשלח במוצר הקודם, וכל המוצרים חוזרים להיות אותו הקשה.
לכן אולי לעשות פיתרון משהו בנוסח שלexit( "read=t-לאישור הקש אחת לביטול שתיים=approve[],no,1,1,7,No,,,,#12*,," );
שזה יוצר מערך של ההקשות במקום ערך קבוע, ולפי זה לבצע את המעבר ממוצר למוצר.
-
@MusiCode אמר בספירת ערכים כפולים בget בphp:
@חוקר אני מדבר על ()check_ok (זוכר?...)
זה נושא אחר, זה משמש לבדיקה על ערך (שנשלח פעמיים), האם הערך האחרון ב GET הינו הערך המבוקש.
לא נראה לי שזה קשור לכאן, כי כאן הוא צריך לדעת בנפרד על כל מוצר מה הייתה ההקשה. -
@חוקר
אני התכוונתי לבדוק כמה פעמים זה נשלח
ככה אם הלקוח טעה ורוצה לתקן הוא מקיש 2 וחוזר להקשה מחדש של כמות הפריטים
ואז כיוון שהערך item מופיע פעמיים והערך approve רק פעם אחת הוא מקבל שוב את התפריט "לאישור..."
אם הוא מקיש 1 אז עכשיו גם approve וגם item מופעים פעמיים ואז הוא ממשיך הלאהלגבי הגו טו אמנם לא מומלץ להשתמש בו כי זה גורם אחר כך לקוד קשה לקריאה
אבל כאן זה יותר נוח לכתוב גו טו מאשר לכתוב שוב את אותו תפריט או להשתמש בפונקציה כי הוא באמת חוזר אחורהבכל מקרה הפתרון הוא אכן QUERY_STRING
זה מה שכתבתי וזה פתרן לי את הבעיה$query_string = $_SERVER['QUERY_STRING']; $item_count = substr_count($query_string, 'item='); $approve_count = substr_count($query_string, 'approve='); extract($_GET); if (!$item){ a: exit( "read=t-אנא בחר כמות מוצרים =item,no,1,1,7,No,,,," ); } if($approve_count<$item_count){ exit( "read=t-לאישור הקש אחת לביטול שתיים=approve,no,1,1,7,No,,,,#12*,," ); } if($approve==2){ goto a; }
אמנם במקרה של הרבה מוצרים ובסוף הקראה של כל המוצרים בסל ואז שאלה של "לאישור ..."
אז זה יהיה קצת יותר מורכב -
@WWW אמר בספירת ערכים כפולים בget בphp:
זה ברור!
"נישט קשה", למה לקטר? אתה היית בונה את זה יותר טוב?
אני לא אומר שזה הכי קל לעבוד מולם, אבל כשזה תחליף להתעסקות לבד עם כל הבלאגן של שרת פרטי, ואתה משקיע במוצר שלך ולא בתשתית, זה ממש ממש מצויין.
כמובן צריך לתכנן את זה טוב, לבנות פונקציות שעושים את העבודה מול ימות ואז הכל זורם.
ולגבי עצם השאלה כאן בפורום אם היה לי יותר זמן וריכוז אולי הייתי מנסה לחשוב על פיתרון, אבל כבר התחלתי את הזמן, והצטבר לי המון עבודה מבין הזמנים שנדחתה עקב שמחה משפחתית, שאין לי כעת את הריכוז, אבל ודאי שאפשר למצוא פיתרון.
כיון אחד שאני יכול לזרוק, לעבוד לפי המזהה שיחה בימות שנשלח בURL שערכו ApiCallId, ולשמור בד"ב או במשתנה בשרת (אם זה נוד או משהו בסגנון זה אפשרי, בPHP חייבים לכאורה ד"ב) לשמור מערך של כל המוצרים שכבר נבחרו, וכן מצביע באיזה מספר מוצר הוא אוחז, ובכל שלב לקדם את המצביע למוצר הבא.
ובנוסף להוסיף לסקריפט תנאי שאם יש בGET משתנה hangup=yes זה מוחק את המערך של שיחה זו מהד"ב, כדי למנוע הצטברות מיותרת של שורות לא רלוונטיות. -
אני חולם לבנות מחלקה (לאו דווקא בשפה ספיציפית),
שתפתור את הבעיות האלה, מתחת למכסה המנוע.
כמו המחלקות שיש לARI של אסטריסק, שמתחברות בו"ז לווב-סוקט של אסטריסק, ולREST API של אסטריסק.שהמחלקה תדע לנחש באיזה שלב המאזין נמצא, ולנו יישאר רק לתכנת סקריפט,
שורה אחר שורה.
מתישהו שיהיה לי זמן, אני אנסה לחשוב מאיפה מתחילים,
אם לא אחליט שעוברים לאסטריסק וגמרנו עם הכאב-ראש הזה.אולי פה תתנו כיוונים.
(למשל לעשות אובייקט שמציין את המשתמש, ויהיו לו מתודות, כמספר המתודות של ימות API,
ומתחת למכסה המנוע, האובייקט יבדוק כל הזמן בדטה-בייס איפה הוא נמצא עכשיו.
ואולי אפשר להשתמש בפייתון או כל שפה שיש רצף, ולא כל קריאה מתחילה את הכל מהתחלה.
הנה כמה רעיונות בוסריים.)