For-Schleife wird nicht weitergezählt

ronaldo84

Erfahrenes Mitglied
Hallo.
Ich habe ein kleines Problem. Ich habe mehrere Dateien, deren Inhalt ich durchsuchen möchte.Die dateinamen sind integer Zahlen. Eigentlich wollte ich es só machen.

PHP:
$filecounter=60574;
$sql = "Select artnr, artid FROM tabelle1";
$verbindung= mysql_connect("localhost", "name", "passwort");
mysql_select_db("db", $verbindung) or die("Auswahl der Datenbank fehlgeschlagen!");
$res = mysql_query($sql) or die("Anfrage fehlgeschlagen!");
 
for ( $y = $filecounter; $y <= 60580; $y++)
{
$sourcefile = "$y" ; 
$searchkey = "NoPict.jpg";
$content = file($sourcefile);
for ($i=0; $i<count($content); $i++) 
{
if(eregi($searchkey, $content[$i])) 
{echo "Datei leer";}
else 
{
	while ($row = mysql_fetch_object($res))
	 {
	 for ($i=0; $i<count($content); $i++) 
	 {
		if(eregi($row->artnr, $content[$i])) 
		 {echo $filecounter; echo "-|-"; echo $row->artnr; echo "<br>";}
		else
		 {}
	 }
	 }
}
}
echo $y;
}
Manche Dateien können auch leer sein.Wenn sie leer ist hat sie ein Bild mit dem Namen "nopic.jpg". Wenn die Datei dies nicht hat durchsuche ich die datei erneut, aber diesmal mit einer artikelnummer, die ich aus einer Tabelle ausgelesen habe. Wenn die Datei durchsucht ist soll die nächste durchsucht werden. BEi einer Datei klappt das auch. Aber die restlichen 5 werden nicht durchsucht.
Kann mir jemand helfen?
Danke

Edit: Der counter $y wird doch weitergezählt. Aber leider werden die Abfragen innerhalb der 1. Forschleife nicht gemacht.
 
Zuletzt bearbeitet:
Habt ihr eigentlich mal was von Codingstyle gehört?

Ordne das mal bitte, kommentiere, gib sinnvolle Variablennamen und dann schau ich mir das nochmal an
 
Ich weiß nicht was du hast, ich habe zwar nicht kommentiert, denke aber das meine Variablennamen sinnvoll sind. Was meinst du mit Ordnung? Habe es jetzt nach bestem Wissen und Gewissen gemacht.
PHP:
<?php
$sql = "Select artnr, artid FROM tabelle1"; //artikelnummer aus Tabelle holen
$searchkey = "NoPict.jpg"; //Schlüssel an dem erkannt wird ob die Datei den richtigen Inhalt enthält
$verbindung= mysql_connect("localhost", "name", "passwort");
mysql_select_db("db", $verbindung) or die("Auswahl der Datenbank fehlgeschlagen!");
$res = mysql_query($sql) or die("Anfrage fehlgeschlagen!");
for ( $y=60575; $y <= 60580; ++$y) //For-Schleife die die Dateien hochzählt bis <=60580
{
$sourcefile = "datei_$y" ; 
$content = file($sourcefile); //Zeilen werden eingelesen
for ($i=0; $i<count($content); $i++) //For-Schleife die jede einzelen Zeile nach dem searchkey durchsucht
{
if(ereg($searchkey, $content[$i])) //Wenn schlüssel gefunden ausgabe Datei leer
{echo "Datei leer";}
else 
{
	while ($row = mysql_fetch_object($res)) //solange Objekt in res
	 {
 
	 for ($i=0; $i<count($content); $i++) //For-Schleife die jede einzelen Zeile nach der artikelnummer durchsucht
	 {
		if(ereg($row->artnr, $content[$i])) //Wenn gefunden ausgabe
		 {echo $y; echo "-|-"; echo $row->artnr; echo "<br>";}
		else
		 {}
	 }
	 }
}
}
echo $y; //Counter ausgeben
echo "<br>";//Zeilenumbrüche
}
 
?>

Hoffe das ist ok so.
 
Zuletzt bearbeitet:
PHP:
<?php
$sql = "Select artnr, artid FROM tabelle1"; //artikelnummer aus Tabelle holen
$searchkey = "NoPict.jpg"; //Schlüssel an dem erkannt wird ob die Datei den richtigen Inhalt enthält
$verbindung=  mysql_connect("localhost", "name", "passwort");
mysql_select_db("vasquez", $verbindung) or die("Auswahl der Datenbank fehlgeschlagen!");
$res = mysql_query($sql) or die("Anfrage fehlgeschlagen!");
for ( $y=60575; $y <= 60580; ++$y) //For-Schleife die die Dateien hochzählt bis <=60580
{
  $sourcefile = "$y" ;
  $content = file($sourcefile); //Zeilen werden eingelesen
  for ($i=0; $i<count($content); $i++)  /*For-Schleife die jede einzelen Zeile nach dem              searchkey durchsucht*/
  {
    if(ereg($searchkey, $content[$i]))  //Wenn schlüssel gefunden ausgabe Datei leer
    {
      echo "Datei leer";
    }
    else
    {
      while ($row = mysql_fetch_object($res)) //solange Objekt in res
      {
        for ($i=0; $i<count($content); $i++)  //For-Schleife die jede einzelen Zeile nach der artikelnummer durchsucht
        {
          if(ereg($row->artnr, $content[$i])) //Wenn gefunden ausgabe
          {
            echo $y; 
            echo "-|-"; 
            echo $row->artnr; 
            echo "<br>";
          }
        }
      }
    }
  }
  echo $y; //Counter ausgeben
  echo "<br>";//Zeilenumbrüche
}

