|
| 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.
| |
|
|