Inlocuire functie eregi !

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
djantonik
Mesaje:21

Inlocuire functie eregi !

Salut!
De cateva saptm ma chinui la un script prin care la fiecare vizitator al unei pagini sa i se salveze ,intr-o baza de date, tipul sistemului de operare. Toate bune si frumoase, am facut acest script a mers o perioada dupa care imi apar erori de genu :
Deprecated: Function eregi() is deprecated in C:\xampp\htdocs\form\ip\index.php on line 31
Am inteles functia eregi a fost deprecata ... ideeea e cum sa o inlocuiesc , defapt cu ce ?
Am citit pe niste site-uri si chiar si pe localhost ca e recomandat inlocuirea cu preg_match, OK !

INLOCUIM !
function os($sistem_operare) {
$sisteme = array (
'Windows 95' => 'Windows 95||(Win95)||(Windows_95)',
'Windows 98' => '(Windows 98)||(Win98)',
'Windows 2000' => '(Windows NT 5.0)||(Windows 2000)',
'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
'Windows Vista' => '(Windows NT 6.0)|(Windows Vista)',
'Windows 7' => '(Windows NT 7.0)|(Windows 7)',
'Linux'=>'(Linux)|(X11)',
'Macintosh'=>'(Mac_PowerPC)|(Macintosh)'
);

foreach($sisteme as $os=>$contine)
if(eregi($contine, $sistem_operare)) // INLOCUIRE >>>>> if(preg_match($contine, $sistem_operare))
return $os;

return $sistem_operare;
}
si acum rezultatul ...
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:\xampp\htdocs\form\ip\index.php on line 31

Warning: preg_match() [function.preg-match]: Unknown modifier '|' in C:\xampp\htdocs\form\ip\index.php on line 31
Cum as putea rezolva aceasta problema ???
Învaţă ce iţi trebuie, nu ce trebuie !!

MarPlo Mesaje:4343
Salut
Pentru functiile "preg_..." (preg_match, preg_replace, ...) formula tiparului RegExp se adauga intre caractere /.../
- in plus, unde e "||" ar trebui "|".
Incearca array-ul $sisteme asa:

Cod: Selectaţi tot

$sisteme = array (
'Windows 95' => '/(Windows 95)|(Win95)|(Windows_95)/i',
'Windows 98' => '/(Windows 98)|(Win98)/i',
'Windows 2000' => '/(Windows NT 5.0)|(Windows 2000)/i',
'Windows XP' => '/(Windows NT 5.1)|(Windows XP)/i',
'Windows Vista' => '/(Windows NT 6.0)|(Windows Vista)/i',
'Windows 7' => '/i(Windows NT 7.0)|(Windows 7)/i',
'Linux'=>'/(Linux)|(X11)/i',
'Macintosh'=>'/(Mac_PowerPC)|(Macintosh)/i'
);
- /i determina ca sa nu faca diferenta intre majuscule si litere mici.

djantonik Mesaje:21
Din pacate nu-mi merge nici asa.
Notice: Undefined variable: os in C:\xampp\htdocs\form\ip\index.php on line 143
Acesta este mesajul ce-mi apare.

Ce pot face ?
Învaţă ce iţi trebuie, nu ce trebuie !!

MarPlo Mesaje:4343
Am testat si functioneaza.
Problema e alta, la linia 143 in script e folosita o variabila nedefinita. Variabila $os, care e definita in interiorul functiei nu e valabila si in afara ei.

djantonik Mesaje:21
Multimesc pentru functia de mai sus, merge perfect !

Daca as dori sa folosesc cifre in aceasta functie , cum fac ?
De exemplu vreau sa-mi descopere atunci cand folosesc o versiune de browser,
-Internet Explorer (daca e o versiunea prea veche sau prea noua)
sau
-Internet Explorer 9 (atunci cand folosec IE9)
Sau de exeomplu la Mozilla Firefox, sunt mai multe versiune V3.
Vreau sa-mi aparare :
- Mozilla Firefox (cand folosesc o versiune mai veche de V3)
sau
- Mozilla Firefox 3.5 (cand folosesc Mozilla de versiuni V3.5 )
sau
- Mozilla Firefox 4.2 (cand folosesc Mozilla de versiuni V4.2 )
Învaţă ce iţi trebuie, nu ce trebuie !!

MarPlo Mesaje:4343
Nu prea merge la functia de sus, sau nu ma pricep. Trebuie facut un alt Array $sisteme cu tipurile de browsere, pt. fiecare versiune, dupa modelul celui de sus 'raspuns_afisat'=>'/(tip_browser)/i', cate o astfel de pereche pt. fiecare versiune.

djantonik Mesaje:21
Problema e ca mie imi apare o anumita eroare :
Warning: preg_match() [function.preg-match]: Unknown modifier '3' in C:\xampp\htdocs\form\ip\index.php on line 77
....eroare pentru fiecare cifra pe care o gaseste...
Warning: preg_match() [function.preg-match]: Unknown modifier '7' in C:\xampp\htdocs\form\ip\index.php on line 77
iar codul este in felul urmator :
function brows($brows) {
$browss = array (
'Internet Explorer 10' => '/(MSIE 10)/i',
'Internet Explorer 9' => '/(MSIE 9)/i',
'Internet Explorer' => '/(MSIE)/i',
'Mozilla Firefox 3.7' => '/(Firefox/3.7)/i',
'Mozilla Firefox 3.6' => '/(Firefox/3.6)/i',
'Mozilla Firefox 3' => '/(Firefox/3)/i',
'Opera 11' => '/(Version/11)|(Opera)/i' ,
'Opera 10' => '/(Version/10)|(Opera)/i' ,
'Opera' => '/(Version)|(Opera)/i' ,
'Netscape 10' => '/(Navigator/10)/i',
'Netscape 9' => '/(Navigator/9)/i',
'Netscape' => '/(Navigator)/i',
'RockMelt ' => '/(RockMelt)/i',
'Google Chrome 9' => '/(Chrome/9)/i',
'Google Chrome 8' => '/(Chrome/8)/i',
'Google Chrome' => '/(Chrome)/i',
'Safari' => '/(Safari)/i');
foreach($browss as $brow=>$pattern)
if(preg_match($pattern, $brows))
return $brow;

return $brows;
}
Ce as putea face ?
Învaţă ce iţi trebuie, nu ce trebuie !!

MarPlo Mesaje:4343
La expresia RegExp, daca vrei sa adaugi caracterul "/" intre paranteze rotunde sau patrate, trebuie adaugat in fata lui caracterul "\".
De exemplu:
unde este '/(Firefox/3.7)/i'
ar trebui '/(Firefox\/3.7)/i'
- La fel pentru restul, unde e "/" simplu in paranteze.