PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   If / While Schleife funktioniert nicht (http://www.selfphp.de/forum/showthread.php?t=26015)

JayJericho 16.06.2017 19:32:14

If / While Schleife funktioniert nicht
 
Servus,

ich hab da ein kleines Problem, und ich glaub ich sehe gerade den Wald vor lauter Bäumen nicht mehr. Bin allerdings auch noch recht frisch in der Materie, von daher ist auch ein blutiger Anfängerfehler nicht ausgeschlossen

Ich habe ein kleines Script, welches eine Webseite parsen sol. Jedes mal, wenn es mit einer Nummer durch ist, soll es diese um 1 erhöhen, bis die Nummer nicht mehr vorhanden ist. Um zu sehen, ob die Zeile vorhanden ist, habe ich zuvor einen Check eingebaut.

Der Code funktioniert manuell wunderbar, er macht alles was er soll, auch wenn ich die Nummern verändere. Nur das automatisieren mit Schleife will nicht. Es folgen noch mehrere IF Bedingungen und das Zerlegen von Strings, aber das sollte eigentlich keinen Unterschied für die Schleife machen.

Fehlermeldung: Gibts keine, hängt sich einfach auf. Würde ja auf eine Dauerschleife tippen, wüsste aber nicht warum die dauerhaft laufen sollte.


Hier mal der Code

Code:


$web_page = http_get(hier kommt eine website rein);

// Schleife vorbereiten & String vorbereiten

$i ="3";                          // Nummer des Datenpakets was ich haben will
$i2 = 'data-number="';    //das ist der beginn der Daten die ich haben will
$i3 = $i2.$i;                    //Strings zusammensetzen                   


// Check ob Nummer vorhanden, Schleifenbedingung

$target = $web_page['FILE'];                                                 
$findno1  = $i3;                                            // Testen ob $i3 vorhanden ist
$pos = strpos($target, $findno1);                    //  true oder false

for($i; $pos == true); $i++)                          //und hier hängt es.

{

if ($pos == true)                                            // Wenn vorhanden, los gehts

{.......

Alternativ hatte ich es mit while ($pos == true) ...... $i++ versucht, kam aber zum selben Schluss. Irgendwas hab ich übersehen, aber ich komm nicht drauf.

Hoffe Ihr könnt helfen :)

vt1816 17.06.2017 00:49:08

AW: If / While Schleife funktioniert nicht
 
Hallo und wilkommen hier im Forum.

Kann $pos auch mal false werden? Wenn nicht, landest Du in einer Endlosschleife.
Leider wurde der Code um solch grundsätzliche Informationen gekürzt (Anfängerfehler).
WHILE wäre hier wohl die bessere Lösung, da Du nichts hoch zählst was Du auch abfragst.

JayJericho 17.06.2017 11:54:38

AW: If / While Schleife funktioniert nicht
 
Danke fürs Willkommenheißen :)

Ja, $pos wird falsch, sobald die nummer nicht mehr vorhanden ist, die else Funktion tritt dann ein. Das hat alles wunderbar geklappt, wenn ich es manuell eingebe, nur eben nicht wenn ich es in eine Schleife stecke :(


Der ganze Code ist ein wenig lang, um ihn hier zu posten, aber im Prinzip sieht das Ganze so aus (ohne Schleife)

Code:


$web_page = http_get(xxxx)

$i ="1";
$i2 = 'data-number="';
$i3 = $i2.$i;
$i4 = $i+1;                                                             

$target = $web_page['FILE'];                                               
$findno1  = $i3;                                                             
$pos = strpos($target, $findno1);                                           

                                                                           
if ($pos == true)                                                         

{

$nr1 = return_between($web_page['FILE'], 'data-index="'.$i, 'data-index="'.$i4, EXCL);

//Check ob No Runner

$nunrunner = $nr1;                                                           
$findnorunner  = "/silks/nonrunner.png";                                 
$posnorunner = strpos($nr1, $findnorunner);                                 

if ($posnorunner == false)                                                     

{

$starternr1 = return_between($nr1, 'data-number="', '"', EXCL);
echo "<p></p>",$starternr1;

//....... mehr code

$sg11 = return_between($nr1, 'name summary form-, '<i class="icon-tracker"></i></a></h2>', EXCL);

//....... mehr code

// das lässt sich leichter zusammenfassen, ist aber zum debuggen leichter für mich wenn es einzeln aufgelistet ist
$sg11 = strip_tags($sg11);
$sg11 = str_replace("&#xA;", "", $sg11);
$sg11 = str_replace("<th>", "", $sg11);
$sg11 = str_replace("</th>", "", $sg11);
$sg11 = str_replace("<td>", "", $sg11);
$sg11 = str_replace("</td>", "", $sg11);
$sg11 = str_replace("&amp", "", $sg11);
$sg11 = str_replace(";amp;", "", $sg11);
$sg12 = return_between($sg11, 'All', 'Grey ', INCL);
echo "<xmp>",$sg12,"</xmp>";

//....... mehr code


}

else                                                                     

{

$starternr1 = return_between($nr1, 'data-number="', '"', EXCL);
echo "<p></p>",$starternr1;
                                                                   
$form1 = return_between($nr1, 'card-form__stats">', '<', EXCL);
echo "<p></p>",$form1;

//....... mehr code

}

///////////////////////////// Ende IF Funktion 2


}


else

{
    echo "Ende";

}

?>

Ich habs mal ein wenig zusammengestrichen. Wenn ich die Nummer manuell variiere, stimm das Ergebnis immer. Lasse ich es mit einer Schleife und $i++ addieren, hängt sich z.B. Scriptly auf. Einmal hatte ich bei einer Konstruktion "empty needle" nach dem Abbruch als Fehlermeldung, lässt sich aber derzeit nicht reproduzieren.


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:13:10 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.