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

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

Alon.R 17-08-06 12:33

לא לאפשר רענון דף עם אותו מידע של POST, איך?
 
שלום,

יש לי טופס כלשהו, אחרי שהוא נשלח אני לא רוצה שהם יוכלו לעשות F5 ולשלוח את הform מחדש, איך מונעים מהם את זה? :)

תודה :D

בניה 17-08-06 12:38

ב"ה

אחרי קבלת הנתונים תעשה header location לאותו דף.
ואז ריענון רק יטען את הדף מחדש ולא ישלח נתונים.

eLad 17-08-06 12:43

אתה יכול גם לשרשר מס' מסויים ל action של הטופס: handle_with_care.asp?nRandom=0734503956 ולתקוע ב session ובעת רפרש לבדוק אם זה קיים או לא ולפעול בהתאם.

Alon.R 17-08-06 13:21

eLad

לא הבנתי את הרעיון...

בניה

לא הבנתי איך יעזור אם אני יעשה Header("Location: page.php")....

Elad-A 17-08-06 13:24

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

ani 17-08-06 13:32

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

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

מקווה שעזרתי, ושמה שאמרתי לא שטויות חח.

amirs_5 17-08-06 17:52

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

Elad-A 17-08-06 18:11

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

Alon.R 17-08-06 23:01

amirs_5

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

ואתם נראה לי לא מבינים.
אם למשל יש לי כזה דבר:

page?act=showform
שמה יש לי טופס שנשלח לי ל
page.php?act=send
ואז שעושים submit לטופס הוא נשלח ללינק הזה ושולח אימייל לכתובת מסויימת

עכשיו שהם הולכים לpage.php?act=send
וזה כבר שלח פעם אחת אימייל, הם יכולים ללחוץ על F5 ולתת לדפדפן לרענן את הדף + המשתנים שנשלחו אליו בPOST... ואז הם יכולים לשלוח המון אימיילים עם רענון...
אני בעצם רוצה לחסום שהם לא יוכלו לעשות רענון עם הנתונים הקודמים..

עריכה:

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

לזה התכוונת אלעד?

AFI 17-08-06 23:14

אחרי שאתה מעבד ושולח את המייל אתה מעביר את המשתמש לדף אחר ויוצר גם סישן, מהו הדף האחר?!? אותו הדף page.php?act=send ...
תעשה בדיקה בדף הזה אם קיים סישן ואם הוא קיים אז במקום שזה ישלח מייל זה יכתוב המייל נשלח בהצלחה...

Rom 17-08-06 23:28

תעשה שאחרי שהוא שולח את הטופס אתה יוצר סשן/קוקי חדש ובו רשום שהוא שלח את הטופס כבר
ואז בתחילת הדף אתה בודק אם כבר יש סשן/קוקי כזה

somebody 17-08-06 23:57

ציטוט:

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

..
הרעיון של אלעד(זה כאילו הרעיון שהוא הציעה)

בניה 18-08-06 00:07

ציטוט:

נכתב במקור על ידי Alon.R
amirs_5

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

ואתם נראה לי לא מבינים.
אם למשל יש לי כזה דבר:

page?act=showform
שמה יש לי טופס שנשלח לי ל
page.php?act=send
ואז שעושים submit לטופס הוא נשלח ללינק הזה ושולח אימייל לכתובת מסויימת

עכשיו שהם הולכים לpage.php?act=send
וזה כבר שלח פעם אחת אימייל, הם יכולים ללחוץ על F5 ולתת לדפדפן לרענן את הדף + המשתנים שנשלחו אליו בPOST... ואז הם יכולים לשלוח המון אימיילים עם רענון...
אני בעצם רוצה לחסום שהם לא יוכלו לעשות רענון עם הנתונים הקודמים..

עריכה:

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

לזה התכוונת אלעד?

ב"ה

תראה מה תעשה.
תעשה ב page.php?act=send בדיקה שאם נתקבלו נתונים מהטופס.
אז שיעשה header location ל page.php?act=send הבדיקה באה כדי שלא יעשה את (ההכוונה שוב ושוב) ואז המשתמש בעצם ביקר בדף בלי להגיע מטופס אז ריענון לא ישלח שוב כלום.

exciter 18-08-06 04:18

תפנה אחרי השליחה לעמוד חדש, אחר.

Alon.R 18-08-06 14:18

בניה

זה לא עוזר, תעשו אתם טופס, תשלחו אותו תעשו F5 ואז OK והוא ישלח בעצם את הנתונים ככה שהדף יחשוב שהוא שלח את הטופס....

eLad 18-08-06 14:26

ציטוט:

נכתב במקור על ידי Alon.R

עריכה:

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

לזה התכוונת אלעד?

נופ |Rolleyes|

התכוונתי שתבצע משהו כזה -

בעת הכניסה לעמוד, הטאגית FORM תראה כך:

HTML קוד:

<form action="some-page.asp?act=send&nRnd=96234986" method="post" name="bah" ...>
ה nRnd זה מספר כלשהו שאתה יוצר רנדומאלית (אתה יכול להדפיס גם את התאריך המלא של היום (כולל שניות בלי סלאשים) שם..

ואז בעמוד some-page, אתה מכניס את ה nRnd ל session ומאפשר את ביצוע העמוד

כשעושים רפרש אתה בודק אם יש session עם המסד שנשלף בטופס (בודק אם nRnd שנשלח שווה לזה שיש ב session ואז לא מאפשר את ביצוע הטופס)

Tomer 18-08-06 14:35

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

תעשה שבמידה והאימייל נשלח כמו שצריך תעשה
PHP קוד:

header("Location: thankyou.php"); 

ששם זה יגיד "תודה ששלחת אימייל" ושלום על ישראל.. פתרת את הבעיה.

Art Watch 18-08-06 14:47

אפשר לרשום עוגיה שתמנע את זה :)

eLad 18-08-06 14:48

ציטוט:

נכתב במקור על ידי Gil & Ido
אפשר לרשום עוגיה שתמנע את זה :)

מיותר לרשום עוגיה, עדיף session

Art Watch 18-08-06 15:08

ציטוט:

נכתב במקור על ידי eLad
מיותר לרשום עוגיה, עדיף session

גם אפשרות :)

Alon.R 18-08-06 21:06

תודה תומר על ההסבר.

אני ישקול את שני האפשרויות שלי, אחת הרעיון שעלה לי אחד הקטע של הHEADER.
נראים לי הכי יעילים, תודה לכולם.

yaniv0x 18-08-06 21:18

אתה יכול להעביר פשוט המון המון המון פוסטים,
ואז מי שילחץ F5 יקרוס לו הדפדפן :D


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

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