|  | 		    
					
        
         
          
         
	
          | |  | Stripslashes virker ikke Fra : Stig Holmberg
 | 
 Dato :  25-04-09 00:33
 | 
 |  | Hej
 
 Jeg forsøger at fjerne backslashes (\)  fra formfelter og variabler vha.
 funktionen stripslashes()
 
 I nedenstående har jeg indsat nogle backslashes i variablerne, og skriver
 f.eks. "te\st" i input-feltet "telefon".
 
 Jeg samler alle variablerne i arrayet $required og kører en foreach på
 dette.
 
 Det virker på de passive variabler, men ikke på form-feltet, hvad gør jeg
 galt?
 
 Mvh. Stig
 
 <body>
 <form action="strip.php" method="post">
 <input name="telefon" type="text" />
 <input type="submit" name="submit" value="Submit" />
 </form>
 <?php
 
 if(isset($_POST['submit'])){
 $firma = "Oles \Autoværk\sted";
 $kontakt = "Ole \mekaniker\ Olsen";
 $adresse = "B\\akken 27";
 $tlf = $_POST['telefon'];
 
 $required = array($firma,$kontakt,$adresse,$tlf);
 
 if(get_magic_quotes_gpc()){
 foreach($required as $key => $value){
 $required[$key] = stripslashes($value);
 }
 }
 
 print_r($required);
 }
 ?>
 </body>
 
 
 
 |  |  | 
  Birger Sørensen (25-04-2009) 
 
	
          | |  | Kommentar Fra : Birger Sørensen
 | 
 Dato :  25-04-09 02:20
 | 
 |  | 
 
            Stig Holmberg har bragt dette til os:
 > Hej
 >
 > Jeg forsøger at fjerne backslashes (\)  fra formfelter og variabler vha. 
 > funktionen stripslashes()
 >
 > I nedenstående har jeg indsat nogle backslashes i variablerne, og skriver 
 > f.eks. "te\st" i input-feltet "telefon".
 >
 > Jeg samler alle variablerne i arrayet $required og kører en foreach på dette.
 >
 > Det virker på de passive variabler, men ikke på form-feltet, hvad gør jeg 
 > galt?
 >
 > Mvh. Stig
 >
 > <body>
 > <form action="strip.php" method="post">
 > <input name="telefon" type="text" />
 > <input type="submit" name="submit" value="Submit" />
 > </form>
 > <?php
 >
 > if(isset($_POST['submit'])){
 >   $firma = "Oles \Autoværk\sted";
 >   $kontakt = "Ole \mekaniker\ Olsen";
 >   $adresse = "B\\akken 27";
 >   $tlf = $_POST['telefon'];
 >
 >   $required = array($firma,$kontakt,$adresse,$tlf);
 >
 >   if(get_magic_quotes_gpc()){
 >     foreach($required as $key => $value){
 >     $required[$key] = stripslashes($value);
 >     }
 >   }
 >
 > print_r($required);
 > }
 > ?>
 > </body>
 Fra
http://dk.php.net/manual/en/control-structures.foreach.php "
 Note: Unless the array is referenced, foreach operates on a copy of the 
 specified array and not the array itself. foreach has some side effects 
 on the array pointer. Don't rely on the array pointer during or after 
 the foreach without resetting it.
 As of PHP 5, you can easily modify array's elements by preceding $value 
 with &. This will assign reference instead of copying the value.
 <?php
 $arr = array(1, 2, 3, 4);
 foreach ($arr as &$value) {
     $value = $value * 2;
 }
 // $arr is now array(2, 4, 6, 8)
 unset($value); // break the reference with the last element
 ?>
 ....
 Warning
 Reference of a $value and the last array element remain even after the 
 foreach loop. It is recommended to destroy it by unset().
 "
 Ved ikke om det er dit problem - men det ligner meget godt...
 Birger
 -- 
