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

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

SniR-S 21-05-10 18:21

PHP CHECKBOX - נושא קצת מורכב ובעייתי
 
אני יושב על זה כמה שעות כבר ולא עולה לי לראש כלום,
יש לי את הקוד הבא:
HTML קוד:

                <td><input type="checkbox" name="permissions[]" value="1|" /> כללי</td>
                <td><input type="checkbox" name="permissions[]" value="2|" /> הגדרות אתר ושרת</td>
                <td><input type="checkbox" name="permissions[]" value="3|" /> הודעות ומשוב</td>
                <td><input type="checkbox" name="permissions[]" value="5|" /> כתבות</td>

אני רוצה לקבל את הנתונים בצורה הבאה "1|2|3|5|"
ניסיתי עם כל מיני דרכים, foreach, explode, implode, while
הצלחתי להשיג את הנתונים בצורה שאני רוצה
עם while ו foreach אבל לא הצלחתי להוציא אותם מחוץ ללולאות.

SniR-S 21-05-10 19:24

הסתדרתי, תודה.

Ori The Man 22-05-10 09:51

תספר לכולם איך חחח,שאחרים שיתקלו בבעיה ידעו גם איך

SniR-S 22-05-10 10:35

PHP קוד:

    $per "";
    foreach (
$permissions as $key => $value) {
        
$per .= $value;
    } 


הגדרתי את המשתנה $per כריק, בשביל להשתמש בו בלולאה..
ביצעתי לולאה (foreach) על כל התיבות שהתקבלו בטופס ומכל אחד לקחתי את התוכן למשתנה $value
שמתי למשתנה per אופרטור נקודה כדי שיתן את כל הנתונים שהתקבלו
מהשדות טקסט ולא רק אחד .., מן הסתם הוא חיבר אותם ועשה אותם בצורה הזו "1|2|3|5|"..
וזהו בגדול, זה מה שעשיתי כדי להוציא את כל הנתונים .


--- מה שאני כותב עכשיו זה כבר משהו אחר ---
__________________________________________
אבל יש לי בעיה, לא הגעתי עדיין למה שאני צריך.
נניח שיש לי את המשתנה $per שהוא בעצם מערך,
איך אני יכול לבדוק אם מה שיש בו שווה לאחד מהערכים "1,2,3,5"
מבלי להשתמש בו בצורה הבאה:
PHP קוד:

$per['0'] == 1
$per
['1'] == 2
$per
['2'] == 3
$per
['3'] == 5
// אלא שיהיה ככה
$per == 2
$per 
== 1
$per 
== 

ש- $per יוכל להיות שווה לכל אחד מן הערכים שיש במערך (בתוכו) [1,2,3,5]..
מקווה שמישהו הבין אותי ויוכל לעזור לי, כי זה קצת מסובך להסביר את זה, אבל ניסיתי בצורה הכי טובה שאני יכול..:-)

אדיר 22-05-10 10:50

למה שלא תשאיר את מה שאתה מקבל כמערך ותבדוק אם הערך קיים שם ע"י in_array?‏↳‏
וד"א תוריד את הקווים האלה שם..

SniR-S 22-05-10 11:09

אני רוצה לבדוק אם יש למשתמש X הרשאות ל X, Y ו Z נגיד..
יש לי את הקוד הבא, שלוקח את המשתמש שמחובר ומוציא את ההרשאות שלו,
זה הקוד:
PHP קוד:

function getUserPer($id) {
    
$query mysql_query("SELECT permissions FROM admins WHERE id = '$id'");
        
$result mysql_fetch_assoc($query);
        
$permissions $result['permissions'];
    
$permissions explode("|"$permissions);

    return 
$permissions;
}
    
$id $_COOKIE['id'];
$per getUserPer($id); 

ההרשאות במסד שמורים בתבנית הבאה - "1|2|3|4|5|6|7|8|9|10"...
עכשיו אני רוצה לבדוק איזה הרשאות יש למשתמש המחובר ובהתאם להציג לו
את הפרטים שיש לו גישה אליהם ..


נ.ב
לגבי ה | (קווים האלה) ב- value של ה checkbox אני אוריד אותם
זה זמני, אני אשתמש ב implode אחר כך כדי להוסיף אותם לפני שהנתונים נכנסים למסד..

Itay 22-05-10 14:06

כמו שאמרו פה - אתה יכול להשתמש ב-in_array
אבל לדעתי יותר פשוט ויחסוך לך קוד - פשוט תשתמש ב-strstr על הערך מהבסיס נתונים, בלי להפוך אותו למערך..
אתה יכול גם להשתמש ככה בתו שהכנסת לפני כדי לדעת שמדובר נגיד במספר 1 ולא במספר 10

SniR-S 23-05-10 15:43

אוקי לא הצלחתי, לא הלך לי, ניסיתי כל מיני דרכים, כל מיני פונקציות, וגם עם מה שהצעתם in_array ו strstr ועוד ..

