[php]variabele in ereg

Pagina: 1
Acties:

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
ik heb dus een form waar een string gesubmit wordt.. nu wil ik dus opzoeken in welke regel van een txt file die string voor komt..

ik heb nu dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$fcontents = file ("configuration.txt");
$limit = count($fcontents);
$j = 0;

if ($newsubcat){ 
        while ($j < $limit){
     $line = $fcontents[$j]; 
                  //nu komt dus de probleem-regel .. 
                  //$subcat2 is dus de string die ik meerkrijg uit een form
                  if (ereg("([$subcat2]+)",$line)){
         $new_line2 = ereg_replace("[\"]+[;]+",";$newsubcat\";",$line);
        $pointer = $j;
      }
            
    $j++;
     }
}


alleen krijg ik een REG_EBRACK error (op regel 10 dus)..
mag je uberhaupt een variabele gebruiken op deze manier? en zo ja.. waarom krijg ik dan de error dat de [] niet matchen?..

ohe ja $subcat2 is iets als: Versters;Speakers;Tuners;CD players
gewoon een aantal woord gescheiden door een ; dus

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

Probeer het anders zo:
code:
1
if (ereg("(\\[".$subcat2."\]+)",$line))

(Of horen die [ niet in de ereg?)
De [ moeten namelijk ge-escaped worden. Bij het submitten van een form kan je trouwens de variabelen daarna beter opvragen met een $_GET['variabele'], of als je form post gebruikt, $_POST['variabele']...

If nothing is written below, I was the last to reply...


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
uhm.. nee.. die [] hoeven niet opgezocht te worden.. je moet toch altijd hetgeen je zoekt tussen [] zetten? ([0-9] dan check je toch naar cijfers enz?)

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

Ah, dan moet je de ; vervangen door ][, want volgens mij zoekt ie nu op een lange string...

[edit]
Of juist heel die [] zooi weghalen? Als je preg_match zou gebruiken zou je nu namelijk op letters uit die reeks aan het zoeken zijn...

If nothing is written below, I was the last to reply...


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
hij moet ook op die hele string zoeken :) .. kwil namelijk kijken in welke regel die string voorkomt.. en er vervolgens nog iets achter plakken

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

Dan moet je volgens mij gewoon zonder de [] werken, want je bent puur op een string aan het zoeken, niet op een characterclass...

If nothing is written below, I was the last to reply...


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
RainManX schreef op 29 augustus 2002 @ 11:10:
Dan moet je volgens mij gewoon zonder de [] werken, want je bent puur op een string aan het zoeken, niet op een characterclass...
ok, das waar.. maar als ik dit doe:
PHP:
1
 if (ereg("($subcat2)",$fcontents[$j])){


is dit altijd true.. en dat klopt dus niet

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

OK, dan zo maar:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if ($newsubcat){  
    while ($j < $limit){ 
        $line = $fcontents[$j];  
        //ipv ereg gebruiken we preg_match, die geeft 1 terug indien 
        //de string gevonden is
        if (preg_match($subcat2,$line) == 1){
            //Deze regel vervangt string $subcat2 met ;$newsubcat";
            //Indien $subcat2 hier niet voor moet, gebruik je 
            // ";". $newsubcat ."\";"
            $new_line2 = preg_replace($subcat2, $subcat2 .";". $newsubcat ."\";", $line);
            //Als je wilt kun je nog een int achter de line zetten om 
            //het maximale aantal vervangingen te geven
            $pointer = $j; 
        }
    $j++; 
    }
}


Volgens mij moet dit werken...

Zie PHP Manual voor meer info...

If nothing is written below, I was the last to reply...


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
dan krijg ik deze blije melding:
Warning: Delimiter must not be alphanumeric or backslash on line 6
?
nu heb ik dit van php.net gehaald:
PHP:
1
 if (preg_match("/\\\$subcat2/",$line) == 1){

ik krijg dan geen foutmelding maar hij is dan nooit true.. terwijl ik zeker weet dat ie dat wel 1 keer is..... iemand een idee wat hier dan weer fout gaat? :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je zoekt ook naar de string "\$subcat2" niet naar "\[dewaardevansubcat2]" :)
je hebt, denk ik, een \ te veel

trouwens, als het niet boeit wat er om $subcat2 staat, waarom gebruik je dan niet een functie ala strpos() of strstr() en voor de replace een str_replace?

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
stond inderdaad een \ teveel.. maar zo stond het op php.net vandaar :)
hij werkt nu (eindelijk) :)
Pagina: 1