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

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

Elad-A 16-07-06 14:34

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

BlueNosE 16-07-06 14:36

תעשה ככה, שליפה מהמסד בעת שליחת הודעה:
כל ההודעות של המשתמש UID (USER ID) שגדולות מtime()+30.
אם MYSQL_NUM_ROWS שווה ל0 תמשיך, אחרת תציג אזהרה.

Tomer 16-07-06 14:40

PHP קוד:

$sql mysql_query("SELECT time FROM users_msg_tbl WHERE time>=time()+30");
if (
mysql_num_rows($sql) != 0) die("עליך להמתין 30 שניות מרגע פרסום ההודעה"); 


Elad-A 16-07-06 14:42

עשיתי דבר כזה:
PHP קוד:

$query mysql_query("select date from topics ORDER BY `date` DESC LIMIT 0,1") or die(mysql_error()); 
$r mysql_fetch_array($query); 
$date $r["date"]; 

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

$date $r["date"]; 
$date2 date("d-m-Y H:is");
 
$x $date2-$date
echo 
$x

אבל זה תמיד מחזיר 0.
מה הבעיה?
עריכה:
תומר גם מה שרשמת לא עובד.

Tomer 16-07-06 14:55

ציטוט:

נכתב במקור על ידי Elad-A
עשיתי דבר כזה:
PHP קוד:

$query mysql_query("select date from topics ORDER BY `date` DESC LIMIT 0,1") or die(mysql_error()); 
$r mysql_fetch_array($query); 
$date $r["date"]; 

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

$date $r["date"]; 
$date2 date("d-m-Y H:is");
 
$x $date2-$date
echo 
$x

אבל זה תמיד מחזיר 0.
מה הבעיה?
עריכה:
תומר גם מה שרשמת לא עובד.

מה שרשמתי זה בהתבסס על זה שבערך time יש לך את זמן פרסום ההודעה במצב של time() ולא במצב של תאריך.. הכוונה ל UNIX Style Time ולא ל 07:24:54

eLad 16-07-06 14:57

זה רק אני או שמיותר להשתמש במסד נתונים כאן?

Elad-A 16-07-06 14:59

שיניתי ל time() ולא אומר שגיאה עדיין.

sUP 16-07-06 15:01

ציטוט:

נכתב במקור על ידי eLad
זה רק אני או שמיותר להשתמש במסד נתונים כאן?

אז נשמח לשמוע אלטרנטיבות אחרות ולהשכיל
|קורץ|

Elad-A 16-07-06 15:17

איך אפשר בלי מסד באמת??

Balrog 16-07-06 15:20

אני כרגע חושב שכן צריך מסד (לא סומך על קוקי לעניין הזה)
מה שכן, יכול להיות שזה צריך להיות time()-30 (במקום +30)?

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

$sql = mysql_query("SELECT time FROM users_msg_tbl WHERE time>=time()-30");
if (mysql_num_rows($sql) != 0) die("עליך להמתין 30 שניות מרגע פרסום ההודעה");


eLad 16-07-06 15:40

ציטוט:

נכתב במקור על ידי sUP
אז נשמח לשמוע אלטרנטיבות אחרות ולהשכיל
|קורץ|

למה לא להשתמש נניח ב session ולשמור בו שני דברים -

1. נניח נושא ההודעה (או התוכן)
2. שעת שליחת ההודעה

לפני הוספת תגובה בפורום, בודקים ב session אם נושא ההודעה שהגולש רוצה להוסיף זהה לנושא ההודעה שב session - ופועלים בהתאם ..

אם בכל זאת רוצים לתת הפרש חצי דקה בין הודעה להודעה - לבדוק פשוט לפי השעה שב session אם עברה יותר מחצי דקה. אם עברה - לאפשר כתיבה ולמחוק את ה session ..

Tomer 16-07-06 15:48

ציטוט:

נכתב במקור על ידי eLad
למה לא להשתמש נניח ב session ולשמור בו שני דברים -

1. נניח נושא ההודעה (או התוכן)
2. שעת שליחת ההודעה

לפני הוספת תגובה בפורום, בודקים ב session אם נושא ההודעה שהגולש רוצה להוסיף זהה לנושא ההודעה שב session - ופועלים בהתאם ..

אם בכל זאת רוצים לתת הפרש חצי דקה בין הודעה להודעה - לבדוק פשוט לפי השעה שב session אם עברה יותר מחצי דקה. אם עברה - לאפשר כתיבה ולמחוק את ה session ..

כניסה ויציאה מהדפדפן יעקפו את זה.. מסד נתונים שיש לו פשוט עוד סעיף אחד של last comment בטבלת משתמשים יעשה את העבודה.

eLad 16-07-06 15:50

ציטוט:

נכתב במקור על ידי Atom-Bomb
כניסה ויציאה מהדפדפן יעקפו את זה.. מסד נתונים שיש לו פשוט עוד סעיף אחד של last comment בטבלת משתמשים יעשה את העבודה.

כניסה ויציאה מהדפדפן גם לוקחות זמן (אתה יודע |קורץ|), אפשר לשכלל את הבדיקה ולהוסיף גם IP.

לדעתי אין טעם בכזה עניין קטן לגשת למסד נתונים - בזבוז של משאבים

Elad-A 16-07-06 20:20

נו יש הצעות?

בניה 16-07-06 20:35

ציטוט:

נכתב במקור על ידי Elad-A
נו יש הצעות?

ב"ה


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

Elad-A 16-07-06 20:39

צריכים להיות רשומים. איך אני מאמת אימייל של ספקיות בלבד?
ואיך אני נותן קוד רנדומלי לכל משתמש שאיתו הוא צריך לאמת?

בניה 16-07-06 20:42

ב"ה


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

Elad-A 16-07-06 20:44

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

בניה 16-07-06 20:54

ב"ה


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

Elad-A 16-07-06 20:59

אממ אני ינסה ויחזיר פה תשובה, תודה בניה.

HaMashiah 16-07-06 22:20

אולי תעשה שלא יהיה אפשר ללחוץ על הכפתור רק לאחר שלושים שניות
אני מאמין שאפשר לעשות את זה באגקס

Itay 17-07-06 06:05

ציטוט:

נכתב במקור על ידי HaMashiah
אולי תעשה שלא יהיה אפשר ללחוץ על הכפתור רק לאחר שלושים שניות
אני מאמין שאפשר לעשות את זה באגקס

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

ofek_golan 17-07-06 06:55

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


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

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