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

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

MAORBARI 01-10-13 22:42

בעיה PREG_MATCH_ALL
 
זה הקוד שלי:

PHP קוד:

$sql "user_name = 'a2561-%^8*$#@aa' OR usermame='abc' AND userid > 5 AND userid<=8";
preg_match_all('/([\w\-]*)[\s]?[<>=]+[\s]?[\'"]?([\w]*)[\'"]?/i'$sql$matchesPREG_SET_ORDER);
print_r($matches); 

בעצם אני רוצה שהוא יחזיר לי ערך של KEY ואת ה VALUE שלו..
ז"א בסופו של דבר מערך ל SQL שהבאתי:
PHP קוד:

Array(
[
0] => Array        (
            [
0] => user_name 'a2561-%^8*$#@aa'
            
[1] => user_name
            
[2] => a2561-%^8*$#@aa
)
[
1] => Array        (
            [
0] => usermame='abc'
            
[1] => usermame
            
[2] => abc

[
2] => Array        (
            [
0] => userid 5
            
[1] => userid
            
[2] => 5

[
3] => Array        (
            [
0] => userid<=8
            
[1] => userid
            
[2] => 8
)


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

איציק ברבי 02-10-13 21:39

תוסיף ביטוי, שאם קיים % @ אז יזהה אותם ואם לא שלא יעשה כלום תלמד על הברחות .

MAORBARI 03-10-13 00:14

ציטוט:

נכתב במקור על ידי איציק ברבי (פרסם 882450)
תוסיף ביטוי, שאם קיים % @ אז יזהה אותם ואם לא שלא יעשה כלום תלמד על הברחות .

אני יודע הברחות וגם סידרתי את הבעיה ששיניתי את \w ל ^' ווכה כל מה שמחוץ לגרש..
עכשיו נוצרו לי שתי בעיות
הוא מחזיר לי ARRAY כזה:
PHP קוד:

Array
(
    [
0] => Array
        (
            [
0] => user_name 'a2561-%^8*$#@aa'
            
[1] => user_name
            
[2] => a2561-%^8*$#@aa
        
)

    [
1] => Array
        (
            [
0] => usermame='abc'
            
[1] => usermame
            
[2] => abc
        
)

    [
2] => Array
        (
            [
0] => userid AND userid<=8)
            [
1] => userid
            
[2] => AND userid<=8)
        )



ואם אני שם ' ב VALUE הוא חותך את ה VALUE עד הגרש.. ואני רוצה שאם הגרש היא מוברחת ב VALUE שישאיר אותה..
איך אני פותר את הבעיות?
זה הקוד החדש:
PHP קוד:

$sql "user_name = 'a2561-%^8*$#@aa' OR (usermame='abc' AND userid > 5 AND userid<=8)";
preg_match_all('/`?([\w]+)`?[\s]*[<>=]+[\s]*[\'"]?([^\'"]*)[\'"]?/i'$sql$matchesPREG_SET_ORDER);
print_r($matches); 

תודה!

DanielM 03-10-13 15:01

עדיין אקטואלי?

MAORBARI 03-10-13 15:16

ציטוט:

נכתב במקור על ידי DanielM (פרסם 882476)
עדיין אקטואלי?

כן אחי..


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

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