PHP צריך עזרה קטנה בphp ו sql

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

תודה
 

UU

משתמש סופר מקצוען
הנדסת תוכנה
לא עשיתי את זה אף פעם ככה
אבל לדעתי אפשר עם עמודה שהיא unique ולתפוס את השגיאה שה-MYSQL זורק עם TRY ו-CATCH בשביל לנסות לרנדמל משהו אחר
והסיבה שלא עשיתי את זה כך - כי העדפתי את הדרך הארוכה (לשלוף מה-DB שום את המספר המרונדמל ולבדוק שהוא לא קיים) והבטוחה.
אבל יתכן מאד שהיא לא הדרך הנכונה
 
לא עשיתי את זה אף פעם ככה
אבל לדעתי אפשר עם עמודה שהיא unique ולתפוס את השגיאה שה-MYSQL זורק עם TRY ו-CATCH בשביל לנסות לרנדמל משהו אחר
והסיבה שלא עשיתי את זה כך - כי העדפתי את הדרך הארוכה (לשלוף מה-DB שום את המספר המרונדמל ולבדוק שהוא לא קיים) והבטוחה.
אבל יתכן מאד שהיא לא הדרך הנכונה
דווקא נראת שיטה טובה מה שהצעת. השאלה איך עושים את זה. אם נגיד הוא לא קיים אז איך בכל סוגי הרנדומל , ובא נלך על
קוד:
rand(111,999);
הוא ידע לבחור דווקא משהו שלא קיים הרי זה רנדומל ולא קשור לmysql.

ואם הוא קיים אז הוא נגיד יחפש קוד אחר אבל.... איך הוא יחזור חזרה לפעולה שהסבב השני לא קיים? הרי הפעולה רצה פעם אחת!!!! ניסיתי עם else ולעשות goto אבל זה פונקצייה שבכלל לא עובדת.



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

UU

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

UU

משתמש סופר מקצוען
הנדסת תוכנה
לא יודעת מה אתה יודע ומה לא, ניקח בחשבון שמה שאמרתי לא מובן
אז זה מה שצריך לדעת בשבילו:
חפש mysql unique
חפש php try catch
תכתוב פונקציה שעושה השמה לעמודה שהיא יוניק ב-DB, תפוס את השגיאה של הכפילות
ותקרא לפןנקציה שוב במידה והשגיאה נתפסה
תדאג שיהיה דרך לעצור את הפונקציה במקרה שהאין עוד את מה להכניס שהוא לא יוניק.
בהצלחה
(אפשר לכתוב פה את הקוד הבסיסי, ואוכל לעזור לתקן במקרה הצורך)
 

סוס יאור

משתמש רשום
כמו שכתב @aaron30 אפשר להשתמש בפונקציה UUID המבוססת על חישוב ID רנדומלי לפי מיקרו שניות הבעיה כמו שכבר מובא שם שאם יהיו 2 בקשות משני משתמשים שונים באותה מיקרו שנייה תיווצר בעיה ולכן זה לא בטיחותי אני ממליץ פשוט לעשות לולאת WHILE שבודקת במסד אם הID הנוכחי כבר קיים ומייצרת חדש במידה וכבר קיים ושוב בודקת אם קיים זה לא מסובך כלל ואם משתמשים בפונקציה UUID הסבירות שיצא לשני משתמשים באותה מיקרו שנייה הוא קטן וגם אם זה יקרה תוך כמה מאיות שניה כבר יהיה ID חדש
 
  • תודה
Reactions: UU

Esther_h

משתמש פעיל
D I G I T A L
איך אני יוצר נגיד טוקן/רצף של מספרים ושומר אותם במסד נתונים וליצור מצב שאם ירצה לתת שוב את אותו רנדומל הקוד אז הוא לא יתן אלא יחפש שוב קוד אחר?(כמו שיש עם שם משתמש או אמייל קיים כבר...)

תודה
יש אפשרות לעשות ע״י התאריך שמוכנס באותו שניה יחד עם שרשור של ip של המשתמש, ואפילו להוסיף לזה איזה רצף רנדומלי של ספרות ותווים הסיכויים שיצאו לך שתיים זהים שואף ל-0.
אבל העצה שנתנו לך קודם מעולה, ע״י יוניק לעמודה ככה הוא לא יוכל להכניס פעמיים שתיים זהים, לא יודעת אם הוא שולח ממש שגיאה אבל אם זה בהוספת שורה אז יש אפשרות לבדוק אם השורה נוספה ע״י קבלת ה-id שנוצר.
בנוסף אם לכל רצף כזה מוסיפים שורה נפרדת יש אפשרות להחליט על איזה רצף כמו הזמן ולהוסיף לזה את id השורה אחרונה שנוספה ככה זה יהיה בטוח יחידני
אם כי לא הכי מומלץ על כל הוספת שורה להוציא סתם נתונים מהמסד נתונים, זה קצת מלוכלך...
 

אולי מעניין אותך גם...

הפרק היומי

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


תהילים פרק קכא

א שִׁיר לַמַּעֲלוֹת אֶשָּׂא עֵינַי אֶל הֶהָרִים מֵאַיִן יָבֹא עֶזְרִי:ב עֶזְרִי מֵעִם יְהוָה עֹשֵׂה שָׁמַיִם וָאָרֶץ:ג אַל יִתֵּן לַמּוֹט רַגְלֶךָ אַל יָנוּם שֹׁמְרֶךָ:ד הִנֵּה לֹא יָנוּם וְלֹא יִישָׁן שׁוֹמֵר יִשְׂרָאֵל:ה יְהוָה שֹׁמְרֶךָ יְהוָה צִלְּךָ עַל יַד יְמִינֶךָ:ו יוֹמָם הַשֶּׁמֶשׁ לֹא יַכֶּכָּה וְיָרֵחַ בַּלָּיְלָה:ז יְהוָה יִשְׁמָרְךָ מִכָּל רָע יִשְׁמֹר אֶת נַפְשֶׁךָ:ח יְהוָה יִשְׁמָר צֵאתְךָ וּבוֹאֶךָ מֵעַתָּה וְעַד עוֹלָם:
נקרא  1  פעמים

לוח מודעות

למעלה