?>

(sorry, das ich so pingelig bin, man hat uns in der ausbildung dazu verdonnert, deshalb sind das nebenwirkungen davon.. die variablennamen waren ok... aber von manch anderen eben nicht)

Lässt sich beschissen sehen... man müsste das mal testen können...
versuch mal in jeder schleife nen echo mit dem namen der schleife auszugeben.
Dann siehst du jedenfalls wie weit er kommt. dann kannste gucken wo er aufhört.
wennde das weißt kannst nach dem fehler suchen...
so mach ich das, wenn nix anderes hilft
 
Zuletzt bearbeitet:
Das ist kein Problem ist wahrscheinlich der Unterschied zwischen uns. Ich muss mir alles selbst erabeiten bzw. erlernen. Meiner Meinung nach liegt es an der While-Schleife. Wenn ich nämlich nach einem festem Wert suche:
PHP:
for ( $y=60574; $y <= 60576; ++$y) //For-Schleife die die Dateien hochzählt bis <=60580
{ 
$sourcefile = "$y" ; 
$content = file($sourcefile); //Zeilen werden eingelesen
for ($i=0; $i<count($content); $i++) //For-Schleife die jede einzelen Zeile nach dem searchkey durchsucht
{ 
if(ereg($searchkey, $content[$i])) //Wenn schlüssel gefunden ausgabe Datei leer
{echo $y; echo "-|-"; echo "Datei leer";}
else 
{
	//while ($row = mysql_fetch_object($res)) //solange Objekt in res
	// { 
 
	 for ($i=0; $i<count($content); $i++) //For-Schleife die jede einzelen Zeile nach der artikelnummer durchsucht
	 { 
		if(ereg("M9834D/A", $content[$i])) //Wenn gefunden ausgabe
		 {echo $y; echo "-|-"; echo "M9834D/A"; echo "<br>";}
		else
		 {echo $y; echo "-|-"; echo "Nicht gefunden"; echo "<br>";}
	 }
	 //}
}
}
echo $y; //Counter ausgeben
echo "<br>"; //Zeilenumbrüche
}
D.h. ohne While schleife erhalte ich folgendes Ergebnis:
60574-|-Nicht gefunden
60574-|-Nicht gefunden
60574-|-M9834D/A

60575-|-Nicht gefunden
60575-|-Nicht gefunden
60575-|-Nicht gefunden

60576-|-Nicht gefunden
60576-|-Nicht gefunden
60576-|-Nicht gefunden
Er geht alle 3 Dateien durch und finde auch die Artnr in der Richtigen.
Mit While-Schleife sieht die Ausgabe so aus:
60574-|-Nicht gefunden
60574-|-Nicht gefunden
60574-|-Nicht gefunden
:
60574-|-M9834D/A
:
60574-|-Nicht gefunden
60574
60575
60576

Das verstehe ich nicht.Klar ist das er zuerst die Datei 60574 mit dem gesamten $row->artnr durchsucht. Aber wenn er damit fertig ist wird der Filecounter zwar hochgezählt, aber die ganzen Anweisungen werden nicht für die anderen Dateien gemacht.
 
Habe es selber rausgefunden.

Es muss so aussehen
PHP:
for ($i=0; $i<count($content); $i++) //For-Schleife die jede einzelen Zeile nach dem searchkey durchsucht
{ 
if(ereg($searchkey, $content[$i])) //Wenn schlüssel gefunden ausgabe Datei leer
{echo $y; echo "-|-"; echo "Datei leer";}
else 
{ mysql_select_db("db", $verbindung) or die("Auswahl der Datenbank fehlgeschlagen!");
	$res = mysql_query($sql) or die("Anfrage fehlgeschlagen!");
	while ($row = mysql_fetch_object($res)) //solange Objekt in res
	 { 
 
	 for ($i=0; $i<count($content); $i++) //For-Schleife die jede einzelen Zeile nach der artikelnummer durchsucht
	 { 
		if(ereg($row->artnr, $content[$i])) //Wenn gefunden ausgabe
		 {echo $y; echo "-|-"; echo $row->artnr; echo "<br>";}
		else
		 {}//echo $y; echo "-|-"; echo "Nicht gefunden"; echo "<br>";}
	 }
	 }
}
}
//echo $y; //Counter ausgeben
//echo "<br>"; //Zeilenumbrüche
}
das $row muss in jedem durchlauf der For-SChleife anscheinende neu erstellt werden. Weiß jemand sonst noch einen Weg? Ist ja doch recht Performancelastig.
 
Zuletzt bearbeitet:
Zurück