תיבות סימון

תיבות סימון

שלום. יש לי מספר משתנים שנשלפים ממסד נתונים. יש לי מסך שמציג כל משתנה בשורה חדשה. ליד כל שורה שכזאת יש לי כפתור רדיו שמשמש למחיקה של המשתנה מהמסד. אני רוצה להמיר את הבחירה בין כפתורי רדיו, לתיבות סימון (checkbox), ככה שאני אוכל למחוק כמה משתנים בפעם אחת. כרגע יש לי את השורה הבאה:
DELETE FROM birthsys WHERE id = '$id'​
כמו שאמרתי, $id נבחר על ידי כפתור רדיו. איזו פונקציה אני צריך לעשות בשביל שהשורה הנ"ל תוכל לטפל בכמה $id בו זמנית? תודה רבה!
 

lizard

New member
??? ???? ???? ?? ???? ??

?CHECKBOX ???? ????. ???? ?? ????? ?? ???? ????? ??? ?? ?? ???? ?????? ????? ????? ??????.
 

lizard

New member
אופס...מה שכתבתי זה

שאתה צריך לשים את הערך של הCHECKBOX בתוך מערך, אחרי זה לבדוק כמה ערכים יש במערך ועל פי זה למחוק מהבסיס נתונים ע"י לולאה.
 

אמיר ט

New member
HELL NO....

שום, אני ממש לא בעד OVERKILL של שימוש ב PHP עבור דברים שאפשר וצריך לעשות ב SQL, שהיא שפה כ"כ נפלאה ופשוטה, ועם זאת חזקה הרבה הרבה מעבר למה שהרבה אנשים מתארים לעצמם. מה גם, שעם כל הכבוד, המימוש של דברים שכביכול עושים אותו הדבר, ברמת SQL נעשה בצורה הרבה יותר יעילה. הנה דוגמא של איך עושים את זה באמת... וזה לקח לי בערך דקה למצוא :
DELETE FROM `table` WHERE `id` IN (142,156,168)​
פשוט, קל, ולעניין - והרבה יותר מהיר מכל פיתרון PHP שקיים בערך. אני לא רוצה שאנשים יחשבו שאני יורד עליהם בתשובות שלי, אבל מאחורי כל פתרון "חוראני" שמציעים חייב להיות פתרון טוב יותר. סה"כ מי שבונה את המערכות האלה, סביר מאד שנתקל באותם שאלות\בעיות ועשה להם פתרונות קצת יותר תשתיתיים מאשר תלוים בשפת הגישה. יום טוב.
 

אמיר ט

New member
ועל זה נאמר

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

איך אני משתמש בזה? IN (142,156,168) ? אני אשמח אם תוכל להסביר קצת יותר. תודה
 
ולמרות שלא הבנתי...

