fopen,sql abfrage, datei erstellen

will dateinamen aus der db auslesen und diese dannach via fopen erstellen. Bezeichnung ist vom typ TINYTEXT.
bekomme immer den fehler:
failed to open stream: Invalid argument

dateiname sollte am ende so aussehen wie math1_2_3.php
wenn ich $dateiname="mathe123" selber zuweise dann gehts
aber wenn ich die werte aus der db hole dann nicht.
woran liegt das?

while schleife ist drin da es im endeffekt um die 100 daten sind
die so erstellt werden sollen.

mfg

PHP:
....
$sql = "SELECT DISTINCT * FROM xy WHERE Bezeichnung = 'math1, 2,  3' ";
$result = mysql_query($sql);
if(mysql_num_rows($result)) { 
	while($row = mysql_fetch_assoc($result)) {
		$varia = str_replace ( ',', '', $row['Bezeichnung']);
		$dateiname =  str_replace ( ' ', '_', $varia );
		$filehandle = fopen("$dateiname.php", "ab");
		$contents=' text reinschreiben';
        fwrite($filehandle, $contents);
        fclose($filehandle);
	}
}
 
ohne es jetzt grad ausprobieren zu können würde ich mal auf die folgende zeile tippen:

Code:
$filehandle = fopen("$dateiname.php", "ab");

müsste das .php nicht außerhalb der "" stehen? bzw bau dir das vorher in dateiname mit ein.

ich würde das mal so probieren:


Code:
...
$dateiname .= ".php";
$filehandle = fopen($dateiname, "ab");
 
Erstmal kommt nach deinem Query und den Ersetzungen bestenfalls "math1_2__3.php" raus.

Außerdem ist deine WHERE-Klausel so spezifisch, dass du dir den Query eigentlich auch ganz sparen kannst... du bindest ja nur Dateien ein die so heißen, wie du es in der WHERE-Klausel eigentlich schon benennst.

Für die Fehlersuche: Lass dir doch auch $dateiname einfach mal ausgeben, bevor du die Datei zu öffnen versuchst.
 
das where ist nachher net so sondern gibt mir alle datennamen von bezeichnung das war nur für dieses beispiel...
desweiteren hab ich auch
das schon mit $dateiname .= ".php"; probiert aber gleiches
ergebnis ;(
und ob das php in den "" ist oder nicht macht keinen unterschied
bzw er gibt für den dateinamen das gleiche aus.

wenn ich mir dateiname ausgeben lasse gibt er :
eben 'math1, 2, 3' oder eben nach den str_replace
die abgeändert version aus aber sobald ich eben da noch was dranfüge
wirds nicht mehr als string erkannt ;/
warum?
 
Hallo mig,

leider verstehe ich zwar dein Problem nicht, aber ich möchte dennoch ein wenig klugscheißen. Vielleicht löst sich das Problem dann ja schon:

Original von mig
will dateinamen aus der db auslesen und diese dannach via fopen erstellen. Bezeichnung ist vom typ TINYTEXT.
TINYTEXT umfasst auch die Möglichkeit, Umbrüche jeder Art in das Feld zu schreiben. Vielleicht kommt ein Umbruch als letztes Zeichen zurück?

Original von mig
bekomme immer den fehler:
failed to open stream: Invalid argument
Für mich leider nicht nachvollziehbar, das aktuelle Verzeichnis ist schreibbar und das script hat ausreichende Rechte (oder Möglichkeit C du nutzt windows *g*)?

Original von mig
PHP:
....
$sql = "SELECT DISTINCT * FROM xy WHERE Bezeichnung = 'math1, 2,  3' ";
$result = mysql_query($sql);
if(mysql_num_rows($result)) { 
	while($row = mysql_fetch_assoc($result)) {
		$varia = str_replace ( ',', '', $row['Bezeichnung']);
		$dateiname =  str_replace ( ' ', '_', $varia );
		$filehandle = fopen("$dateiname.php", "ab");
		$contents=' text reinschreiben';
        fwrite($filehandle, $contents);
        fclose($filehandle);
	}
}
Das ganze würde ich wie folgt abändern:
PHP:
....
$sql = "SELECT DISTINCT * FROM xy WHERE Bezeichnung = 'math1, 2,  3' ";
$result = mysql_query($sql);
if(mysql_num_rows($result)) { 
	while($row = mysql_fetch_assoc($result)) {
		$name = trim($row['Bezeichnung']);
		$replace[','] = '';
		$replace[' '] = '_';
		$name = strtr($name,$replace);

		$name .= '.php'; //Macht einfach n schlanken fuß... ich bin kein Fan von double-Quotes...
		$filehandle = fopen($name, "ab");
		$contents=' text reinschreiben';
		fwrite($filehandle, $contents);
		fclose($filehandle);
	}
}
Ansich sollte hier kein weiterer Fehler versteckt sein... ;)

Original von mig
...die abgeändert version aus aber sobald ich eben da noch was dranfüge
wirds nicht mehr als string erkannt ;/
Als was erkennt er es denn? X(
 
joa schreibrechte hab ich, arbeite auch unter windows
und deine version funktioniert
schau morgen nochmal genau woran es lag
danke erstmal ;)

*edit1*
hab nochmal nachgeschaut
$name = trim($row['Bezeichnung']);
diese zeile hat im endeffekt gefehlt
weiss an sich nur noch nicht welches verbotene zeichen es entfernt hat
da ich mir den dateinamen hab ausgelben lassen und da dann immer
name.php
und nicht
name
.php
stand ... was der fall sein sollte wenn das letzte zeichen ein umbruch zeichen ist oder?

mfg
 
Zurück
Oben