http://varmeretter.dk  - billig, sund og hurtig mad
http://bbsorensen.dk |  |  | 
  Stig Holmberg (25-04-2009) 
 
	
          | |  | Kommentar Fra : Stig Holmberg
 | 
 Dato :  25-04-09 02:43
 | 
 |  | 
 "Birger Sørensen" <sdc@bbsorensen.com> skrev i meddelelsen 
 news:49f26555$0$90275$14726298@news.sunsite.dk...
 > Stig Holmberg har bragt dette til os:
 >> Hej
 >>
 >> Jeg forsøger at fjerne backslashes (\)  fra formfelter og variabler vha. 
 >> funktionen stripslashes()
 >>
 >> I nedenstående har jeg indsat nogle backslashes i variablerne, og skriver 
 >> f.eks. "te\st" i input-feltet "telefon".
 >>
 >> Jeg samler alle variablerne i arrayet $required og kører en foreach på 
 >> dette.
 >>
 >> Det virker på de passive variabler, men ikke på form-feltet, hvad gør jeg 
 >> galt?
 >>
 >> Mvh. Stig
 >>
 >> <body>
 >> <form action="strip.php" method="post">
 >> <input name="telefon" type="text" />
 >> <input type="submit" name="submit" value="Submit" />
 >> </form>
 >> <?php
 >>
 >> if(isset($_POST['submit'])){
 >>   $firma = "Oles \Autoværk\sted";
 >>   $kontakt = "Ole \mekaniker\ Olsen";
 >>   $adresse = "B\\akken 27";
 >>   $tlf = $_POST['telefon'];
 >>
 >>   $required = array($firma,$kontakt,$adresse,$tlf);
 >>
 >>   if(get_magic_quotes_gpc()){
 >>     foreach($required as $key => $value){
 >>     $required[$key] = stripslashes($value);
 >>     }
 >>   }
 >>
 >> print_r($required);
 >> }
 >> ?>
 >> </body>
 >
 > Fra
 > http://dk.php.net/manual/en/control-structures.foreach.php >
 > "
 > Note: Unless the array is referenced, foreach operates on a copy of the 
 > specified array and not the array itself. foreach has some side effects on 
 > the array pointer. Don't rely on the array pointer during or after the 
 > foreach without resetting it.
 >
 > As of PHP 5, you can easily modify array's elements by preceding $value 
 > with &. This will assign reference instead of copying the value.
 > <?php
 > $arr = array(1, 2, 3, 4);
 > foreach ($arr as &$value) {
 >    $value = $value * 2;
 > }
 > // $arr is now array(2, 4, 6, 8)
 > unset($value); // break the reference with the last element
 > ?>
 > ...
 > Warning
 > Reference of a $value and the last array element remain even after the 
 > foreach loop. It is recommended to destroy it by unset().
 > "
 >
 > Ved ikke om det er dit problem - men det ligner meget godt...
 >
 > Birger
 >
 Tak for dit input, jeg har prøvet at sætte & foran $value, men det gav ingen 
 forskel.
 Jeg er ny i php, ved ikke hvilken konsekvens der er i at der arbejdes på en 
 kopi af arrayet?
 Mvh. Stig 
            
             |  |  | 
   Martin (25-04-2009) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  25-04-09 02:54
 | 
 |  | 
 
            Stig Holmberg wrote:
 > 
 > "Birger Sørensen" <sdc@bbsorensen.com> skrev i meddelelsen
 > news:49f26555$0$90275$14726298@news.sunsite.dk...
 >> Fra
 >> http://dk.php.net/manual/en/control-structures.foreach.php >>
 >> "
 >> Note: Unless the array is referenced, foreach operates on a copy of
 >> the specified array and not the array itself. foreach has some side
 >> effects on the array pointer. Don't rely on the array pointer during
 >> or after the foreach without resetting it.
 >>
 >> As of PHP 5, you can easily modify array's elements by preceding
 >> $value with &. This will assign reference instead of copying the value.
 >> <?php
 >> $arr = array(1, 2, 3, 4);
 >> foreach ($arr as &$value) {
 >>    $value = $value * 2;
 >> }
 >> // $arr is now array(2, 4, 6, 8)
 >> unset($value); // break the reference with the last element
 >> ?>
 >> ...
 >> Warning
 >> Reference of a $value and the last array element remain even after the
 >> foreach loop. It is recommended to destroy it by unset().
 >> "
 >>
 >> Ved ikke om det er dit problem - men det ligner meget godt...
 >>
 >> Birger
 >>
 > 
 > Tak for dit input, jeg har prøvet at sætte & foran $value, men det gav
 > ingen forskel.
 Det du kan gøre er
 $arr = array(1,2,3,4);
 foreach($arr AS $key => $value) {
   $arr[$key] = $value * 2;
 }
 // $arr = array(2,4,6,8)
 > 
 > Jeg er ny i php, ved ikke hvilken konsekvens der er i at der arbejdes på
 > en kopi af arrayet?
 $arr = array(1,2,3,4);
 foreach($arr AS $key => $value) {
   $arr[$key] = $value * 2;
   break;
 }
 // $arr = array(2,2,3,4)
            
             |  |  | 
    Stig Holmberg (25-04-2009) 
 
	
          | |  | Kommentar Fra : Stig Holmberg
 | 
 Dato :  25-04-09 11:18
 | 
 |  | 
 "Martin" <martin@aarhof.invalid> skrev i meddelelsen
 news:49f26d46$0$90273$14726298@news.sunsite.dk...
 
 >
 > Det du kan gøre er
 >
 > $arr = array(1,2,3,4);
 > foreach($arr AS $key => $value) {
 >  $arr[$key] = $value * 2;
 > }
 > // $arr = array(2,4,6,8)
 
 Det er jo det jeg gør i forvejen:
 
 if(get_magic_quotes_gpc()){
 foreach($required as $key => $value){
 $required[$key] = stripslashes($value);
 }
 }
 
 Det virker bare ikke på variablen $tlf der kommer fra $_POST['telefon']
 
 Mvh. Stig
 
 
 
 |  |  | 
   Bertel Lund Hansen (25-04-2009) 
 
	
          | |  | Kommentar Fra : Bertel Lund Hansen
 | 
 Dato :  25-04-09 07:18
 | 
 |  | 
 
            Stig Holmberg skrev:
 > Tak for dit input, jeg har prøvet at sætte & foran $value, men det gav ingen 
 > forskel.
 Nej, det er klart. Der var ikke det omtalte problem i din kode.
 > Jeg er ny i php, ved ikke hvilken konsekvens der er i at der arbejdes på en 
 > kopi af arrayet?
 Princippet der overrasker begyndere:
      $variabel = "etellerandet";
      $løkkekopi_af_variabel = $variabel;
      $løkkekopi_af_variabel = "nogetheltandet";
      echo $variabel;
 og så spørger de:
      Hvorfor er $variabel ikke blevet ændret?
 Her er din kode som den skulle se ud hvis du ville indføre
 omtalte fejl i den:
 FEJLKODE:
       if (get_magic_quotes_gpc()) {
         foreach($required as $key => $value) {
            $value = stripslashes($value);
         }
      }
 -- 
 Bertel
