![]() |
לא לאפשר רענון דף עם אותו מידע של POST, איך?
שלום,
יש לי טופס כלשהו, אחרי שהוא נשלח אני לא רוצה שהם יוכלו לעשות F5 ולשלוח את הform מחדש, איך מונעים מהם את זה? :) תודה :D |
ב"ה
אחרי קבלת הנתונים תעשה header location לאותו דף. ואז ריענון רק יטען את הדף מחדש ולא ישלח נתונים. |
אתה יכול גם לשרשר מס' מסויים ל action של הטופס: handle_with_care.asp?nRandom=0734503956 ולתקוע ב session ובעת רפרש לבדוק אם זה קיים או לא ולפעול בהתאם.
|
|
זה כאילו יעביר אותך מחדש לדף ושיעשו רענן זה פשוט ירענן את הדף ולא ישלח פעמים. הבנת?
|
אני לא ממש מבין בתיכנות אבל אני חושב שהבנתי את מה שאלעד אמר,
מה שאני חושב שהוא אמר זה שכל אחד שנכנס אתה יוצר לו דף איזה שאתה צריך ואז ברגע שהוא עושה את מה שהוא צריך, אתה מכניס סשיין שלא מאפשר לראות את הדף. ואם זה ככה אז כך רעיון אולי תיצור דף לכל אחד שנכנס ובסיום תעשה משהו שימחוק אותו. מקווה שעזרתי, ושמה שאמרתי לא שטויות חח. |
אתה יכול לשמור את האיפי של המשתמש , ולבדוק אם הוא שלח ב X הזמן האחרון בטופס משהו.
זה גם עוזר שלא ישלחו לא רק רענון ב F5 אלא שאם ינסו לשלוח כמה פעמים את הטופס בלי F5. ----- או : במקום הזמן , אתה פשוט יכול לשמור רק את האיפי האחרון שאיתו נשלח הטופס. ואז לעשות בדיקה. |
עוד לא הבנתי בשביל מה כל זה? אחרי שנשלח הפוסט עושים header וזהו מה יותר פשוט מזה?
|
amirs_5
פתרון מאוד לא חכם, אני מחפש אפשרות ישירה לחסימת רענון הדף לדעתי זה דבר הכרחי באיזשוהי שפת תיכנות... ואתם נראה לי לא מבינים. אם למשל יש לי כזה דבר: page?act=showform שמה יש לי טופס שנשלח לי ל page.php?act=send ואז שעושים submit לטופס הוא נשלח ללינק הזה ושולח אימייל לכתובת מסויימת עכשיו שהם הולכים לpage.php?act=send וזה כבר שלח פעם אחת אימייל, הם יכולים ללחוץ על F5 ולתת לדפדפן לרענן את הדף + המשתנים שנשלחו אליו בPOST... ואז הם יכולים לשלוח המון אימיילים עם רענון... אני בעצם רוצה לחסום שהם לא יוכלו לעשות רענון עם הנתונים הקודמים.. עריכה: עלה לי עכשיו רעיון מההודעה של אלעד, אלעד תגיד לי אם לזה התכוונת: שזה ישלח ביחד עם הטופס גם את מספר הID (ששמור כבר במסד) של שליחת הטופס, ואז שנשלח הטופס אני מגדיר במסד שהטופס נשלח, ואז כל פעם אני מבצע בדיקה אם הטופס נשלח או לא. לזה התכוונת אלעד? |
אחרי שאתה מעבד ושולח את המייל אתה מעביר את המשתמש לדף אחר ויוצר גם סישן, מהו הדף האחר?!? אותו הדף page.php?act=send ...
תעשה בדיקה בדף הזה אם קיים סישן ואם הוא קיים אז במקום שזה ישלח מייל זה יכתוב המייל נשלח בהצלחה... |
תעשה שאחרי שהוא שולח את הטופס אתה יוצר סשן/קוקי חדש ובו רשום שהוא שלח את הטופס כבר
ואז בתחילת הדף אתה בודק אם כבר יש סשן/קוקי כזה |
ציטוט:
הרעיון של אלעד(זה כאילו הרעיון שהוא הציעה) |
ציטוט:
תראה מה תעשה. תעשה ב page.php?act=send בדיקה שאם נתקבלו נתונים מהטופס. אז שיעשה header location ל page.php?act=send הבדיקה באה כדי שלא יעשה את (ההכוונה שוב ושוב) ואז המשתמש בעצם ביקר בדף בלי להגיע מטופס אז ריענון לא ישלח שוב כלום. |
תפנה אחרי השליחה לעמוד חדש, אחר.
|
בניה
זה לא עוזר, תעשו אתם טופס, תשלחו אותו תעשו F5 ואז OK והוא ישלח בעצם את הנתונים ככה שהדף יחשוב שהוא שלח את הטופס.... |
ציטוט:
התכוונתי שתבצע משהו כזה - בעת הכניסה לעמוד, הטאגית FORM תראה כך: HTML קוד:
<form action="some-page.asp?act=send&nRnd=96234986" method="post" name="bah" ...> ואז בעמוד some-page, אתה מכניס את ה nRnd ל session ומאפשר את ביצוע העמוד כשעושים רפרש אתה בודק אם יש session עם המסד שנשלף בטופס (בודק אם nRnd שנשלח שווה לזה שיש ב session ואז לא מאפשר את ביצוע הטופס) |
אחרי שליחת הטופס, אמרת שהוא מועבר ל send.php, אני מניח שבעמוד ההוא יש את כל הקטע של הבדיקות...
תעשה שבמידה והאימייל נשלח כמו שצריך תעשה PHP קוד:
|
אפשר לרשום עוגיה שתמנע את זה :)
|
ציטוט:
|
ציטוט:
|
תודה תומר על ההסבר.
אני ישקול את שני האפשרויות שלי, אחת הרעיון שעלה לי אחד הקטע של הHEADER. נראים לי הכי יעילים, תודה לכולם. |
אתה יכול להעביר פשוט המון המון המון פוסטים,
ואז מי שילחץ F5 יקרוס לו הדפדפן :D |
כל הזמנים הם GMT +2. הזמן כעת הוא 21:58. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