אני חושב שזה לא פותר לי את הבעיה.. (קצת מוזר להגיד כזה דבר אם אני לא מבין את מה שרשמת.. אבל בכל זאת
הרי בכפתורי רדיו, לכל כפתורי הרדיו יש את אותו שם משתנה, ולכל אחד ערך אחר. כלומר, נגיד שלכל כפתורי הרדיו יש את השם id. הכפתור רדיו הראשון יכיל את הערך אחד value=1. השני יכיל את הערך 2, השלישי 3 וככה הלאה. כשאני אבחר את הכפתור השני, המשתנה ID יקבל את הערך 2. כשאני רוצה להמיר את זה לתיבות בחירה (Checkbox), אז כל תיבת בחירה חייבת שיהיה לה שם אחר. וברגע שאני מסמן את התיבה, השם משתנה של התיבה, יקבל את הערך שמוגדר לו. אבל זה או עם מערך, או כמה משתנים. ולכן השורה שיש לי כרגע, מתאימה רק לכפתורי רדיו ולא לתיבות סימון. ופה הבעיה שלי. יכול להיות שמה שכתבת כן עוזר לי ופותר את הבעיה, פשוט לא הבנתי את הפעולה של ה in (125,142,234) תודה
 

giladznaor

New member
ננסה

שלום, אני די חדש לכל עסק הPHP, אבל בדיוק אתמול נתקלתי באותה בעיה. מה שעשיתי הוא בערך ככה: 1. כשאני מציג את הנתונים מהטבלה, אני נותן לכל CHECKBOX שם שהוא מספר הID שהוא מציג. בצורה זו, לכל CHECKBOX יש שם אחר. 2. כשאני רוצה למחוק/לעדכן את הטבלה, אני קודם לוקח מSQL רשימה של כל הID: SELECT (id) FROM users 3. אני עובר על כל הID, ובודק אם הCHECKBOX בשם הזה הוא "ON". אם כן, אני מוחק אותו! מקווה זה מסתדר
 

lizard

New member
הסברתי לך, אתה לא נותן שם

אחר לCHKBOX, אתה נותן לו אותו שם עם []. זה אומר לPHP שמדובר בעצם לא במשתנה רגיל אלא במערך. אחרי זה אתה בודק כמה אלמנטים יש במערך ועל פי זה עושה לולאה שמשרשרת לך את הנתונים. משהו כזה בערך:
$coma = ","; $MyArray = $_POST['CHKBOX']; for ($i=0,$i<count($MyArray);$i++){ if ($i = count($MyArray)-1){$coma ="";} $deleted_items .= $MyArray[$i].''.$coma; } $SQL = 'DELETE FROM tbl_name WHERE id_field IN('.$deleted_items.')';​
בערך ככה.
 
אוקיי.. אם הבנתי נכון, אז..

אם הבנתי נכון אז כל הקוד הזה בהנחה שהאיי די שכל צ'ק בוקס מקבל, הוא מ 1 ועד סוף המשתנים במסד נתונים בהתאמה. כלומר שהצ'ק בוקס הראשון האיי די שלו הוא 1, והשני הוא 2 וככה הלאה. האם צדקתי? אם כן, אז זה לא מתאים לי, כי ה ID של כל צ'ק בוקס הוא לא בהכרח בהתאמה למה שהיה קודם..
 

lizard

New member
נגיד שהשם של הCHECKBOX

הוא (כמה מפתיע) CHKBOX. אז בקוד שלך HTML שלך זה יראה משהו כזה:
<input typecheckbox name=CHKBOX[] value=_YOUR_VALUE>​
 
לא עובד..

זאת השורה שיש לי בטופס:
<input type="checkbox" name="CHKBOX[]" value="$id">​
השורה הזאת נמצאת מין הסתם בלולאת WHILE. וזה מה שיש לי במה שמעבד את הנתונים:
$coma = ","; $MyArray = $_POST['CHKBOX']; for ($i=0;$i<count($MyArray);$i++) { if ($i = count($MyArray)-1){$coma ="";} $deleted_items .= $MyArray[$i].''.$coma; } if (mysql_query ("DELETE FROM birthsys WHERE id IN('.$deleted_items.')"))​
מה שקורה זה כמה דברים: קודם כל, אם אני בוחר רק תיבת סימון אחת, אז משום מה יש פסיק אחרי המספר איי די במשתנה deleted_items והמחיקה לא מתבצעת. (אני לא מקבל שגיאה, אלא המחיקה פשוט לא מתבצעת) ואם אני בוחר בכמה תיבות סימון, אז רק האיי די האחרון נכנס למשתנה deleted_items, וגם אז המחיקה לא מתבצעת (שוב, אני לא מקבל שגיאה אלא פשוט המשתנה לא נמחק)
 

lizard

New member
אוקי, תנסה את זה:

$MyArray = $_POST['CHKBOX']; for ($i=0;$i<count($MyArray);$i++) { if ($i < count($MyArray)-1){$coma =",";}else{$coma ="";} $deleted_items .= $MyArray[$i].''.$coma; } if (mysql_query ("DELETE FROM birthsys WHERE id IN('.$deleted_items.')"))​
תעשה echo למשתנה deleted_items ולמשתנה SQL (תשתמש במשתנה ולא ישירות לmysql_query( ותגיד מה יוצא.
 
עובד חלקית

טוב אז הייתי צריך להוריד את הנקודות ב
DELETE FROM birthsys WHERE id IN('.$deleted_items.')​
(לפני ואחרי ה deleted_items) ואז זה באמת מחק, אבל רק את הid הראשון שהוא קיבל. למרות שהאקו של SQL היה נכון:
DELETE FROM birthsys WHERE id IN('812,886,1092')​
רק איי די 812 באמת נמחק מהמסד נתונים. אבל עצם העובדה שהוא באמת התחיל למחוק זה כבר שיפור עצום!
 

אמיר ט

New member
אולי...

איזה טיפוס נתונים ה id שלך ? אם הוא char\varchar אז כל ID צריך להיות "עטוף" במרכאות בודדות (') אם זה מספר (integer) אז לא צריך בכלל מרכאות -> (1,2,3) IN
 
וואלה עובד מעולה!!

תודה רבה לכל האנשים שעזרו לי בזה.. הכל עובד יופי טופי! שוב, תודה רבה!
 
למעלה