You are not logged in.

wcf.regNote.message

Manuel

Trainee

  • "Manuel" started this thread

Posts: 64

  • Send private message

1

Friday, September 15th 2006, 11:38am

fwrite

Hallo,

ich möchte mit der funktion fwrite folgende Daten in eine Datei schreiben.
Also die Datei sieht so aus:

PHP Source code

1
2
3
4
5
6
7
8
9
10
//Zugangsdaten 
 $sqlhost "";
 $sqluser ="";
 $sqlpassword="";
 $sqldb="";
 $n="";
 
 //Erstellt Connect zu Datenbank her
 $dz=mysql_connect($sqlhost$sqluser$sqlpassword) or die ("Konnte keine Verbindung zur Datenbank herstellen");
 mysql_select_db($sqldb$dz);

und nachher wenn ich sie beschrieben habe sollen halt die Parameter mit drin stehen die ich aus einem Formular auslese.
Wie muss man das machen wenn man nur die Parameter eintragen will??

Es wird komischer weise nichts in die Datei geschrieben auch nicht über diesen befehl:

PHP Source code

1
2
3
$fh fopen("inc/mysql.inc""w+b");
        fwrite($fh,$text);
        fclose($fh);

Außer die Datei zu löschen macht er nichts. und in test steht auch was drin.

Kann mir einer damit helfen??
Gruß M-Arens

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

2

Friday, September 15th 2006, 1:57pm

Du solltest mit File() aufmachen also

PHP Source code

1
$content File("Datei.txt");

So hast du in content zeilenweise die Datei stehen.

Nun kannst du mit

PHP Source code

1
2
3
foreach($content as $line) {
 ....
}

den Inhalt der Datei durchgehen.

Machst du die Datei vorher mit "w" auf, kannst du dann einfach die
einzelnen Zeilen wieder in die Datei schreiben.

PHP Source code

1
2
3
4
5
$fh fopen("Datei.txt""w");
foreach($content as $line) {
    fwrite($fh$line);
}
fclose($fh);

So weit so gut, aber nix verändert.

wenn du jetzt vor dem fwrite noch checks einbaust mit preg_match

also z.b.:

PHP Source code

1
if(preg_match("\$sqlhost",$line))


so kannst du dann anhand von preg_replace die passenden werte in die Anführungszeichen rein ersetzten.

PHP Source code

1
2
// ersetze in der aktuellen Zeile "" mit "$sqlhost" 
preg_replace("\"\"""\"$sqlhost\""$line))


also z.B. so:

PHP Source code

1
2
3
4
5
6
7
8
9
10
$fh fopen("Datei.txt""w");
foreach($content as $line) {
    if(preg_match("\$sqlhost",$line))
        preg_replace("\"\"""\"$sqlhost\""$line));
    else if(preg_match("\$sqluser",$line))
        preg_replace("\"\"""\"$sqluser\""$line));

    fwrite($fh$line);
}
fclose($fh);


und die veränderte Zeile wird wieder in die Datei geschrieben.
Findet er nix mit den preg_match'es, so wird die Zeile UNVERÄNDERT wieder in die Datei geschrieben.

Ciao Ephraim

Manuel

Trainee

  • "Manuel" started this thread

Posts: 64

  • Send private message

3

Saturday, September 16th 2006, 4:03pm

Also vielleicht kannst du mir das nochmal erklären!
Hier noch mal der Code:

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (isset($_POST['send'])) {
    $content File("inc/mysql1.inc.php"); 
    $fh fopen("inc/mysql1.inc.php""w");
    foreach($content as $line) {
      if(preg_match("\$sqlhost",$line))
        preg_replace("\"\"""\"$sqlhost\"test"$line);
      else if(preg_match("\$sqluser",$line))
        preg_replace("\"\"""\"$sqluser\"test2"$line);
        fwrite($fh$line);
    }
    fclose($fh); 
    $status "Die Daten wurden in die Datei geschrieben!";
    }
    else {
    $status "";
    }

Also die Zeilen 1-3 sind ja klar, aber das hier,

PHP Source code

1
2
3
4
5
6
foreach($content as $line) {
      if(preg_match("\$sqlhost",$line))
        preg_replace("\"\"""\"$sqlhost\""$line));
      else if(preg_match("\$sqluser",$line))
        preg_replace("\"\"""\"$sqluser\""$line));
        fwrite($fh$line);

verstehe ich nicht. Wie genau kann ich was in Zeile 2 meiner datei schreiben? Ich muss ihm doch ihrgendwo sagen in welche zeile ich schreiben will. Und wie mach ich das wenn ich die Daten aus meinem Formular schreiben will, muss ich da was beachen oder kann ich auch einfach eine Variable eintragen?
Gruß M-Arens

This post has been edited 2 times, last edit by "Manuel" (Sep 16th 2006, 4:17pm)


Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

