fopen erstellt nicht alle Dateien

scriper

Eta Capricorni
ID: 57943
L
3 Mai 2006
2.721
316
Hallo zusammen,

ich bastel für den internen gebrauch ein Script, welches Daten aus einer Datenbank liest, diese mit HTML-Tags "umbaut" und das ganze dann in kleine html-Files speichert.

Hier zuerst mal der Quelltext:

Code:
<html>
<body>
<?php

$res=mysql_connect("localhost","root","");
if($res == FALSE){
echo "MIIIIIST!";
}
mysql_select_db("test",$res);





$sql = "SELECT `COL 1` FROM `table 1`";
$result = mysql_query($sql) or die ("TOT");

$zaehler = 0;

while ($row = mysql_fetch_array($result) )
{

    $sql2 = "SELECT * FROM `table 1` WHERE `COL 1` = '".$row[0]."'";
    $result2 = mysql_query($sql2) or die ("TOT2");

    $row2 = mysql_fetch_row($result2);


        $inhalt = "<table width=\"600\">";
        $inhalt.="\r\n";
        $inhalt.="<tr><th colspan=\"2\" align=\"left\">".$row[0]."</th></tr>";
        $inhalt.="\r\n";

        foreach ($row2 as $wert){

            if($wert != "" AND $wert != $row[0]){
                $inhalt.="<tr><td width=\"200\">".$wert."</td><td width=\"400\">_Variable_</td></tr>";
                $inhalt.="\r\n";
            }

        }

        $inhalt.="</table>";
        $inhalt.="\r\n";

        $name = str_replace(" ", '_', $row[0]);
        $name = str_replace("(", '_', $name);
        $name = str_replace(")", '_', $name);
        $name = str_replace("/", '_', $name);
        $name = str_replace("\n", '_', $name);

[B]
        #$datei = fopen("C:\\xampp\\htdocs\\mailtemplates\\site\\files\\HEIN\\".$name."_".$zaehler.".html","w");
        $datei = fopen("C:\\xampp\\htdocs\\mailtemplates\\site\\files\\HEIN\\".$name.".html","w");

        if ($datei === FALSE) {
            echo "Fehler bei:<br />";
            echo $row[0];
        }else{
            fwrite($datei, $inhalt);
            fclose($datei);
            $zaehler++;
        }[/B]

}

echo $zaehler." Datensätze wurden angelegt!";

?>
</body>
</html>
Den meiner Meinung nach wichtigen Teil habe ich markiert.

Das Problem ist, dass das Script mittels fopen nur 274 Dateien erzeugt, anstatt der 289 Datensätze, die in der Datenbank stehen.

Das Script gibt auch immer "289 Datensätze wurden angelegt!" aus.

Wenn ich an den Dateinamen aber die Variable $zaehler anhänge, legt er alle Dateien wie gewünscht an (siehe auskommentiere Zeile).

Wieso tut es das?

Danke schon mal für eure Hilfe!

LG,


scriper
 
Der Ordner ist initial leer. Überschreiben wär ja ok, aber die Anzahl stimmt halt nicht.
 
Es wird wohl überschrieben. Da der Zähler hochzählt, sind natürlich die damit erzeugten Dateinamen unterschiedlich.

Gib mal ein SELECT COUNT (DISTINCT col1) aus, dann müsstest Du auf 274 kommen. Andernfalls wird's spannend :)
 
warum es im Body Tag zu echo Ausgaben kommt, frag ich mich grad, aber das is hier ja nicht das Problem.
Was gibt den ein count($result)-1 aus ?
und wenn du schon eine Ausabe erzeugst, dann teste doch mal ohne fwrite - einfach mal nen echo erzeugter_filename_mit_zähler. Dann kannst Du sehen, ob überhaupt, alle Dateinamen erzeugt werden.

Debuggen nennt sich hier das Stichwort. Bei so einfachen Fehlern sollte man das eigentlich auch allein hinbekommen.
 
Es wird wohl überschrieben. Da der Zähler hochzählt, sind natürlich die damit erzeugten Dateinamen unterschiedlich.

Gib mal ein SELECT COUNT (DISTINCT col1) aus, dann müsstest Du auf 274 kommen. Andernfalls wird's spannend :)

Code:
[URL="https://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&token=d3893d3c800a0c3552a51b9d0aaa2df7"]SELECT[/URL] COUNT(  DISTINCT  `COL 1`  ) 
FROM  `table 1`
COUNT(DISTINCT `COL 1`) 274
mh, mist.
 
Liegt an Dubletten im Datenbestand. Wenn der Dateiname aus dem jeweiligen Datensatz erzeugt wird kommt logischerweise auch der gleiche Name dabei raus, eine schon bestehende Datei (die den gleichen Datensatz enthält) wird dann überschrieben.

Wenn Du die Datei(en) im append-Modus öffnest ("a" statt "w") werden neue Daten angehängt, dabei landen Dubletten in einer Datei. Du bekommst dann (mindestens) eine Datei mit mehreren Datensätzen (1 Zeile = 1 Datensatz), diese sind zB anhand der Dateigröße oder der Anzahl der Zeilen zu erkennen.