למישהו יש רעיון איך להשוות נתונים ?
אם יש לי טבלה של משתמשים במסד, ויש בה שדה של הרשאות,
ההרשאות הם בתבנית הבאה "1|2|3|4|5|6|7|8|9|10"
לכל משתמש יש הרשאות שונות, זאת אומרת יכול להיות לאחד את כל ההרשאות
ולמשתמש אחר רק "1|2|3|4|5" או "1|2|5|7"...

מה שאני צריך לעשות, זה לבדוק אם יש לכל משתמש הרשאה X
לא הצלחתי ניסיתי עם כל מיני דרכים, גם לולאות כמו שכתבתי כבר..
בסך הכל צריך להשוות,
משהו בסגנון הזה
PHP קוד:

if ($per == 1) {
  echo 
"יש הרשאה 1";
}

if (
$per == 10) {
  echo 
"יש הרשאה 10";


למישהו יש רעיון איך לעשות את זה?, או איזה דרך מסויימת ..?

Itay 23-05-10 16:20

PHP קוד:

if(strstr($prems$number."|"))
      echo 
$number." found"

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

SniR-S 24-05-10 12:15

זה לא טוב עם strstr, אני יכול לבנות פונקציה שתבדוק אם יש פרמטר מסויים לפני או אחרי פרמטר אחר
אבל זה לא עוזר לי, כי לאחד יכול להיות הרשאות "1|2|3" ולאחר "2|5|9"..

RS324 24-05-10 12:52

נניח שלאזור מסויים אתה רוצה לדעת לאיזה משתמשים יש הרשאה
(נניח שהאזור הוא 5)
אז אתה יכול להשתמש בפונקציה של MYSQL שנקראת FIND_IN_SET
שהיא מחפשת בדיוק בסטרינג כמו שלך (אבל מומלץ להשתמש ב פסיקים ולא בקו וגם להגדיר את השדה כ SET לשיפור ביצועים)

עכשיו אם יש לך USERINFO מסויים פשוט תעשה EXPLODE ל , שזה יהפוך להיות מערך ותעשה בדיקה באמצעות IN_ARRAY זה הכל (אם לא עובד לך כנראה עשית משהו לא טוב בדרך).

ASTeam 24-05-10 15:57

PHP קוד:

if( ! in_array("$the_variable",$the_array) ) 

    exit(
"Sorry, but your account is not allowed to enter this file"); 



SniR-S 27-05-10 20:24

משום מה זה לא עובד
PHP קוד:

function getUserPer($id) {
    
$query mysql_query("SELECT permissions FROM admins WHERE id = '$id'");
        
$result mysql_fetch_assoc($query);
        
$permissions $result['permissions'];
    
$permissions explode("|"$permissions);

    return 
$permissions;
}
    
$id $_COOKIE['id'];

function 
is_Access($access) {
    
$per getUserPer($id);
        if (
in_array($access$per)) {
            
$access "ok";
        } else {
            
$access "faild";
        }
    return 
$access;


וזה כן עובד:
PHP קוד:

function getUserPer($id) {
    
$query mysql_query("SELECT permissions FROM admins WHERE id = '$id'");
        
$result mysql_fetch_assoc($query);
        
$permissions $result['permissions'];
    
$permissions explode("|"$permissions);

    return 
$permissions;
}
    
$id $_COOKIE['id'];

function 
is_Access($access) {
    
$per = array('1''2''3''4''5''6''7''8''9''10');
        if (
in_array($access$per)) {
            
$access "ok";
        } else {
            
$access "faild";
        }
    return 
$access;


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

ASTeam 29-05-10 21:04

כי אין משתנה id בפונקציה השניה..
אם המשתנה id הוא חלק מהמחלקה אתה צריך לקרוא לו כך -
PHP קוד:

$this->id 

ואם הוא לא במחלקה, בזימון של הפונק' אתה צריך לכתוב אותו
(לשנות את
PHP קוד:

function is_Access($access) { 

ל -
PHP קוד:

[COLOR=#007700]function is_Access($access, $id) { [/COLOR]
[COLOR=#007700][/COLOR] 


SniR-S 31-05-10 15:20

זה לא מה שאני צריך..
הבעיה שלי היא זאת:
יש לי במסד שדה permissions שהנתון שמאוחסן בו הוא "1|2|3|4|5|6|7|8|9|10"
(זה יכול להיות גם אחרת, אבל זאת התבנית)
עכשיו אני צריך לייצא את זה כמערך שיצא בצורה כזאת:
PHP קוד:

$per = array('1''2''3''4''5''6''7''8''9''10'); 

ניסיתי עם explode אבל לא הלך משום מה זה לא עבד,
תוכלו לראות את הדוגמה למעלה בהודעה הקודמת שלי.

RS324 31-05-10 16:41

תעשה PRINT $result['permissions'];
יש מצב שאתה נכשל בשאילתא עצמה והוא לא מחזיר לך כלום...

SniR-S 31-05-10 18:12

אין בעיה בשאילתא, לפני ה explode הוא מוציא לי את הנתונים שיש בשדה permissions
אחרי ה explode הוא כותב לי Array (מערך).


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

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