4

Saturday, September 16th 2006, 8:30pm

PHP Source code

1
    $content File("inc/mysql1.inc.php");

Diese Zeile ist dir klar oder? Also $content == Array mit jeder Zeile als ein Eintrag im Array.

Was macht nun des andere? (die Datei ist neu geöffnet worde mit "w", d.h. nun ist die Datei leer und der Zeiger steht auf "die erste Zeile")

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// jede Zeile kommt in die Variable $line
foreach($content as $line) {
      // ist die AKTUELLE Zeile die mit der Variablen sqlhost
      if(preg_match("\$sqlhost",$line))
        // wenn ja dann ersetzte diese mit dem neuen Wert
        $line preg_replace("\"\"""\"$sqlhost\""$line));
      // oder ist die Zeile die mit sqluser
      else if(preg_match("\$sqluser",$line))
        // wenn ja dann mit dem Wert von sqluser ersetzen
        $line preg_replace("\"\"""\"$sqluser\""$line));
     
     // wurde keine Übereinstimmungen gefunden, wird auch die Zeile 
     // nicht verändert.
     // wurde eine Übereinstimmung gefunden, wurde die Zeile verändert,
     // aber wir müssen die Zeile auf jeden Fall wieder in die Datei schreiben
        fwrite($fh$line);


Hatte noch en Fehler drin, preg_replace gibt die überarbeitete Zeile als return wert zurück deswegen muss davor noch "$line ="

preg_replace macht im Endeffekt, suche Argument1 in Argument 3 und ersetze dieses mit Argument2 alles klar?
Ansonsten einfach mal Regex und preg_replace bei php.net nachschlagen.
http://de2.php.net/manual/de/function.preg-replace.php
http://de2.php.net/manual/de/function.preg-match.php

Mit dem Code wird jede Zeile der Datei NEU in die Datei geschrieben.
Erst holst du dir die Zeilen aus der Datei, dann wird die Datei geöffnet und geleert. Danach wird dann jede Zeile wieder in die Datei geschrieben. Bei dem Zeilenweise wiederreinschreiben werden dann noch die entsprechenden Zeilen ersetzt mit den passenden werten.

Quoted

Und wie mach ich das wenn ich die Daten aus meinem Formular schreiben will, muss ich da was beachen oder kann ich auch einfach eine Variable eintragen?

Was meinst du damit? es wird doch der Wert aus einer Variable da rein geschrieben, siehe preg_replace aufrufe. und die Daten aus dem Formular musst du dir halt aus dem entsprechenden Array holen.
Also entweder mit
$sqluser = $_GET['sqluser'];
oder
$sqluser = $_POST['sqluser'];
je nachdem welche method="XXXX" du bei deinem <from ......> angegeben hast.

Ciao Ephraim
PS: ruhig weiterfragen wenn noch was unklar ist, dafür ist ja das Forum da ;)

Manuel

Trainee

  • "Manuel" started this thread

Posts: 64

  • Send private message

5

Monday, September 18th 2006, 10:15am

Hallo,

klappt leider noch nicht, ich bekomme immer die Fehler:
Warning: preg_match() [function.preg-match]: No ending delimiter '$' found in H:\xampp\htdocs\ap\install.php on line 20

Warning: preg_match() [function.preg-match]: No ending delimiter '$' found in H:\xampp\htdocs\ap\install.php on line 24

Warning: fwrite(): supplied argument is not a valid stream resource in H:\xampp\htdocs\ap\install.php on line 32

Line 20:

PHP Source code

1
if(preg_match("\$sqlhost",$line))

Line 24:

PHP Source code

1
else if(preg_match("\$sqluser",$line))

Line 32:

PHP Source code

1
fwrite($fh$line); 


