| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Debricated function Fra : Erik Ginnerskov | 
  Dato :  09-09-11 16:45 |  
  |  
 
            Til håndtering af data fra en mailformular har jeg disse koder:
  !eregi("\r",$_POST['name']) &&  // tjek, at der ikke er "vogn-retur" i 
 "navn"
  !eregi("\n",$_POST['name']) &&  // tjek, at der ikke er "linjeskift" i 
 "navn"
  !eregi("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i 
 "email"
  !eregi("\n",$_POST['email']))   // tjek, at der ikke er "linjeskift" i 
 "email"
 Men nu siger serveren, at eregi() er debricated. Jeg er blevet foreslået at 
 bruge preg_match() i stedet, men det kan jeg ikke få til at fungere.
  !preg_match("\r",$_POST['name']) &&  // tjek, at der ikke er "vogn-retur" i 
 "navn"
  !preg_match("\n",$_POST['name']) &&  // tjek, at der ikke er "linjeskift" i 
 "navn"
  !preg_match("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i 
 "email"
  !preg_match("\n",$_POST['email']))   // tjek, at der ikke er "linjeskift" i 
 "email"
 Hvad vil være den korrekte syntax for at tjekke for uønsket forekomst af 
 linjeskift og vognretur i et input?
 -- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
           Birger Sørensen (09-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  09-09-11 17:06 |  
  |  
 
            Erik Ginnerskov skrev:
 > Til håndtering af data fra en mailformular har jeg disse koder:
 >
 >  !eregi("\r",$_POST['name']) &&  // tjek, at der ikke er "vogn-retur" i 
 > "navn"
 >  !eregi("\n",$_POST['name']) &&  // tjek, at der ikke er "linjeskift" i 
 > "navn"
 >  !eregi("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i 
 > "email"
 >  !eregi("\n",$_POST['email']))   // tjek, at der ikke er "linjeskift" i 
 > "email"
 >
 > Men nu siger serveren, at eregi() er debricated. Jeg er blevet foreslået at 
 > bruge preg_match() i stedet, men det kan jeg ikke få til at fungere.
 >
 >  !preg_match("\r",$_POST['name']) &&  // tjek, at der ikke er "vogn-retur" i 
 > "navn"
 >  !preg_match("\n",$_POST['name']) &&  // tjek, at der ikke er "linjeskift" i 
 > "navn"
 >  !preg_match("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i 
 > "email"
 >  !preg_match("\n",$_POST['email']))   // tjek, at der ikke er "linjeskift" i 
 > "email"
 >
 > Hvad vil være den korrekte syntax for at tjekke for uønsket forekomst af 
 > linjeskift og vognretur i et input?
 (strpos($_POST['whatever'], "\r") === false) &&
 (strpos($_POST['whatever'], "\n") === false) && ...
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
           Asger-P (09-09-2011) 
         
	
            | Kommentar Fra : Asger-P | 
  Dato :  09-09-11 17:09 |  
  |   
            
 Hej Erik
 
 Jeg ved ikke en dyt om php, men hvis det var i C/C++ så
 ville jeg tjekke for all kontrol karakterer altså alle
 karakterer mindre end ' '
 
 seudo kode:
 
 Streng input;
 tæller inputpos, resultatPos;
 
 while( inputpos ikke har nået enden )
 {
     if( input[inputpos] >= ' ')
     {
         input[resultatPos] = input[inputpos];
         resultatPos += 1;
     }
     inputpos += 1;
 }
 if( resultatPos < inputpos )
     så sæt længden på input til resultatPos - 1;
 
 SÃ¥ er strengen rippet for alle kontrol karakterer
 \r \n \t osv.
 
 Venlig hilsen
 Asger-P
  
            
             |   |   
            
        
 
            
         
           Bertel Lund Hansen (09-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  09-09-11 23:41 |  
  |   |   |   
            
        
 
            
         
            Stig Johansen (12-09-2011) 
         
	
            | Kommentar Fra : Stig Johansen | 
  Dato :  12-09-11 08:16 |  
  |  
 
            Bertel Lund Hansen wrote:
 > Hvis man skal kode effektivt i PHP, skal man dog kende de
 > indbyggede funktioner (eller vide at de findes og hvor de kan
 > slås op).
 Eller lave dem selv, som man gør i andre scriptsprog ;)
 http://tuxradar.com/practicalphp/20/0/0
(Forudsætter dog at man har 'kontrol' over serveren).
 -- 
 Med venlig hilsen
 Stig Johansen
            
              |   |   
            
        
 
            
         
           Bertel Lund Hansen (09-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  09-09-11 18:06 |  
  |  
 
            Erik Ginnerskov skrev:
 > Til håndtering af data fra en mailformular har jeg disse koder:
 Overskuelig løsning:
 $unwanted = array ("\n","\r");
 $textstring=$_POST['name'].$_POST['email'];
 $clean=true;
 foreach ($unwanted as $char) {
      if (strpos($textstring,$char))!==false) {
         $clean=false;
         break;
 }
 > Hvad vil være den korrekte syntax for at tjekke for uønsket forekomst af 
 > linjeskift og vognretur i et input?
 Undgå altid regulære udtryk når de ikke ernødvendige. Og husk at
 man skal bruge 3 logiske tegn ved strpos() for ikke at få
 problemer - altså her ! = og =.
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
           Martin Larsen (09-09-2011) 
         
	
            | Kommentar Fra : Martin Larsen | 
  Dato :  09-09-11 21:23 |  
  |  
 
            Bertel Lund Hansen wrote:
 > Undgå altid regulære udtryk når de ikke ernødvendige.
 Kommer lidt an på definitionen af "nødvendig" ! I princippet kan de jo 
 altid undgås, men alternativet vil ofte være uønsket.
 Jeg vil snarere sige: Undgå regex når en simplere løsning er mulig.
 Denne definition har den fordel at det afhænger af programmøren: Jeg fx 
 nærmest drømmer i regex, så for mig vil det ofte være den simpleste løsning.
 I de allerfleste tilfælde betyder performance ingenting, det er primært 
 i tætte løkker etc. at det betyder noget.
 Men givet at de fleste har problemer med regex, er dit råd helt fint   
            
             |   |   
            
        
 
            
         
           Erik Ginnerskov (10-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  10-09-11 22:09 |  
  |  
 
            Bertel Lund Hansen wrote:
 > Overskuelig løsning:
 >
 > $unwanted = array ("\n","\r");
 > $textstring=$_POST['name'].$_POST['email'];
 > $clean=true;
 > foreach ($unwanted as $char) {
 >  if (strpos($textstring,$char))!==false) {
 >  $clean=false;
 >  break;
 > }
 Så (gammel kode):
 ____
 if (isset($_POST['submit']))
 {
  if (!empty($_POST['name']) && // tjek, at der er skrevet et navn
  !empty($_POST['email']) &&    // tjek, at der er skrevet i e-mail 
 adressefeltet
  strpos($_POST['email'], "@") &&     //Tjek, at der skrevet et @ et sted i 
 e-mail adressefeltet
  !empty($_POST['emne']) &&  // tjek, at der er skrevet et emne
  !empty($_POST['besked']) &&  // tjek, at der er skrevet en besked
 // her følger sikringen mod spambotter
  !strpos($_POST['name'], " http://hjemmesideskolen.dk") &&  // tjek, at dit 
 domæne ikke er skrevet i feltet "navn"
  !strpos($_POST['email'], " http://hjemmesideskolen.dk") && // tjek, at dit 
 domæne ikke er skrevet i feltet "email"
  !strpos($_POST['name'], "@") && // tjek, at der ikke er et @ i "navn"
  !eregi("\r",$_POST['name']) &&  // tjek, at der ikke er "vogn-retur" i 
 "navn"
  !eregi("\n",$_POST['name']) &&  // tjek, at der ikke er "linjeskift" i 
 "navn"
  !eregi("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i 
 "email"
  !eregi("\n",$_POST['email']))   // tjek, at der ikke er "linjeskift" i 
 "email"
 // er alt ok, fortsættes med afsendelse af mailen
 ____
 kan omskrives til (ny kode):
 ____
 if (isset($_POST['submit']))
 {
  if (!empty($_POST['name']) && // tjek, at der er skrevet et navn
  !empty($_POST['email']) &&    // tjek, at der er skrevet i e-mail 
 adressefeltet
  strpos($_POST['email'], "@") &&     //Tjek, at der skrevet et @ et sted i 
 e-mail adressefeltet
  !empty($_POST['emne']) &&  // tjek, at der er skrevet et emne
  !empty($_POST['besked']) &&  // tjek, at der er skrevet en besked
 // her følger sikringen mod spambotter
 !strpos($_POST['name'], " http://hjemmesideskolen.dk") &&  // tjek, at dit 
 domæne ikke er skrevet i feltet "navn"
  !strpos($_POST['email'], " http://hjemmesideskolen.dk") && // tjek, at dit 
 domæne ikke er skrevet i feltet "email"
  !strpos($_POST['name'], "@") && // tjek, at der ikke er et @ i "navn"
 $unwanted = array ("\n","\r");
 $textstring=$_POST['name'].$_POST['email'];
 $clean=true;
 foreach ($unwanted as $char) {
   if (strpos($textstring,$char))!==false) {
   $clean=false;
   break;
 }
 ____
 ?? Eller skal jeg have fjernet et par & i tredje spamsikringslinje?
 Den fuldstændige gamle kode kan ses her:
 http://hjemmesideskolen.dk/usenet/sender.txt
-- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
            Bertel Lund Hansen (11-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  11-09-11 09:34 |  
  |  
 
            Erik Ginnerskov skrev:
 > Bertel Lund Hansen wrote:
 > Så (gammel kode):
 > kan omskrives til (ny kode):
 Nej. Det vil ikke virke. Du skal *altid* tjekke strpos() med tre
 logiske tegn.
 Eksempel:
      $textstring = " http://hjemmesideskolen.dk";
     if (!strpos($textstring," http://hjemmesideskolen.dk")) echo "Okay!";
      else echo "Problem!";
    Udskrift: Okay!
   
 strpos() returnerer positionen af strengen som er 0. Med løst
 tjek betyder 0 og false det samme, så man får det forkerte svar
 at strengen ikke er fundet. Derimod
      if (strpos($textstring," http://hjemmesideskolen.dk"===false)) echo "Okay!";
      else echo "Problem!";
    Udskrift: Problem!
 Men jeg har omskrevet hele afsnittet til noget mere overskueligt.
 Jeg laver en funktion til det egentlige arbejde. Dels får det
 noget kode flyttet væk fra hovedrutinen, og dels har en funktion
 lige her den fordel at vi kan forladen den så snart en deltest
 er fejlet:
 function check_email () {
     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true) return 0;
     if (empty($_POST['email'] || strpos($_POST['email'], "@")===false) return 0;
     if (empty($_POST['emne']) return 0;
     if (empty($_POST['besked']) return 0;
     $textstring=$_POST['name'].$_POST['email'];
     $unwanted = array ("\n","\r"," http://hjemmesideskolen.dk");
    foreach ($unwanted as $unit) 
         if (strpos($textstring,$unit))!==false) return 0
     return 1;
 }
 if (isset($_POST['submit'])) {
    if (check_email()) send roligt mailen afsted...;
 }
 Læg først og fremmest mærke til at jeg bruger = = = når jeg
 tjekker med strpos(),
 Læg derefter mærke til at så snart der er fundet et problem,
 returnerer funktionen med et 0 (svarer til false).
 Hvis alle deltjek passeres fejlfrit, returneres 1.
 Læg også mærke til at jeg blot har indføjet hjemmesideadressen
 som et uønsket element. 
 Jeg bruger nu $unit i stedet for $char. Det har ingen som helst
 betydning - udover at "char" betyder "(enkelt)tegn", og nu er
 der også en streng der tjekkes.
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
             Bertel Lund Hansen (11-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  11-09-11 10:02 |  
  |  
 
            Bertel Lund Hansen skrev:
 >     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true) return 0;
 Tanketorsk. Det skal være:
      if (empty($_POST['name'] || strpos($_POST['email'], "@")!==false) return 0;
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
             Birger Sørensen (11-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  11-09-11 18:32 |  
  |  
 
            Bertel Lund Hansen kom med denne ide:
 > Erik Ginnerskov skrev:
 >
 >> Bertel Lund Hansen wrote:
 >
 >> Så (gammel kode):
 >> kan omskrives til (ny kode):
 >
 > Nej. Det vil ikke virke. Du skal *altid* tjekke strpos() med tre
 > logiske tegn.
 >
 > Eksempel:
 >      $textstring = " http://hjemmesideskolen.dk";
>      if (!strpos($textstring," http://hjemmesideskolen.dk")) echo "Okay!";
 >      else echo "Problem!";
 >
 >    Udskrift: Okay!
 >    
 > strpos() returnerer positionen af strengen som er 0. Med løst
 > tjek betyder 0 og false det samme, så man får det forkerte svar
 > at strengen ikke er fundet. Derimod
 >
 >      if (strpos($textstring," http://hjemmesideskolen.dk"===false)) echo 
 > "Okay!";      else echo "Problem!";
 >
 >    Udskrift: Problem!
 >
 > Men jeg har omskrevet hele afsnittet til noget mere overskueligt.
 > Jeg laver en funktion til det egentlige arbejde. Dels får det
 > noget kode flyttet væk fra hovedrutinen, og dels har en funktion
 > lige her den fordel at vi kan forladen den så snart en deltest
 > er fejlet:
 >
 > function check_email () {
 >     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true) return 
 > 0;     if (empty($_POST['email'] || strpos($_POST['email'], "@")===false) 
 > return 0;     if (empty($_POST['emne']) return 0;
 >     if (empty($_POST['besked']) return 0;
 >     $textstring=$_POST['name'].$_POST['email'];
 >     $unwanted = array ("\n","\r"," http://hjemmesideskolen.dk");
>     foreach ($unwanted as $unit) 
 >         if (strpos($textstring,$unit))!==false) return 0
 >     return 1;
 > }
 >
 > if (isset($_POST['submit'])) {
 >    if (check_email()) send roligt mailen afsted...;
 > }
 >
 > Læg først og fremmest mærke til at jeg bruger = = = når jeg
 > tjekker med strpos(),
 >
 > Læg derefter mærke til at så snart der er fundet et problem,
 > returnerer funktionen med et 0 (svarer til false).
 > Hvis alle deltjek passeres fejlfrit, returneres 1.
 > Læg også mærke til at jeg blot har indføjet hjemmesideadressen
 > som et uønsket element. 
 >
 > Jeg bruger nu $unit i stedet for $char. Det har ingen som helst
 > betydning - udover at "char" betyder "(enkelt)tegn", og nu er
 > der også en streng der tjekkes.
 = er tildeling af værdi.
 == (!=) er en sammenligning af værdi
 === (!==) er en sammenligning af værdi *og* type
 0 == false returnerer true
 '1' == 1 returnerer true
 0 === false returnerer false - den ene er et tal, den anden en boolean
 '1' === 1 returnerer false - den ene er en streng, den anden et tal.
 strpos (og mange andre PHP-funktioner) returnerer enten et tal eller 
 falsk, hvis der ikke findes et match.
 Derfor skal resultatet altid checkes med ===
 om man så skal bruge === eller !== afhænger af hvordan man 
 sammenligner, og hvordan man skal bruge resultatet.
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
             Birger Sørensen (11-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  11-09-11 19:00 |  
  |  
 
            Bertel Lund Hansen:
 > Erik Ginnerskov skrev:
 >
 >> Bertel Lund Hansen wrote:
 >
 >> Så (gammel kode):
 >> kan omskrives til (ny kode):
 >
 > Nej. Det vil ikke virke. Du skal *altid* tjekke strpos() med tre
 > logiske tegn.
 >
 > Eksempel:
 >      $textstring = " http://hjemmesideskolen.dk";
>      if (!strpos($textstring," http://hjemmesideskolen.dk")) echo "Okay!";
 >      else echo "Problem!";
 >
 >    Udskrift: Okay!
 >    
 > strpos() returnerer positionen af strengen som er 0. Med løst
 > tjek betyder 0 og false det samme, så man får det forkerte svar
 > at strengen ikke er fundet. Derimod
 >
 >      if (strpos($textstring," http://hjemmesideskolen.dk"===false)) echo 
 > "Okay!";      else echo "Problem!";
 >
 >    Udskrift: Problem!
 >
 > Men jeg har omskrevet hele afsnittet til noget mere overskueligt.
 > Jeg laver en funktion til det egentlige arbejde. Dels får det
 > noget kode flyttet væk fra hovedrutinen, og dels har en funktion
 > lige her den fordel at vi kan forladen den så snart en deltest
 > er fejlet:
 >
 > function check_email () {
 >     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true) return 
 > 0;     if (empty($_POST['email'] || strpos($_POST['email'], "@")===false) 
 > return 0;     if (empty($_POST['emne']) return 0;
 >     if (empty($_POST['besked']) return 0;
 >     $textstring=$_POST['name'].$_POST['email'];
 >     $unwanted = array ("\n","\r"," http://hjemmesideskolen.dk");
>     foreach ($unwanted as $unit) 
 >         if (strpos($textstring,$unit))!==false) return 0
 >     return 1;
 > }
 >
 > if (isset($_POST['submit'])) {
 >    if (check_email()) send roligt mailen afsted...;
 > }
 >
 > Læg først og fremmest mærke til at jeg bruger = = = når jeg
 > tjekker med strpos(),
 >
 > Læg derefter mærke til at så snart der er fundet et problem,
 > returnerer funktionen med et 0 (svarer til false).
 > Hvis alle deltjek passeres fejlfrit, returneres 1.
 > Læg også mærke til at jeg blot har indføjet hjemmesideadressen
 > som et uønsket element. 
 >
 > Jeg bruger nu $unit i stedet for $char. Det har ingen som helst
 > betydning - udover at "char" betyder "(enkelt)tegn", og nu er
 > der også en streng der tjekkes.
 function check_email () {
   $res = true;
   if ( !empty($_POST['name'] &&
        !empty($_POST['email'] &&
        !empty($_POST['emne']) &&
        !empty($_POST['besked']) &&
        (strpos($_POST['email'], "@") > 0) {
     $textstring = $_POST['name'].$_POST['email'];
     $unwanted = array("\n", "\r", " http://hjemmesideskolen.dk");
    for ( $idx = 0; $res && ($idx < count($unwanted)-1); $idx++) {
       if (strpos($textstring, $unwated[$idx]) === true) {
         $res = false;
         }
       }
     }
   else {
     $res = false;
     }
   return $res;
   }
 - gør vist nogenlunde det samme, og afbryder ikke i utide, med return 
 hvor de programmeringsmæssigt ikke hører til, og returnerer en boolean, 
 hvor der skal bruges en boolean (true hvis OK og false hvis der er 
 tomme, hvis der ikke er et @ efter 1. karakter i email, eller hvis en 
 af de unwanted findes i navn eller email).
 Og så er det IMHO en del lettere både læseligt og forståeligt...
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
              Bertel Lund Hansen (11-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  11-09-11 21:42 |  
  |  
 
            Birger Sørensen skrev:
 >     for ( $idx = 0; $res && ($idx < count($unwanted)-1); $idx++) {
 foreach er hurtigere.
 > - gør vist nogenlunde det samme, og afbryder ikke i utide, med return
 Det er et religionsspørgsmål. Jeg benytter return flittigt midt i
 funktioner.
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
               Birger Sørensen (11-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  11-09-11 23:58 |  
  |  
 
            Bertel Lund Hansen formulerede søndag:
 > Birger Sørensen skrev:
 >
 >>     for ( $idx = 0; $res && ($idx < count($unwanted)-1); $idx++) {
 >
 > foreach er hurtigere.
 Men ikke til at stoppe...
 Betyder ikke noget med tre elementer i arrayet, men kan gøre det i 
 andre tilfælde.
 >
 >> - gør vist nogenlunde det samme, og afbryder ikke i utide, med return
 >
 > Det er et religionsspørgsmål. Jeg benytter return flittigt midt i
 > funktioner.
 Det er også et spørgsmål om at skrive læsbar og forståelig kode.
 return er til at returnere en værdi - ikke til at afbryde et forløb.
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
                Bertel Lund Hansen (12-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  12-09-11 00:51 |  
  |  
 
            Birger Sørensen skrev:
 >>>     for ( $idx = 0; $res && ($idx < count($unwanted)-1); $idx++) {
 >> foreach er hurtigere.
 > Men ikke til at stoppe...
 Æh jo ... se mit forslag.
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
                Andreas Andersen (12-09-2011) 
         
	
            | Kommentar Fra : Andreas Andersen | 
  Dato :  12-09-11 05:25 |  
  |   
            Den 12-09-2011 00:58, Birger Sørensen skrev:
 > Bertel Lund Hansen formulerede søndag:
 >> Birger Sørensen skrev:
 >>
 >>> for ( $idx = 0; $res && ($idx < count($unwanted)-1); $idx++) {
 >>
 >> foreach er hurtigere.
 >
 > Men ikke til at stoppe...
 > Betyder ikke noget med tre elementer i arrayet, men kan gøre det i andre
 > tilfælde.
 >
 >>
 >>> - gør vist nogenlunde det samme, og afbryder ikke i utide, med return
 >>
 >> Det er et religionsspørgsmål. Jeg benytter return flittigt midt i
 >> funktioner.
 >
 > Det er også et spørgsmål om at skrive læsbar og forståelig kode.
 > return er til at returnere en værdi - ikke til at afbryde et forløb.
 
 Den holdning er jeg aldrig tidligere stødt på, men fair nok. Jeg synes 
 som minimum, at du bør breake ud af for-løkken, så snart du kender 
 resultatet.
 
 Et sted man altid bør have return til sidst er i en rekursiv funktion i 
 et sprog, hvor hale-rekursive kald bliver optimeret til at genbruge den 
 samme stackframe, men jeg kan se på Google, at PHP ikke er sådan et sprog.
 
 -- 
 Andreas
  
            
             |   |   
            
        
 
            
         
                 Andreas Andersen (12-09-2011) 
         
	
            | Kommentar Fra : Andreas Andersen | 
  Dato :  12-09-11 06:12 |  
  |   
            Den 12-09-2011 06:24, Andreas Andersen skrev:
 > Den holdning er jeg aldrig tidligere stødt på, men fair nok. Jeg synes
 > som minimum, at du bør breake ud af for-løkken, så snart du kender
 > resultatet.
 
 Det check havde du selvfølgelig oppe i for-løkken. Det synes jeg faktisk 
 er at gemme logik væk, hvor det ikke hører hjemme. Return-strategien er 
 mere læsbar for mig.
 
 -- 
 Andreas
  
            
             |   |   
            
        
 
            
         
                  Birger Sørensen (12-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  12-09-11 07:55 |  
  |  
 
            Følgende er skrevet af Andreas Andersen:
 > Den 12-09-2011 06:24, Andreas Andersen skrev:
 >> Den holdning er jeg aldrig tidligere stødt på, men fair nok. Jeg synes
 >> som minimum, at du bør breake ud af for-løkken, så snart du kender
 >> resultatet.
 >
 > Det check havde du selvfølgelig oppe i for-løkken. Det synes jeg faktisk er 
 > at gemme logik væk, hvor det ikke hører hjemme. Return-strategien er mere 
 > læsbar for mig.
 Jamen, så kalder vi det religion...   
For mig er brug af return - og break - hvor det "ikke hører hjemme" et 
 resultat af dårlig struktureret kode.
 Og at bruge betingelsen i en for-løkke, er netop at have logikken hvor 
 den hører hjemme - jeg skal gennem for-løkken, indtil en af to 
 betingelser er opfyldt : jeg har fundet det jeg leder efter, eller der 
 er ikke flere elementer. Normalt checker man kun for antallet af 
 elementer - men jeg er ikke bange for at bruge betingelsen til det den 
 er der for.
 Jeg bruger faktisk denne konstuktion tit. Det kan skrives som en while;
 $idx = 0;
 while( $res && ($idx < ...)) {
    ...
    $idx++;
    }
 hvor det måske er mere indlysende - men det er et spøgsmål om at læse 
 hvad der står, frem for at tro man ved hvad der stå i betingelsen, bare 
 fordi det er en for-løkke.
 I øvrigt er det vist ikke alle sprog der tillader afbrydelse med 
 return, midt i koden. Mindes at f.eks. Pascal ikke gør - eller gjorde. 
 Der skal funktioner afsluttes med return - og står det andre steder, 
 bliver resten af koden ikke kompileret (kan hænde det har udviklet sig, 
 og jeg bare er ved at blive gammel...)
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
                   Stig Johansen (12-09-2011) 
         
	
            | Kommentar Fra : Stig Johansen | 
  Dato :  12-09-11 08:23 |  
  |  
 
            Birger Sørensen wrote:
 > I øvrigt er det vist ikke alle sprog der tillader afbrydelse med
 > return, midt i koden. Mindes at f.eks. Pascal ikke gør - eller gjorde.
 Både ja.
 Hvis vi definere 'Pascal' som Delphi, som er markedsledende, så har man i
 'umindelige tider' kunnet bruge Exit;
 Standard Pascal har også GOTO som option.
 COBOL har også GOTO, hvorimod det ville være 'pænere' med f.eks. Transact's
 RETURN.
 PS: *Don't* get me started about GOTO's   
-- 
 Med venlig hilsen
 Stig Johansen
            
              |   |   
            
        
 
            
         
                   Andreas Andersen (12-09-2011) 
         
	
            | Kommentar Fra : Andreas Andersen | 
  Dato :  12-09-11 08:33 |  
  |  
 
            Den 12-09-2011 08:55, Birger Sørensen skrev:
 > Jamen, så kalder vi det religion...   
> For mig er brug af return - og break - hvor det "ikke hører hjemme" et
 > resultat af dårlig struktureret kode.
 > Og at bruge betingelsen i en for-løkke, er netop at have logikken hvor
 > den hører hjemme - jeg skal gennem for-løkken, indtil en af to
 > betingelser er opfyldt : jeg har fundet det jeg leder efter, eller der
 > er ikke flere elementer. Normalt checker man kun for antallet af
 > elementer - men jeg er ikke bange for at bruge betingelsen til det den
 > er der for.
 > Jeg bruger faktisk denne konstuktion tit. Det kan skrives som en while;
 > $idx = 0;
 > while( $res && ($idx < ...)) {
 > ...
 > $idx++;
 > }
 > hvor det måske er mere indlysende - men det er et spøgsmål om at læse
 > hvad der står, frem for at tro man ved hvad der stå i betingelsen, bare
 > fordi det er en for-løkke.
 Ja, smag og behag. Jeg bruger stort set aldrig tællevariable, jeg kan 
 godt lide foreach-konstruktionen, og det er sjældent, jeg har brug for 
 at tælle.
 -- 
 Andreas
            
              |   |   
            
        
 
            
         
                   Bertel Lund Hansen (12-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  12-09-11 12:51 |  
  |  
 
            Birger Sørensen skrev:
 > Jamen, så kalder vi det religion...   
> For mig er brug af return - og break - hvor det "ikke hører hjemme" et 
 > resultat af dårlig struktureret kode.
 Min kode er ikke dårligt struktureret. At du oplever det sådan er
 kun et resultat af at du altid gør det modsat. Ukendt
 kodestruktur føles forkert selv om den er rigtig - og mere
 effektiv end din version. Du opererer med en tæller og en
 resultatvariabel som begge er overflødige i min version som også
 bruger en hurtigere løkke.
 Du må have et problem med moderne programmerings brug af
 exceptions. Det er netop karakteriseret ved at der afbrydes i
 samme øjeblik et problem er opstået uanset om kodedelen er
 'færdig'.
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
                 Martin Larsen (12-09-2011) 
         
	
            | Kommentar Fra : Martin Larsen | 
  Dato :  12-09-11 10:36 |  
  |   
            Andreas Andersen wrote:
 
 > Den holdning er jeg aldrig tidligere stødt på, men fair nok. Jeg synes
 > som minimum, at du bør breake ud af for-løkken, så snart du kender
 > resultatet.
 
 Heller ikke jeg. Der er intet galt i at returnere så snart man ved at 
 man er færdig. Det giver *netop* klar og læsbar kode.
  
            
             |   |   
            
        
 
            
         
                  Birger Sørensen (13-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  13-09-11 06:54 |  
  |  
 
            Martin Larsen formulerede spørgsmålet:
 > Andreas Andersen wrote:
 > Heller ikke jeg. Der er intet galt i at returnere så snart man ved at man er 
 > færdig. Det giver *netop* klar og læsbar kode.
 Det kan være, at min kode er så fremmed for dig, at du ikke forstår 
 den.
 Min kode returnerer, så snart den er færdig.
 For at komme tilbage til emnet, fandt jeg denne artikel om validering 
 af email adresser:
 http://www.linuxjournal.com/article/9585?page=0,0
-færdig kode kan ses på
 http://www.linuxjournal.com/article/9585?page=0,3
(og den gør i øvrigt som jeg, så i det mindste er jeg ikke alene om mit 
 "old-school" approach...)
 ^^
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
                   Martin Larsen (13-09-2011) 
         
	
            | Kommentar Fra : Martin Larsen | 
  Dato :  13-09-11 09:49 |  
  |   
            Birger Sørensen wrote:
 
 > Det kan være, at min kode er så fremmed for dig, at du ikke forstår den.
 > Min kode returnerer, så snart den er færdig.
 
 Jeg forstår udmærket din kode, og jeg har heller ikke sagt at den ikke 
 returnerer så snart den er færdig.
 
 Men det var mere en generel kommentar til brugen af return i en løkke, 
 og et svar til det du skrev tidligere: "... og afbryder ikke i utide ...".
  
            
             |   |   
            
        
 
            
         
                    Birger Sørensen (13-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  13-09-11 13:27 |  
  |  
 
            Martin Larsen frembragte:
 > Birger Sørensen wrote:
 >
 >> Det kan være, at min kode er så fremmed for dig, at du ikke forstår den.
 >> Min kode returnerer, så snart den er færdig.
 >
 > Jeg forstår udmærket din kode, og jeg har heller ikke sagt at den ikke 
 > returnerer så snart den er færdig.
 >
 > Men det var mere en generel kommentar til brugen af return i en løkke, og et 
 > svar til det du skrev tidligere: "... og afbryder ikke i utide ...".
 ^^
 Ja, *det* misforstod jeg så..
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
              Erik Ginnerskov (15-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  15-09-11 22:23 |  
  |  
 
            Birger Sørensen wrote:
 >> function check_email () {
 >>     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true)
 >> return 0;     if (empty($_POST['email'] || strpos($_POST['email'],
 >> "@")===false) return 0;     if (empty($_POST['emne']) return 0;
 >>     if (empty($_POST['besked']) return 0;
 >>     $textstring=$_POST['name'].$_POST['email'];
 >>     $unwanted = array ("\n","\r"," http://hjemmesideskolen.dk");
>>     foreach ($unwanted as $unit)
 >>         if (strpos($textstring,$unit))!==false) return 0
 >>     return 1;
 >> }
 >>
 >> if (isset($_POST['submit'])) {
 >> if (check_email()) send roligt mailen afsted...;
 >> }
 Giver denne fejl:
 Parse error: syntax error, unexpected T_BOOLEAN_AND, expecting ')' in 
 mail2sender.php on line 26
 Den samlede kode ser sådan ud:
 http://hjemmesideskolen.dk/usenet/mail2sender.txt
og kan testes her
 http://hjemmesiddeskolen.dk/mail2.php
-- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
               Birger Sørensen (16-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  16-09-11 11:05 |  
  |  
 
            Følgende er skrevet af Erik Ginnerskov:
 > Birger Sørensen wrote:
 >
 >>> function check_email () {
 >>>     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true)
 >>> return 0;     if (empty($_POST['email'] || strpos($_POST['email'],
 >>> "@")===false) return 0;     if (empty($_POST['emne']) return 0;
 >>>     if (empty($_POST['besked']) return 0;
 >>>     $textstring=$_POST['name'].$_POST['email'];
 >>>     $unwanted = array ("\n","\r"," http://hjemmesideskolen.dk");
>>>     foreach ($unwanted as $unit)
 >>>         if (strpos($textstring,$unit))!==false) return 0
 >>>     return 1;
 >>> }
 >>>
 >>> if (isset($_POST['submit'])) {
 >>> if (check_email()) send roligt mailen afsted...;
 >>> }
 >
 > Giver denne fejl:
 >
 > Parse error: syntax error, unexpected T_BOOLEAN_AND, expecting ')' in 
 > mail2sender.php on line 26
 >
 > Den samlede kode ser sådan ud:
 >
 >  http://hjemmesideskolen.dk/usenet/mail2sender.txt
>
 > og kan testes her
 >
 >  http://hjemmesiddeskolen.dk/mail2.php
Der mangler nogle paranteser. (I hvert fald 3 steder...)
 Prøv evt
 http://bbsorensen.com/test/php_eks/eg.txt
i stedet.
 (husk at rette modtager adresse i linie 14!)
 Jeg kan af gode grunde ikke teste...
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
                Erik Ginnerskov (17-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  17-09-11 10:47 |  
  |   |   |   
            
        
 
            
         
                 Birger Sørensen (17-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  17-09-11 13:03 |  
  |  
 
            Erik Ginnerskov kom med denne ide:
 > Birger Sørensen wrote:
 >
 >> Der mangler nogle paranteser. (I hvert fald 3 steder...)
 >
 > Det var dit script.
 Jow. Gør jeg tit -glemmer parantester ;>)
 Det var ikke en anklage, men en forklaring af fejlen.
 >
 >> Prøv evt
 >>  http://bbsorensen.com/test/php_eks/eg.txt
>> i stedet.
 >> (husk at rette modtager adresse i linie 14!)
 >
 > Parse error: syntax error, unexpected T_ELSE in mail3sender.php on line 26
 >
 > det er denne linje:
 >
 > else {
 i mit script er linie 26 midt i noget HTML...
 Fejlen skyldes formentlig, at der manger en } mellem linie 3 og 4...
 (har indsat og uploaded ny...)
 > Det er i øvrigt forkert at indsætte et tjek for indtastning i feltet 
 > 'Subject' så sent. Der er allerede sendt html på det tidspunkt.
 >
 >  http://hjemmesideskolen.dk/usenet/mail3sender.txt
>  http://hjemmesideskolen.dk/mail3.php
???
 Check på $_POST['subject'], er det første der gøres i denne fil. Hvis 
 den includes i noget der skriver HTML, må du enten flytte checket til 
 før der udskrives, eller skrive HTML før til en variabel, som udskrives 
 efter checket.
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
                  Erik Ginnerskov (18-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  18-09-11 13:03 |  
  |  
 
            Birger Sørensen wrote:
 > Fejlen skyldes formentlig, at der manger en } mellem linie 3 og 4...
 > (har indsat og uploaded ny...)
 Har prøvet, hvor jeg undlod at indsætte mit eget øverst. får nu denne fejl:
 Fatal error: Call to undefined function chk_email() in mail3sender.php on 
 line 9
 Det er denne kodelinje:
      if (chk_email()) {
 Den kan åbenbart ikke finde ud af, at funktionen er skrevet efter <\html>
 Prøvede så at flytte den funktion op øverst, så brokker den sig over en } i 
 linje 2. Fjernede den og får så denne fejl:
 Parse error: syntax error, unexpected $end in mail3sender.php on line 54
 Det er en tom linje efter <\html>
 http://hjemmesideskolen.dk/usenet/mail3sender.txt
http://hjemmesideskolen.dk/mail3.php
-- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
                   Birger Sørensen (18-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  18-09-11 15:23 |  
  |  
 
            Erik Ginnerskov har bragt dette til verden:
 > Har prøvet, hvor jeg undlod at indsætte mit eget øverst. får nu denne fejl:
 >
 > Fatal error: Call to undefined function chk_email() in mail3sender.php on 
 > line 9
 >
 > Det er denne kodelinje:
 >
 >      if (chk_email()) {
 Klart nok, for det hedder funktionen ikke... :/
 Her rettet og uploadet endnu en gang...
 Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
                    Erik Ginnerskov (20-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  20-09-11 20:33 |  
  |  
 
            Birger Sørensen wrote:
 >>      if (chk_email()) {
 >
 > Klart nok, for det hedder funktionen ikke... :/
 >
 > Her rettet og uploadet endnu en gang...
 Nu nærmer vi os vist noget, der fungerer:
     Notice: Undefined variable: unwated in mail3sender.php on line 46
     Notice: Undefined variable: body in mail3sender.php on line 15
     E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!
 Linje 15:
 $body .= "Den " . date("d/m y") . " kl. " . date("G:i") . " skrev " . 
 $_POST['name'] . ":\r\n\r\n" .
 Og linje 46:
     if (strpos($textstring, $unwated[$idx]) === true) {
 is
 http://hjemmesideskolen.dk/usenet/mail3sender.txt
http://hjemmesideskolen.dk/mail3.php
-- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk
            
             |   |   
            
        
 
            
         
                     Birger Sørensen (21-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  21-09-11 09:07 |  
  |  
 
            Erik Ginnerskov tastede følgende:
 > Nu nærmer vi os vist noget, der fungerer:
 >
 >     Notice: Undefined variable: unwated in mail3sender.php on line 46
 >     Notice: Undefined variable: body in mail3sender.php on line 15
 >     E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!
 >
 > Linje 15:
 >
 > $body .= "Den " . date("d/m y") . " kl. " . date("G:i") . " skrev " . 
 > $_POST['name'] . ":\r\n\r\n" .
 >
 > Og linje 46:
 >
 >     if (strpos($textstring, $unwated[$idx]) === true) {
 > is
 >
 >  http://hjemmesideskolen.dk/usenet/mail3sender.txt
>  http://hjemmesideskolen.dk/mail3.php
Har rettet og uplodet - igen, igen ^^
 http://bbsorensen.com/test/php_eks/eg.txt
Linie 15 skal ikke have . i assignmenten (det er concatenation, altså 
 sammensætning af strenge, og $body findes ikke i forvejen, så er det 
 lidt svært at føje noget til den.) - det skal stå = ikke .= . Det er 
 kun en Notice - PHP sætter $body til en tom streng, før den føjer noget 
 til, men det er stadig forkert, at gøre det på den måde. Det stammer 
 fra dit eget eksempel.
 Linie 46 er lidt værre - det er en stavefejl: der mangler et n i 
 unwanted. Også kun en Notice, og PHP opretter blot den variable der 
 ikke findes, men til forskel fra den forrige, bliver resultatet denne 
 gang forkert.
 Kan ikke huske om det blev kopieret fra dit eget, eller det er mig der 
 har sprunget det n over...
 Jeg har indsat og udkommenteret en alternativ dato angivelse, der også 
 har tidszonen med. Den tid der anvendes er den på serveren, og den 
 behøver ikke stå i samme zone som modtageren bor, så det kan være rart 
 at have.
 Se evt.  http://dk.php.net/manual/en/function.date.php
Til gengæld kan jeg ikke umiddelbart se nogen grund til at emailen ikke 
 bliver sendt. (hvis du har husket at ændere To adressen).
 Det kunne være, at der ikke tillades den From du angiver. Nogle servere 
 tillader ikke "tilfældige" afsendere. Det er (eller var i ældre 
 versioner af PHP) heller ikke altid muligt at bruge Bcc - prøv evt. Cc 
 i stedet..
 Der kan desuden være flere andre spidsfindigheder, og opsætningen kan 
 også være afhængig af OS'et på serveren ( *nix og Windows opfører sig 
 ikke ens)
 http://dk.php.net/manual/en/function.mail.php
Birger
 -- 
 http://varmeretter.dk - billig, sund og hurtig mad
 http://bbsorensen.dk
            
             |   |   
            
        
 
            
         
                      Stig Johansen (22-09-2011) 
         
	
            | Kommentar Fra : Stig Johansen | 
  Dato :  22-09-11 07:35 |  
  |   
            Birger Sørensen wrote:
 
 > Linie 46 er lidt værre - det er en stavefejl: der mangler et n i
 > unwanted. Også kun en Notice, og PHP opretter blot den variable der
 > ikke findes, men til forskel fra den forrige, bliver resultatet denne
 > gang forkert.
 
 Velkommen til de typesvage sprogs verden;)
 
 Nemt at lave, og ufattelig nemt at begå fejl, og noget lort at fejlfinde i.
 
 Problemet (generelt) er at man fokuserer på _kodningstiden_ for et projekt,
 uagtet det kun er ca. 10% af et projekt.
 
 Hvis man sælger et projekt 'as is', er der en ide, men 'os', der skal
 vedligeholde ens egen kode, selv efter 5 år, sætter pris på man har lavet
 _læsbar_ kode ;)
 
 -- 
 Med venlig hilsen
 Stig Johansen
  
            
             |   |   
            
        
 
            
         
             Erik Ginnerskov (15-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  15-09-11 22:07 |  
  |  
 
            Bertel Lund Hansen wrote:
 > function check_email () {
 >    if (empty($_POST['name'] || strpos($_POST['email'], "@")===true)
 >    return 0; if (empty($_POST['email'] || strpos($_POST['email'],
 >    "@")===false) return 0; if (empty($_POST['emne']) return 0;
 >    if (empty($_POST['besked']) return 0;
 >    $textstring=$_POST['name'].$_POST['email'];
 >    $unwanted = array ("\n","\r"," http://hjemmesideskolen.dk");
>    foreach ($unwanted as $unit)
 >        if (strpos($textstring,$unit))!==false) return 0
 >    return 1;
 > }
 >
 > if (isset($_POST['submit'])) {
 > if (check_email()) send roligt mailen afsted...;
 > }
 Jeg får en fejl:
 Parse error: syntax error, unexpected T_BOOLEAN_OR, expecting ')' in 
 mailsender.php on line 25
 .... det er denne linje:
     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true) return 
 0;
 Det komplette script ser nu sådan ud:
 http://hjemmesideskolen.dk/usenet/mailsender.txt
og kan testes på denne midlertidige url:
 http://hjemmesideskolen.dk/mail.php
-- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
              Stig Johansen (16-09-2011) 
         
	
            | Kommentar Fra : Stig Johansen | 
  Dato :  16-09-11 07:10 |  
  |  
 
            Erik Ginnerskov wrote:
 > Parse error: syntax error, unexpected T_BOOLEAN_OR, expecting ')' in
 > mailsender.php on line 25
 > 
 > ... det er denne linje:
 > 
 >     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true)
 >     return
 > 0;
 > 
 > Det komplette script ser nu sådan ud:
 > 
 >  http://hjemmesideskolen.dk/usenet/mailsender.txt
I denne fil er linie 25 (i min editor):
         if (strpos($textstring,$unit))!==false) return 0
 -- 
 Med venlig hilsen
 Stig Johansen
            
              |   |   
            
        
 
            
         
               Erik Ginnerskov (17-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  17-09-11 10:25 |  
  |  
 
            Stig Johansen wrote:
 >>  http://hjemmesideskolen.dk/usenet/mailsender.txt
>
 > I denne fil er linie 25 (i min editor):
 >        if (strpos($textstring,$unit))!==false) return 0
 Ja, for jeg har fjernet nogle lenjer, som alene undertrykker nogle 
 fejlmeddelelser, der alligevel ikke har betydning for afvikling af scriptet. 
 Så min linjetælling er god nok. den fejlgivende linje 25 er:
     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true) return 
 0;
 -- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
                Stig Johansen (19-09-2011) 
         
	
            | Kommentar Fra : Stig Johansen | 
  Dato :  19-09-11 08:59 |  
  |  
 
            Erik Ginnerskov wrote:
 > Stig Johansen wrote:
 > 
 >>>  http://hjemmesideskolen.dk/usenet/mailsender.txt
>>
 >> I denne fil er linie 25 (i min editor):
 >>        if (strpos($textstring,$unit))!==false) return 0
 > 
 > Ja, for jeg har fjernet nogle lenjer, som alene undertrykker nogle
 > fejlmeddelelser, der alligevel ikke har betydning for afvikling af
 > scriptet. Så min linjetælling er god nok. den fejlgivende linje 25 er:
 > 
 >     if (empty($_POST['name'] || strpos($_POST['email'], "@")===true)
 >     return
 > 0;
 Jo, men læg mærke til du i begge linier har mismatch mellem paranteserne.
 Alle der det ( og ) kan godt gøre at man mister overblikket (been there done
 that).
 I den linie jeg refererer til har du 2 ( med 3 ), dvs. enten mangler du en
 ( eller har en ) for meget.
 I din linie er der 3 ( og 2 ) - dvs. omvendt.
 Når jeg laver den slags plejer jeg at dele det op i linier for at lette
 overblikket, f.eks:
 if (
    strpos($textstring,$unit)
 ) <------- mon ikke denne er i overskud?
 !==false) 
 return 0
 -- 
 Med venlig hilsen
 Stig Johansen
            
              |   |   
            
        
 
            
         
              Bertel Lund Hansen (16-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  16-09-11 10:53 |  
  |   |   |   
            
        
 
            
         
               Erik Ginnerskov (17-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  17-09-11 10:31 |  
  |  
 
            Bertel Lund Hansen wrote:
 > Det er et glemt semikolon. Tilføj det til ovenstående linje.
 Semikolon tilføjet, men scriptafviklingen når slet ikke ned til den linje. 
 De bortredigerede linjer er genindsat i mailsender.txt, så du kan tælle 
 rigtigt.
 -- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
                Bertel Lund Hansen (17-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  17-09-11 12:59 |  
  |  
 
            Erik Ginnerskov skrev:
 > Semikolon tilføjet, men scriptafviklingen når slet ikke ned til den linje. 
 > De bortredigerede linjer er genindsat i mailsender.txt, så du kan tælle 
 > rigtigt.
 Her er det reviderede script (utestet). Jeg tilføjede et
 semikolon og rettede en test på "true" til "false" i check_email().
 Derudover fjernede jeg den danske tskt som jeg kun havde indst
 for at vise dig hvor fortsættelsen skulle stå ("send roligt mailen afsted...").
 Jeg har krølleparentes begynd på samme linje som den kommando den
 hører til. Det bevirker at man kan have flere kodelinjer på
 skærmen ad gangen, og det giver bedre overblik. Men du kan jo
 bare rette det hvis du vil.
 <?php
 if (!empty($_POST['subject'])) {
    header ("Location: blokeret.php");
    exit;
 }
 ?>
 <?php
 ini_set('display_startup_errors', 'off');
 ini_set('display_errors', 'off');
 ini_set('html_errors', 'false');
 ini_set("implicit_flush", false);
 $strTitle="Meddelelse er sendt";
 include 'header.inc'; 
 ?>
 </head>
 <body>
 <div id="indhold">
 <h1><?php echo $strTitle?></h1>
 <p><!--WebWriter AutoDato-->Siden er opdateret 27.8.2007<!--WW--></p>
 <?php
 function check_email () {
     if (empty($_POST['name'] || strpos($_POST['email'], "@")===false) return 0;
     if (empty($_POST['email'] || strpos($_POST['email'], "@")===false) return 0;
     if (empty($_POST['emne']) return 0;
     if (empty($_POST['besked']) return 0;
     $textstring=$_POST['name'].$_POST['email'];
     $unwanted = array ("\n","\r"," http://hjemmesideskolen.dk");
    foreach ($unwanted as $unit)
         if (strpos($textstring,$unit))!==false) return 0;
     return 1;
 }
 if (isset($_POST['submit'])) {
     // er alt ok, fortsættes med afsendelse af mailen
     if (check_email()) {
         $headers="From: ".$_POST['name']."<".$_POST['email'].">";
         if (@$_POST['customer_copy']) {
             $headers .= "\r\nBcc: ".$_POST['email'];
         }
         $body .= "Den " . date("d/m y") . " kl. " . date("G:i") . " skrev " . $_POST['name'] . ":\r\n\r\n" . $_POST['besked'];
         if (@mail("ok@domæne.invalid", strip_tags($_POST['emne']), stripslashes(strip_tags($body)), $headers)) {
             echo "<p>Tak for din henvendelse. Jeg svarer så hurtigt som muligt.</p>";
         }
         else {
             echo "<p>E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!</p>";
         }
     }
     else {
         echo "<p>Mailen kunne ikke sendes, alle felter skal udfyldes korrekt!</p>";
     }
 }
 ?>
 <h5><?php include 'copyright.inc'; ?> april 2003</h5>
 </div>
 <div id="topbar"><?php include 'topbar.inc'; ?></div>
 <div id="menu"><?php include 'menu.inc'; ?></div>
 </body>
 </html>
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
                 Erik Ginnerskov (18-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  18-09-11 13:12 |  
  |  
 
            Bertel Lund Hansen wrote:
 > Her er det reviderede script (utestet). Jeg tilføjede et
 > semikolon og rettede en test på "true" til "false" i check_email().
 Og glemte så flere steder et ? før >, men dem fangede jeg selv og rettede.
 Prøvede scriptet men fik denne fejl:
 Parse error: syntax error, unexpected T_BOOLEAN_OR, expecting ')' in 
 mail2sender.php on line 25
 Det er denne kodelinje:
     if (empty($_POST['name'] || strpos($_POST['email'], "@")===false) return 
 0;
 I den og næste linje er der en ( og to )
 http://hjemmesideskolen.dk/usenet/mail2sender.txt
http://hjemmesideskolen.dk/mail2.php
> Jeg har krølleparentes begynd på samme linje som den kommando den
 > hører til. Det bevirker at man kan have flere kodelinjer på
 > skærmen ad gangen, og det giver bedre overblik. Men du kan jo
 > bare rette det hvis du vil.
 Foreløbig har jeg ikke ændret på det.
 -- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
                  Bertel Lund Hansen (18-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  18-09-11 14:20 |  
  |  
 
            Erik Ginnerskov skrev:
 > Det er denne kodelinje:
 if (empty($_POST['name']) || strpos($_POST['email'], "@")===false) return 0;
 Manglede parentes før ||. Det er samme fejl i næste linje.
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
                   Erik Ginnerskov (20-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  20-09-11 20:40 |  
  |   |   |   
            
        
 
            
         
                    Bertel Lund Hansen (20-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  20-09-11 22:35 |  
  |  
 
            Erik Ginnerskov skrev:
 > Rettet. Får nu denne fejl:
 > Parse error: syntax error, unexpected T_RETURN in mail2sender.php on line 27
 >         if (empty($_POST['emne']) return 0;
 Indføj en slutparentes før "return"
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
                     Erik Ginnerskov (20-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  20-09-11 23:43 |  
  |  
 
            Bertel Lund Hansen wrote:
 >> Parse error: syntax error, unexpected T_RETURN in mail2sender.php on
 >> line 27
 >
 >>         if (empty($_POST['emne']) return 0;
 >
 > Indføj en slutparentes før "return"
 Gjorde jeg - og i linje 28 også, kunne se at den ville udløse en tilsvarende 
 fejl. Nu får jeg så denne fejl:
 Parse error: syntax error, unexpected T_IS_NOT_IDENTICAL in mail2sender.php 
 on line 32
 Kodelinjen:
         if (strpos($textstring,$unit))!==false) return 0;
 Nogle variabler er åbenbart ikke identiske, men hvilke? I øvrigt ser det 
 også ud til, at der er parentesfejl i den linje - 2 ( og 3 ).
 http://hjemmesideskolen.dk/usenet/mail2sender.txt
http://hjemmesideskolen.dk/mail2.php
--
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
                      Bertel Lund Hansen (21-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  21-09-11 00:12 |  
  |  
 
            Erik Ginnerskov skrev:
 > Gjorde jeg - og i linje 28 også, kunne se at den ville udløse en tilsvarende 
 > fejl. Nu får jeg så denne fejl:
 > Parse error: syntax error, unexpected T_IS_NOT_IDENTICAL in mail2sender.php 
 > on line 32
 > Kodelinjen:
 >         if (strpos($textstring,$unit))!==false) return 0;
 > Nogle variabler er åbenbart ikke identiske, men hvilke? I øvrigt ser det 
 > også ud til, at der er parentesfejl i den linje - 2 ( og 3 ).
 Ret den først. Én fejl kan somme tider udløse en ulogisk besked.
 Generelt om parenteser:
 1. Betingelsen efter if skal være omkranset af parenteser.
 2. Parametre til en funktion skal være omkranset af parenteser.
 Prøv på basis af de to regler selv at rette parentesfejlen.
 Hvis der så stadig er fejl, så skriv igen.
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
            Leif Neland (11-09-2011) 
         
	
            | Kommentar Fra : Leif Neland | 
  Dato :  11-09-11 20:22 |  
  |  
 
            Den 10-09-2011 23:09, Erik Ginnerskov skrev:
 > !eregi("\r",$_POST['name']) && // tjek, at der ikke er "vogn-retur" i
 > "navn"
 > // er alt ok, fortsættes med afsendelse af mailen
 Det er generelt bedre at kontrollere, at der kun er de tegn, der må 
 være, end at ville checke for de tegn, man mener kan lave ulykker.
 Se f.ex.  http://en.wikipedia.org/wiki/Email_address for de tegn, der må 
 være.
 Leif
 -- 
 Bevar P2, luk P3, der er nok P3'er i forvejen.
            
              |   |   
            
        
 
            
         
           Erik Ginnerskov (21-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  21-09-11 10:26 |  
  |   |   |   
            
        
 
            
         
            Birger Sørensen (21-09-2011) 
         
	
            | Kommentar Fra : Birger Sørensen | 
  Dato :  21-09-11 22:16 |  
  |   |   |   
            
        
 
            
         
             Erik Ginnerskov (22-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  22-09-11 22:36 |  
  |  
 
            Birger Sørensen wrote:
 > Den havde jeg ikke set
 Nej, det havde du nok ikke.
 > - det er også bare kopieret fra dit eget...
 Nej, for jeg havde rettet det i txt-filen også.
 -- 
 Med venlig hilsen
 Erik Ginnerskov
 http://hjemmesideskolen.dk -  http://ginnerskov.dk 
            
             |   |   
            
        
 
            
         
           Erik Ginnerskov (21-09-2011) 
         
	
            | Kommentar Fra : Erik Ginnerskov | 
  Dato :  21-09-11 10:40 |  
  |   |   |   
            
        
 
            
         
           Asger-P (10-09-2011) 
         
	
            | Kommentar Fra : Asger-P | 
  Dato :  10-09-11 01:14 |  
  |   
            
 Hej Bertel
 
 On the: 10. of september-2011 At: 00:41 Bertel Lund Hansen wrote:
 
 >> men hvis det var i C/C++ så ville jeg tjekke for all kontrol
 >> karakterer altså alle karakterer mindre end ' '
 >
 > Så får du reaktion på tab som man måske gerne vil acceptere.
 
 Ja det var også planen, tab er da så vidt jeg ved ikke en
 accepteret email karakter.
 
 Venlig hilsen
 Asger-P
  
            
             |   |   
            
        
 
            
         
           Asger-P (12-09-2011) 
         
	
            | Kommentar Fra : Asger-P | 
  Dato :  12-09-11 00:37 |  
  |   
            
Hi Birger
 On the: 12. of september-2011 At: 00:58 Birger Sørensen wrote:
 >>> - gør vist nogenlunde det samme, og afbryder ikke i utide, med return
 >>
 >> Det er et religionsspørgsmål. Jeg benytter return flittigt midt i
 >> funktioner.
 >
 > Det er også et spørgsmål om at skrive læsbar og forståelig kode.
 > return er til at returnere en værdi - ikke til at afbryde et forløb.
 Er det noget specielt for PHP ?
 Det med at afbryde med return er da I andre sprog en velkendt
 og meget anvendt metode.
 Det gør ofte at det er meget lettere at strukturere koden f.eks.
 if( Result == FAILED )
     return ErrorCode eller throw Exception(error code)
 Så kan success koden fortsætte uden indryk og {
 men som Bertel antydede så er det jo et spørgsmål om trosretning.   
Venlig hilsen
 Asger-P
            
              |   |   
            
        
 
            
         
           Bertel Lund Hansen (12-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  12-09-11 00:50 |  
  |  
 
            Asger-P skrev:
 >> Det er også et spørgsmål om at skrive læsbar og forståelig kode.
 >> return er til at returnere en værdi - ikke til at afbryde et forløb.
 > Er det noget specielt for PHP ?
 Overhovedet ikke. Det er et rent holdningsspørgsmål.
 -- 
 Bertel
 http://bertel.lundhansen.dk/      http://fiduso.dk/
            
             |   |   
            
        
 
            
         
           Asger-P (12-09-2011) 
         
	
            | Kommentar Fra : Asger-P | 
  Dato :  12-09-11 01:02 |  
  |   
            
 Hi Bertel
 
 On the: 12. of september-2011 At: 01:50 Bertel Lund Hansen wrote:
 
 > Birger Sørensen skrev:
 >
 >>>>     for ( $idx = 0; $res && ($idx < count($unwanted)-1); $idx++) {
 >
 >>> foreach er hurtigere.
 >
 >> Men ikke til at stoppe...
 >
 > Æh jo ... se mit forslag.
 
 Kan foreach afbrydes med break som while kan ?
 
 
 Venlig hilsen
 Asger-P
  
            
             |   |   
            
        
 
            
         
           Bertel Lund Hansen (12-09-2011) 
         
	
            | Kommentar Fra : Bertel Lund Hansen | 
  Dato :  12-09-11 12:46 |  
  |   |   |   
            
        
 
            
         
           Martin (21-09-2011) 
         
	
            | Kommentar Fra : Martin | 
  Dato :  21-09-11 09:56 |  
  |  
 
            On 09-09-2011 17:44, Erik Ginnerskov wrote:
 > Til håndtering af data fra en mailformular har jeg disse koder:
 >
 > !eregi("\r",$_POST['name']) && // tjek, at der ikke er "vogn-retur" i
 > "navn"
 > !eregi("\n",$_POST['name']) && // tjek, at der ikke er "linjeskift" i
 > "navn"
 > !eregi("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i
 > "email"
 > !eregi("\n",$_POST['email'])) // tjek, at der ikke er "linjeskift" i
 > "email"
 >
 > Men nu siger serveren, at eregi() er debricated. Jeg er blevet foreslået
 > at bruge preg_match() i stedet, men det kan jeg ikke få til at fungere.
 >
 > !preg_match("\r",$_POST['name']) && // tjek, at der ikke er "vogn-retur"
 > i "navn"
 > !preg_match("\n",$_POST['name']) && // tjek, at der ikke er "linjeskift"
 > i "navn"
 > !preg_match("\r",$_POST['email']) && // tjek, at der ikke er
 > "vogn-retur" i "email"
 > !preg_match("\n",$_POST['email'])) // tjek, at der ikke er "linjeskift"
 > i "email"
 >
 > Hvad vil være den korrekte syntax for at tjekke for uønsket forekomst af
 > linjeskift og vognretur i et input?
 >
 Hvis du bruger nyere end PHP 5.2 - så er den nemmeste løsning nu 
 egentlig bare
 if ( filter_var($email, FILTER_VALIDATE_EMAIL) ) {
   // Send mail
 } else {
   // Email ikke korrekt
 }
 og med navn
 $name = filter_var($name, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
 og så kan du gøre det på alle felter på 1 gang
 filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
 Lidt mere læsning omkring filter
 http://www.php.net/manual/en/book.filter.php
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |