Tja, nach 3 Wochen PHP bin ich ja schon stolz das ich allein so weit gekommen bin, aber nun komme ich bei einem Problem einfach nicht weiter und auch Tutorials haben bei nicht den berühmten klick gebracht.
Folgendes Problem. Das Script funktioniert einwandfrei, auch wenn es an einigen stellen vielleicht nicht so elegant geschrieben ist. Bis zu der Stelle an der ich mit Update ein ergebnis in meine Datenbank schreiben will. Ich lese also mit der Funktion anzahl verzeichnisse aus um festzustellen wie viele Dateien mit der Endung *.bmp enthalten sind. Zum testen habe ich ein Verzeichnis mit bmp gefüllt und 4 sind leer. Bis zum Update funkt alles, aber an der Stelle wird für alle Datensätze der Wert eingetragen der eigentlich nur bei einem Datensatz eingetragen werden dürfte.
Ich verzweifle an der Where Klausel. Ich bin mir sicher das ich auf der einen Seite den Zeiger $daten->id nutzen muss um genau diesem einen Datensatz den wert zuzuschreiben. Aber alle versuche sind vergeblich und ich habe keinen Lösungsansatz gefunden der mir wirklich weiterhilft.
Hier mein Code, vielleicht kann mir jemand von euch den richtigen Anstoss geben. Bei Bedarf kann ich natürlich auch noch einen Dump meiner Tabellen beifügen. Ich hoffe der Code ist einigermaßen lesbar für euch. Ich habe mir alle mühe gegeben.
Es sind 3 Tabellen :
Tabelle autor - mit autor_id, name und Ordner
Tabelle land - mit lans_id, abk (Abkürzung), deutsch (deutscher Name), englisch (englischer Name)
Tabelle icon mit id, autor, land, gesamt (hier soll die Anzahl der Files eintragen werden) und ein paar anderen Feldern...
PHP-Code:
<?PHP
include 'include/tags.inc.php';
include 'include/error.inc.php';
include 'include/login.inc.php';
// Datenbankverbindung herstellen
$db = mysql_connect($MYSQL_HOST,$MYSQL_USER,$MYSQL_PASS)or mysql_die();
mysql_select_db($MYSQL_DATABASE,$db);
// Anzahl der bmp ermitteln und in Datenbank eintragen
function anzahl($v) {
$dir = opendir($v);
while ($d = readdir($dir)) {
if (is_file("$v/$d") && (ereg(".bmp","$v/$d")))
$count++;
}//end while
closedir($dir);
return $count;
}
// Datensatzabfrage - alle Datensätze die einen ordner und ein Land haben
// ist korrekt - in MySQL getestet
$sql = "SELECT `land`.`abk`, `autor`.`ordner`, `icon`.`id`
FROM `icon`
LEFT JOIN `autor` ON `icon`.`autor` = `autor`.`autor_id`
LEFT JOIN `land` ON `icon`.`land` = `land`.`l_id`";
$result = mysql_query ($sql,$db) or mysql_die();
while ($daten=mysql_fetch_object($result))
{ $menge=anzahl("icons/$daten->abk/$daten->ordner");
echo $menge; // Dateianzahl ist korrekt
echo "Daten-id :$daten->id"; //nur zur Kontrolle eingefügt
// Hier hapert es, alle Datensätze
// haben den gleichen Wert
$aendern = "UPDATE icon SET gesamt = $menge" WHERE //????;
// Ich dachte es würde mit id = $daten->id gehen
$update = mysql_query($aendern); }