Hilfe ;( ;(
Gruß M-Arens

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

6

Monday, September 18th 2006, 12:37pm

Quoted

Original von ManuelWarning: preg_match() [function.preg-match]: No ending delimiter '$' found in H:\xampp\htdocs\ap\install.php on line 20

Upps :) Probiers mal so:

PHP Source code

1
if(preg_match("/\$sqlhost/",$line))



Quoted

Line 32:

PHP Source code

1
fwrite($fh$line); 


hast du vorher die Datei aufgemacht? mit fopen und KEIN @ davor?
(@fopen <-- nicht so!)


Ciao Ephraim

Manuel

Trainee

  • "Manuel" started this thread

Posts: 64

  • Send private message

7

Monday, September 18th 2006, 12:59pm

Hups habe vergessen die Datei zu öffnen.

Aber klappen tut es immer noch nicht. Die Datei wird geschrieben aber nicht die werte die ich aus dem Formular lese.
Hier noch mal der Code wie ich das jetzt mache!

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Daten in die Datei schreiben
  if (isset($_POST['send'])) {
    //Formulardaten in Variablen schreiben
    $sqlhost $_POST['sqlhost'];
    $sqluser $_POST['sqluser'];
    $sqlpassword $_POST['sqlpassword'];
    $sqldb $_POST['sqldb'];
    $n $_POST['n'];
    
    //Datei bearbeiten
    $content File("inc/mysql1.inc.php");
    $fh fopen("inc/mysql1.inc.php""w");
    // jede Zeile kommt in die Variable $line
    foreach($content as $line) {
      // ist die AKTUELLE Zeile die mit der Variablen sqlhost
      if(preg_match("/\$sqlhost/",$line))
        // wenn ja dann ersetzte diese mit dem neuen Wert
        $line preg_replace("\"\"""\"$sqlhost\""$line);
      // oder ist die Zeile die mit sqluser
      else if(preg_match("/\$sqluser/",$line))
        // wenn ja dann mit dem Wert von sqluser ersetzen
        $line preg_replace("\"\"""\"$sqluser\""$line);
      else if(preg_match("/\$sqlpasswort/",$line))
        // wenn ja dann mit dem Wert von sqluser ersetzen
        $line preg_replace("\"\"""\"$sqlpasswort\""$line);
      else if(preg_match("/\$sqldb/",$line))
        // wenn ja dann mit dem Wert von sqluser ersetzen
        $line preg_replace("\"\"""\"$sqldb\""$line);
      else if(preg_match("/\$n/",$line))
        // wenn ja dann mit dem Wert von sqluser ersetzen
        $line preg_replace("\"\"""\"$n\""$line);
        
     // wurde keine Übereinstimmungen gefunden, wird auch die Zeile 
     // nicht verändert.
     // wurde eine Übereinstimmung gefunden, wurde die Zeile verändert,
     // aber wir müssen die Zeile auf jeden Fall wieder in die Datei schreiben
        fwrite($fh$line); 
    }    
    $status "Die Daten wurden in die Datei geschrieben!";
    }
    else {
    $status "";
    }
Gruß M-Arens

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

8

Monday, September 18th 2006, 2:10pm

Schreib mal bitte bei den preg_replace aufrufen den ersten Parameter auch mit"/.../" also so:

PHP Source code

1
$line preg_replace("/\"\"/""\"$sqldb\""$line);


Ciao Ephraim

[EDIT]
So funktionierts jetzt bei mir!

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    if(preg_match('/\$sqlhost/',$line)) {
        $line preg_replace('/""/'"\"$sqlhost\""$line);

    else if(preg_match('/\$sqluser/',$line))
        $line preg_replace('/""/'"\"$sqluser\""$line);

    else if(preg_match('/\$sqlpassword/',$line))
        $line preg_replace('/""/'"\"$sqlpassword\""$line);

    else if(preg_match('/\$sqldb/',$line))
        $line preg_replace('/""/'"\"$sqldb\""$line);

    else if(preg_match('/\$n/',$line))
        $line preg_replace('/""/'"\"$n\""$line);


Ciao Ciao
[/EDIT]

Manuel

Trainee

  • "Manuel" started this thread

Posts: 64

  • Send private message

9

Monday, September 18th 2006, 4:48pm

Also klappt weder mit dem einen noch mit dem anderen!
Wenn ich es damit:

PHP Source code

1
$line preg_replace("/\"\"/""\"$sqldb\""$line); 

mache wird der Code abgearbeitet aber es wird nichts in die anführungszeichen geschrieben.

Wenn ich es dann mit deinem Code mache, also so:

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Daten in die Datei schreiben
  if (isset($_POST['send'])) {
    //Formulardaten in Variablen schreiben
    $sqlhost $_POST['sqlhost'];
    $sqluser $_POST['sqluser'];
    $sqlpassword $_POST['sqlpassword'];
    $sqldb $_POST['sqldb'];
    $n $_POST['n'];
    
    //Datei bearbeiten
    $content File("inc/mysql1.inc.php");
    $fh fopen("inc/mysql1.inc.php""w");
    // jede Zeile kommt in die Variable $line
    foreach($content as $line) {
      // ist die AKTUELLE Zeile die mit der Variablen sqlhost
      if(preg_match('/\$sqlhost/',$line)) {
        $line preg_replace('/""/'"\"$sqlhost\""$line);

    else if(preg_match('/\$sqluser/',$line))
        $line preg_replace('/""/'"\"$sqluser\""$line);

    else if(preg_match('/\$sqlpassword/',$line))
        $line preg_replace('/""/'"\"$sqlpassword\""$line);

    else if(preg_match('/\$sqldb/',$line))
        $line preg_replace('/""/'"\"$sqldb\""$line);

    else if(preg_match('/\$n/',$line))
        $line preg_replace('/""/'"\"$n\""$line); 
        
     // wurde keine Übereinstimmungen gefunden, wird auch die Zeile 
     // nicht verändert.
     // wurde eine Übereinstimmung gefunden, wurde die Zeile verändert,
     // aber wir müssen die Zeile auf jeden Fall wieder in die Datei schreiben
        fwrite($fh$line); 
    }    
    $status "Die Daten wurden in die Datei geschrieben!";
    }
    else {
    $status "";
    } 

Dann bekomme ich diesen Fehler:

Quoted

Parse error: parse error, unexpected T_ELSE in E:\xampp\htdocs\ap\install.php on line 31

Und in Line 31 steht:

PHP Source code

1
else if(preg_match('/\$sqluser/',$line))


Wie sieht bei dir denn die Datei aus in die du geschrieben hast. Einmal vorher und dann danach??

------------
Habe es jetzt auch hin bekommen, hier der Code

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Daten in die Datei schreiben
  if (isset($_POST['send'])) {
    //Formulardaten in Variablen schreiben
    $sqlhost $_POST['sqlhost'];
    $sqluser $_POST['sqluser'];
    $sqlpassword $_POST['sqlpassword'];
    $sqldb $_POST['sqldb'];
    $n $_POST['n'];
    
    //Datei bearbeiten
    $content File("inc/mysql1.inc.php");
    $fh fopen("inc/mysql1.inc.php""w");
    // jede Zeile kommt in die Variable $line
    foreach($content as $line) {
      // ist die AKTUELLE Zeile die mit der Variablen sqlhost
      if(preg_match('/\$sqlhost/',$line)) {
        $line preg_replace('/""/'"\"$sqlhost\""$line);
        }
      elseif(preg_match('/\$sqluser/',$line)) {
        $line preg_replace('/""/'"\"$sqluser\""$line);
        }
      elseif(preg_match('/\$sqlpassword/',$line)) {
        $line preg_replace('/""/'"\"$sqlpassword\""$line);
        }
      elseif(preg_match('/\$sqldb/',$line)) {
        $line preg_replace('/""/'"\"$sqldb\""$line);
        }
      elseif(preg_match('/\$n/',$line)) {
        $line preg_replace('/""/'"\"$n\""$line); 
        }
     // wurde keine Übereinstimmungen gefunden, wird auch die Zeile 
     // nicht verändert.
     // wurde eine Übereinstimmung gefunden, wurde die Zeile verändert,
     // aber wir müssen die Zeile auf jeden Fall wieder in die Datei schreiben
        fwrite($fh$line); 
    }    
    $status "Die Daten wurden in die Datei geschrieben!";
    }
    
    else {
    $status "";
    } 


Jetzt habe ich aber noch das Problem des er nur die daten schreibt wenn noch keine Parameter drin stehen.
Wie kann ich das denn noch ändern???
Gruß M-Arens

This post has been edited 1 times, last edit by "Manuel" (Sep 18th 2006, 5:41pm)


Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

10

Tuesday, September 19th 2006, 8:32am

Da musst du dich dann mit RegEx noch ein bissel näher beschäftigen ;)

Also z.Z. ist es so, des du mit preg_replace nach "" suchst und dies mit
"WertDerVariablen" ersetzt. Jetzt musst du nach "" suchen die etwas unbestimmtes zwischen sich stehen haben.
Also beliebige Anzahl an Zeichen.
In RegEx (Reguare Expressions oder auch Regulärer Ausdruck) steht der Punkt für EIN beliebiges Zeichen. Der Stern steht für die Anzahl 0 bis unendlich viele also müssen wir .* in die "" reinschreiben.
Da RegEx aber immer soviel "frisst" wie nur möglich, würde es deine schliessenden " auch als beliebiges Zeichen ansehen. Also müssen wir Regex noch sagen, des es nicht so gierig sein soll. Des kann man mit dem Suchflag U eingeben. Suchflags kommen immer ausserhalb der //.

Jetzt mal ein beispiel :)

PHP Source code

1
preg_replace('/".*"/U'"\"$sqldb\""$line);


Und weißt du was toll is an der ganzen Sache? Des funtzt auch wenn die Datei noch leer ist. alles wenn noch keine werte in den Anführungszeichen stehen ;)

Ciao Ephraim

Manuel

Trainee

  • "Manuel" started this thread

Posts: 64

  • Send private message

11

Tuesday, September 19th 2006, 12:44pm

Ja super das klappt ja wie geschmiert.

Jetzt erstmal ein dickes Lob für den klasse support hier im Board. Ist echt schön wie so einem newbe wie mir geholfen wird, egal wie blöde die fragen sind.
Gruß M-Arens

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

12

Tuesday, September 19th 2006, 1:02pm

Immer wieder gerne und jetzt gibts hier auch eine schöne Anleitung für alle die so eine configdatei selber bearbeiten wollen ....

Ciao Ephraim

wcf.user.socialbookmarks.titel