http://bertel.lundhansen.dk/          FIDUSO: http://fiduso.dk/ |  |  | 
    Stig Holmberg (25-04-2009) 
 
	
          | |  | Kommentar Fra : Stig Holmberg
 | 
 Dato :  25-04-09 12:36
 | 
 |  | 
 "Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i meddelelsen
 news:rfa5v4hcnbf4a207frs2k42stadffgg677@news.stofanet.dk...
 > Stig Holmberg skrev:
 >
 >> Tak for dit input, jeg har prøvet at sætte & foran $value, men det gav
 >> ingen
 >> forskel.
 >
 > Nej, det er klart. Der var ikke det omtalte problem i din kode.
 >
 >> Jeg er ny i php, ved ikke hvilken konsekvens der er i at der arbejdes på
 >> en
 >> kopi af arrayet?
 >
 > Princippet der overrasker begyndere:
 >
 >  $variabel = "etellerandet";
 >  $løkkekopi_af_variabel = $variabel;
 >  $løkkekopi_af_variabel = "nogetheltandet";
 >  echo $variabel;
 >
 > og så spørger de:
 >
 >  Hvorfor er $variabel ikke blevet ændret?
 
 Ja det virker logisk nok.
 
 > Her er din kode som den skulle se ud hvis du ville indføre
 > omtalte fejl i den:
 >
 > FEJLKODE:
 >
 >   if (get_magic_quotes_gpc()) {
 >  foreach($required as $key => $value) {
 >  $value = stripslashes($value);
 >   }
 >  }
 
 Det forstår jeg så ikke, er $value ikke en intern variabel i løkken som ikke
 har noget at gøre med vores oprindelige værdi?
 
 Og den burde det være muligt at ændre?
 
 Og så burde dette da heller ikke virke:
 
 if(get_magic_quotes_gpc()){
 foreach($required as $key => $value){
 $required[$key] = stripslashes($value);
 }
 }
 
 For hvis $required er en kopi, burde den oprindelige $required da ikke ændre
 sig?
 
 Ja, nu er jeg totalt forvirret, og min stripslashes virker stadig ikke, har
 prøvet at lave en simpel konkatenering i løkken og det virker fint også på
 input feltet: $required[$key] = $value . "Testing";
 
 Mvh. Stig
 
 
 
 |  |  | 
     Martin (25-04-2009) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  25-04-09 18:18
 | 
 |  | Stig Holmberg wrote:
 
 > Det forstår jeg så ikke, er $value ikke en intern variabel i løkken som
 > ikke har noget at gøre med vores oprindelige værdi?
 
 Nej
 Hvis du bruger den som reference, så lig mærke til den søde warning som
 står i manualen
 
 Warning
 Reference of a $value and the last array element remain even after the
 foreach loop. It is recommended to destroy it by unset().
 
 
 |  |  | 
     Bertel Lund Hansen (26-04-2009) 
 
	
          | |  | Kommentar Fra : Bertel Lund Hansen
 | 
 Dato :  26-04-09 11:14
 | 
 |  | 
 
            Stig Holmberg skrev:
 > Ja det virker logisk nok.
 Godt.
 > > FEJLKODE:
 > >
 > >   if (get_magic_quotes_gpc()) {
 > >  foreach($required as $key => $value) {
 > >  $value = stripslashes($value);
 > >   }
 > >  }
 > Det forstår jeg så ikke, er $value ikke en intern variabel i løkken som ikke 
 > har noget at gøre med vores oprindelige værdi?
 Jo, netop. Når løkken er færdig, er $value død, og alle ændringer
 af den er gået tabt.
 > Og den burde det være muligt at ændre?
 Ja - men uden permanent effekt. Enhver ændring er ligegyldig -
 medmindre den genbruges inden for løkken.
 > Og så burde dette da heller ikke virke:
 > if(get_magic_quotes_gpc()){
 >  foreach($required as $key => $value){
 >  $required[$key] = stripslashes($value);
 >  }
 > }
 Jo, for der er det ikke den midlertidige variabel der ændres, men
 derimod det originale array som er aktivt både enden for og uden
 for løkken. Det gør ikke spor at $key også er midlertidig. Den
 skal bare udpege det rigtige element der skal ændres.
 > For hvis $required er en kopi,
 Det er det ikke.
 > Ja, nu er jeg totalt forvirret, og min stripslashes virker stadig ikke,
 Nej, det har jeg ingen løsning på (bortset fra at man kan lave
 noget brute-force med gentagen fjerning af skråstreger til alle
 er væk).
 -- 
 Bertel
http://bertel.lundhansen.dk/          FIDUSO: http://fiduso.dk/ |  |  | 
      Stig Holmberg (26-04-2009) 
 
	
          | |  | Kommentar Fra : Stig Holmberg
 | 
 Dato :  26-04-09 21:49
 | 
 |  | 
 "Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i meddelelsen
 news:2oc8v4pa88l1q1qf8ga4ug6gq3fra6000f@news.stofanet.dk...
 > Stig Holmberg skrev:
 >
 >> Ja det virker logisk nok.
 >
 > Godt.
 >
 >> > FEJLKODE:
 >> >
 >> >   if (get_magic_quotes_gpc()) {
 >> >  foreach($required as $key => $value) {
 >> >  $value = stripslashes($value);
 >> >   }
 >> >  }
 >
 >> Det forstår jeg så ikke, er $value ikke en intern variabel i løkken som
 >> ikke
 >> har noget at gøre med vores oprindelige værdi?
 >
 > Jo, netop. Når løkken er færdig, er $value død, og alle ændringer
 > af den er gået tabt.
 
 Aha, så faldt tiøren, tak for det.
 
 >> Og den burde det være muligt at ændre?
 >
 > Ja - men uden permanent effekt. Enhver ændring er ligegyldig -
 > medmindre den genbruges inden for løkken.
 
 Selvfølgelig, det burde jeg have gennemskuet.
 
 >
 >> Og så burde dette da heller ikke virke:
 >
 >> if(get_magic_quotes_gpc()){
 >>  foreach($required as $key => $value){
 >>  $required[$key] = stripslashes($value);
 >>  }
 >> }
 >
 > Jo, for der er det ikke den midlertidige variabel der ændres, men
 > derimod det originale array som er aktivt både enden for og uden
 > for løkken. Det gør ikke spor at $key også er midlertidig. Den
 > skal bare udpege det rigtige element der skal ændres.
 
 Nu forstår jeg forskellen.
 
 >> For hvis $required er en kopi,
 >
 > Det er det ikke.
 >
 >> Ja, nu er jeg totalt forvirret, og min stripslashes virker stadig ikke,
 >
 > Nej, det har jeg ingen løsning på (bortset fra at man kan lave
 > noget brute-force med gentagen fjerning af skråstreger til alle
 > er væk).
 
 Det er heldigvis løst nu, se min anden post.
 
 Tak for hjælpen, det var oplysende.
 
 Mvh. Stig
 
 
 
 |  |  | 
  Bertel Lund Hansen (25-04-2009) 
 
	
          | |  | Kommentar Fra : Bertel Lund Hansen
 | 
 Dato :  25-04-09 07:13
 | 
 |  | 
 
            Birger Sørensen skrev:
 > Note: Unless the array is referenced, foreach operates on a copy of the 
 > specified array and not the array itself.
 Det problem har Stigs kode ikke. Han ændrer
      $required[$key]
 og det er netop det originale array og ikke kopien.
 -- 
 Bertel
http://bertel.lundhansen.dk/          FIDUSO: http://fiduso.dk/ |  |  | 
  Bertel Lund Hansen (25-04-2009) 
 
	
          | |  | Kommentar Fra : Bertel Lund Hansen
 | 
 Dato :  25-04-09 07:12
 | 
 |  | 
 
            Stig Holmberg skrev:
 > Det virker på de passive variabler, men ikke på form-feltet, hvad gør jeg 
 > galt?
 Du gør sådan set ikke noget galt, men der er noget du ikke er
 opmærksom på. Indføj en linje i din kode, så får du syn for
 sagen:
 >   if(get_magic_quotes_gpc()){
 >     foreach($required as $key => $value){
      echo "<p>$value</p>";
 >     $required[$key] = stripslashes($value);
 >     }
 >   }
 Jeg ved ikke hvorfor det er sådan, men jeg gætter på at det er
 get_magic_quotes_gpc() der laver noget automatik.
 -- 
 Bertel
http://bertel.lundhansen.dk/          FIDUSO: http://fiduso.dk/ |  |  | 
  Stig Holmberg (25-04-2009) 
 
	
          | |  | Kommentar Fra : Stig Holmberg
 | 
 Dato :  25-04-09 15:15
 | 
 |  | 
 "Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i meddelelsen
 news:79a5v4pv0r34tfcu4dr7c92n9tb3ibsngd@news.stofanet.dk...
 > Stig Holmberg skrev:
 >
 >> Det virker på de passive variabler, men ikke på form-feltet, hvad gør jeg
 >> galt?
 >
 > Du gør sådan set ikke noget galt, men der er noget du ikke er
 > opmærksom på. Indføj en linje i din kode, så får du syn for
 > sagen:
 >
 >>   if(get_magic_quotes_gpc()){
 >>     foreach($required as $key => $value){
 >  echo "<p>$value</p>";
 >>     $required[$key] = stripslashes($value);
 >>     }
 >>   }
 >
 > Jeg ved ikke hvorfor det er sådan, men jeg gætter på at det er
 > get_magic_quotes_gpc() der laver noget automatik.
 
 Tak for din hjælp, der er som du siger ikke noget galt med foreach-løkken,
 men jeg har nu fundet fejlen.
 
 Det der forvirrede mig var at stripslashes fjernede de \ jeg skrev ind i
 mine passive variabler men ikke dem jeg skrev i input-feltet.
 
 Det skyldes følgende:
 
 1. Anførselstegn i variabler fra $_POST arrayet bliver escaped(\") af
 magicquotes.
 
 2. Backslashes i variabler fra $_POST arrayet bliver escaped(\\) af
 magicquotes.
 
 3. Backslashes i variabler fra $_POST arrayet BLIVER fjernet af
 stripslashes - MEN da magicquotes sætter 1 ekstra (se punkt 2) bliver der en
 tilbage.
 
 4. Alle backslashes i variabler der IKKE kommer fra $_POST arrayet bliver
 fjernet af stripslashes.
 
 Man kan sige at jeg testede funktionen på en forkert måde, ved at sætte \
 ind i input-feltet og de passive variabler, jeg skulle have testet med
 anførselstegn.
 
 Jeg stirrede mig blind på at stripslashes fjernede \ fra mine passive
 variabler, men ikke gjorde det fra mit input-felt variabel, men det var bare
 punkt 3. der var på spil.
 
 Mvh. Stig
 
 
 
 |  |  | 
   Martin (25-04-2009) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  25-04-09 18:23
 | 
 |  | Stig Holmberg wrote:
 >
 > "Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i meddelelsen
 > news:79a5v4pv0r34tfcu4dr7c92n9tb3ibsngd@news.stofanet.dk...
 >> Stig Holmberg skrev:
 >>
 >>> Det virker på de passive variabler, men ikke på form-feltet, hvad gør
 >>> jeg
 >>> galt?
 >>
 >> Du gør sådan set ikke noget galt, men der er noget du ikke er
 >> opmærksom på. Indføj en linje i din kode, så får du syn for
 >> sagen:
 >>
 >>>   if(get_magic_quotes_gpc()){
 >>>     foreach($required as $key => $value){
 >>  echo "<p>$value</p>";
 >>>     $required[$key] = stripslashes($value);
 >>>     }
 >>>   }
 >>
 
 Glæd dig til PHP6, så er magic_quotes slået helt fra, og kan ikke sættes
 til on :)
 
 og er allerde deprecated
 
 This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP
 6.0.0. Relying on this feature is highly discouraged.
 
 Hvis du skal bruge den til at indsætte i en database, så bare nøjes med
 mysql_real_escape_string
 
 
 |  |  | 
    Stig Holmberg (25-04-2009) 
 
	
          | |  | Kommentar Fra : Stig Holmberg
 | 
 Dato :  25-04-09 20:30
 | 
 |  | 
 "Martin" <martin@aarhof.invalid> skrev i meddelelsen 
 news:49f3470f$0$90270$14726298@news.sunsite.dk...
 > Stig Holmberg wrote:
 >>
 >> "Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i meddelelsen
 >> news:79a5v4pv0r34tfcu4dr7c92n9tb3ibsngd@news.stofanet.dk...
 >>> Stig Holmberg skrev:
 >>>
 >>>> Det virker på de passive variabler, men ikke på form-feltet, hvad gør
 >>>> jeg
 >>>> galt?
 >>>
 >>> Du gør sådan set ikke noget galt, men der er noget du ikke er
 >>> opmærksom på. Indføj en linje i din kode, så får du syn for
 >>> sagen:
 >>>
 >>>>   if(get_magic_quotes_gpc()){
 >>>>     foreach($required as $key => $value){
 >>>  echo "<p>$value</p>";
 >>>>     $required[$key] = stripslashes($value);
 >>>>     }
 >>>>   }
 >>>
 >
 > Glæd dig til PHP6, så er magic_quotes slået helt fra, og kan ikke sættes
 > til on :)
 >
 > og er allerde deprecated
 >
 > This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP
 > 6.0.0. Relying on this feature is highly discouraged.
 >
 > Hvis du skal bruge den til at indsætte i en database, så bare nøjes med
 > mysql_real_escape_string
 Ja, det var en mindre god idé de fik dengang med magicquotes    Mvh. Stig 
            
             |  |  | 
 |  |