/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Fejl i preg_match()
Fra : Erik Ginnerskov


Dato : 02-07-07 21:24

Hej NG

Jeg sad lige og skulle teste noget andet i forbindelse med en mailfunktion
og fik så disse fejlmeldinger:

Warning: preg_match() [function.preg-match]: Delimiter must not be
alphanumeric or backslash in /xxx/xxx/xxx.dk/public_html/sender.php on line
16

Fatal error: Call to undefined function preg_matc() in
/xxx/xxx/xxx.dk/public_html/sender.php on line 17

Det drejer sig om disse kodelinjer:

if (isset($_POST['submit'])) {
if ((preg_match("http/i", $_POST['name'])) //linje 16
or (preg_matc("http/I", $_POST['email']))) { //linje 17
header ("Location: blokeret.php");
exit;
} else {

Det skulle ellers være en formulering, jeg havde lært her i gruppen. Hvorfor
får jeg de fejl?

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk



 
 
Martin (02-07-2007)
Kommentar
Fra : Martin


Dato : 02-07-07 21:27

Erik Ginnerskov wrote:
> Hej NG
>
> Jeg sad lige og skulle teste noget andet i forbindelse med en mailfunktion
> og fik så disse fejlmeldinger:
>
> Warning: preg_match() [function.preg-match]: Delimiter must not be
> alphanumeric or backslash in /xxx/xxx/xxx.dk/public_html/sender.php on line
> 16

> if ((preg_match("http/i", $_POST['name'])) //linje 16
> or (preg_matc("http/I", $_POST['email']))) { //linje 17

Som sagt mangler du en demiliter, som skal enten være alphanumerisk
eller backslash - du har ingen.

Du kan evt. prøve med
preg_match("/http/i"
Hvis ikke din skråstreg efter http skal validere et eller andet, så skal
du prøve med fx.
preg_match("@http/@i"
eller lign. :)

Erik Ginnerskov (03-07-2007)
Kommentar
Fra : Erik Ginnerskov


Dato : 03-07-07 16:10

Martin wrote:

> Som sagt mangler du en demiliter, som skal enten være alphanumerisk
> eller backslash - du har ingen.
>
> Du kan evt. prøve med
> preg_match("/http/i"

Det har jeg prøvet, det fjernede fejlmeddelelsen fra php-parseren. Nu får
jeg bare besked på, at

"E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!"

- hvilken er en i scriptet indbygget fejlmeddelelse. Jeg har lagt scriptet
ud på http://hjemmesideskolen.dk/usenet/sender_php.txt

De førhen fejludløsende linjer er nu - uden sideheader m.m. ændret til 3 og
4. Jeg fandt forresten selv fejlen i linje 4 (før 17) - en simpel stavefejl.

> Hvis ikke din skråstreg efter http skal validere et eller andet, så
> skal du prøve med fx.
> preg_match("@http/@i"

Det var da meningen, at der skulle tjekkes for ulovligt input i name og
email.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk



Martin (04-07-2007)
Kommentar
Fra : Martin


Dato : 04-07-07 10:57

Erik Ginnerskov wrote:
>> Hvis ikke din skråstreg efter http skal validere et eller andet, så
>> skal du prøve med fx.
>> preg_match("@http/@i"
>
> Det var da meningen, at der skulle tjekkes for ulovligt input i name og
> email.
>

Istedet for at tænde reg exp motoren, så kan du få samme resultat med

if(stripos($name,'http')===FALSE) echo 'Alt OK!';
else echo 'http er fundet i strengen';

Bemærk at stripos først er fra PHP 5.x men så kan du bruge

if(strpos(strtolower($name),'http')===FALSE) ...

Eller du kan lave en
if(strpos($name,'http')===FALSE && strpos($name,'HTTP')===FALSE) echo
'Alt ok';
else echo 'fejl';

Erik Ginnerskov (04-07-2007)
Kommentar
Fra : Erik Ginnerskov


Dato : 04-07-07 21:40

Martin wrote:

> Eller du kan lave en
> if(strpos($name,'http')===FALSE && strpos($name,'HTTP')===FALSE) echo
> 'Alt ok';
> else echo 'fejl';

Kan det hele ikke vendes om sådan:

!strpos($_POST['name'], "http") &&
!strpos($_POST['name'], "HTTP") &&
!strpos($_POST['email'], "http") &&
!strpos($_POST['email'], "HTTP") {
header ("Location: blokeret.php");
exit;
} else {

.... altså blokere, hvis indholdet er ulovligt og fortsætte
scriptafviklingen, hvis der ikke er noget forbudt?

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk



Michael Zedeler (04-07-2007)
Kommentar
Fra : Michael Zedeler


Dato : 04-07-07 23:46

Erik Ginnerskov wrote:
> Martin wrote:
>
>> Som sagt mangler du en demiliter, som skal enten være alphanumerisk
>> eller backslash - du har ingen.
>>
>> Du kan evt. prøve med
>> preg_match("/http/i"
>
> Det har jeg prøvet, det fjernede fejlmeddelelsen fra php-parseren. Nu får
> jeg bare besked på, at
>
> "E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!"
>
> - hvilken er en i scriptet indbygget fejlmeddelelse. Jeg har lagt scriptet
> ud på http://hjemmesideskolen.dk/usenet/sender_php.txt

Jamen så er det jo nok din send-post funktion, der fejler. Det har da
ikke noget med de regulære udtryk at gøre.

Pil send-post-koden ud og test den separat. Så finder du fejlen.

Iøvrigt synes jeg at det er et hæderligt forsøg du gør for at indentere
koden. Det er desværre bare ikke konsekvent nok. Det ville være en
fordel for dig selv hvis du vænner dug til at indentere konsekvent.

Mvh. Michael.

Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste