Semantischer Fehler in einem PHP-Skript
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aussehen
bahnhof
code
dank
fehler
frage
genauere angaben
hand
kleinen projekt
kollege
liegen
linie
schleife
stadt
station
url
verbindung
versuchen
vorschlag
ziel
-
Hi Leute,
Ich arbeite gerade an einem kleinen Projekt: http://busfahrplan-biel.tk
Das Ziel ist einfach: einen neuen Busfahrplan für meine Stadt :) Da ich mich jedoch nicht so gut mit PHP auskenne, habe ich einen Kollegen um Unterstützung gebeten und er hat mir auch geholfen... Jedoch gibt es seit der letztes Änderung einen Fehler und mein Kollege hat gerade nicht so viel Zeit also dachte ich, ich nehme das mal selber in die Hand und frage hier.
Also: wenn man jetzt zu der Seite navigiert, und dort z.B von Diamantstrasse nach Nidau, Bahnhof schreibt, zeigt es alle Verbindungen an, jedoch sind viele doppelt (und mehr). Je weiter man nach unten scrollt, desto mehr werden es. Also muss es wohl an irgendeiner Schleife liegen.... Zudem ist der HTML-Code ein bisschen schräg..
Das Ziel ist eigentlich, dass es aussieht wie unten an der Seite (habe es für euch eingefügt) und dann halt wie oben noch die Stationen und Linien zu Buttons werden (für die Abfahrtszeiten)
Hier ist der PHP-Code, um den es sich handelt:
$n=0; $out=explode("<table class=\"w3-table w3-centered w3-margin\">",$out); foreach($out as $value) { if($n>0) { $table=explode("</table>",$value)[0]; $table_r=explode("</table>",$value)[1]; $tds_tmp=explode("<td>",$table); $ths_tmp=explode("<th>",$table); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="→") $tds[]=$td_tmp; } foreach($ths_tmp as $th) { $th_tmp=explode("</th>",$th)[0]; $th_tmp_r=explode("</th>",$th)[1]; $ths[]=$th_tmp; $ths_r[]=$th_tmp_r; } foreach($ths as $key => $th) { $ln=explode($linie." ",$th)[1]; $th="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($tds[$key])."&via=".urlencode($tds[$key+1])."'\">".$th."</button>"; $ths_b[]=$th."</th>".$ths_r[$key]; } $table=implode("<th>",$ths_b); $value=$table."</table>".$table_r; } $tables[]=$value; $n++; } /*foreach($tables as $value) { $tds_tmp=explode("<td>",$value); $ths_tmp=explode("<th>",$value); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="→") $tds[]=$td_tmp; } foreach($ths_tmp as $th) { $th_tmp=explode("</th>",$th)[0]; $ths[]=$th_tmp; } foreach($ths as $key => $th) { $ln=explode($linie." ",$th)[1]; $ths_m[]="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($tds[$key])."&via=".urlencode($tds[$key+1])."'\">".$th."</button>"; } }*/ $out=implode("<table class=\"w3-table w3-centered w3-margin\">",$tables); //line $n=0; $out=explode("<th>", $out); foreach ($out as $value) { if ($n>0) { $ln=explode($linie." ", $value)[1]; $ln=explode("</th>", $ln)[0]; $value="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($stops[$n-1])."&via=".urlencode($stops[$n+1])."'\">".$value; } $out_tmp[]=$value; $n++; } $out=implode("<th>", $out_tmp); $n=0; $out=explode("</th>", $out); foreach ($out as $value) { if ($n<count($out)) { $value.="</button>"; } $out_tmp2[]=$value; $n++; } $out=implode("</th>", $out_tmp2); //stops $n=0; $out=explode("<td>",$out); foreach($out as $value) { if($n>0) { $stop=explode("</td>",$value)[0]; if($stop!="" &&$stop!="→") $value="<button class=\"w3-button\" onclick=\"location='?station=".urlencode($stop)."'\">".$value; } $out_tmp3[]=$value; $n++; } $out=implode("<td>",$out_tmp3); $n=0; $out=explode("</td>",$out); foreach($out as $value) { if($n<count($out)) $value.="</button>"; $out_tmp4[]=$value; $n++; } $out=implode("</td>",$out_tmp4); } ?>
Schon mal danke im Vorraus -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
oruam19 schrieb:
Hi Leute,
Ich arbeite gerade an einem kleinen Projekt: http://busfahrplan-biel.tk
Das Ziel ist einfach: einen neuen Busfahrplan für meine Stadt :) Da ich mich jedoch nicht so gut mit PHP auskenne, habe ich einen Kollegen um Unterstützung gebeten und er hat mir auch geholfen... Jedoch gibt es seit der letztes Änderung einen Fehler und mein Kollege hat gerade nicht so viel Zeit also dachte ich, ich nehme das mal selber in die Hand und frage hier.
Also: wenn man jetzt zu der Seite navigiert, und dort z.B von Diamantstrasse nach Nidau, Bahnhof schreibt, zeigt es alle Verbindungen an, jedoch sind viele doppelt (und mehr). Je weiter man nach unten scrollt, desto mehr werden es. Also muss es wohl an irgendeiner Schleife liegen.... Zudem ist der HTML-Code ein bisschen schräg..
Schon mal danke im Vorraus
Bei den vielen implode und explode wird einem schon schwindelig.
Du verwendest sicherlich eine DB. Dein Projekt lässt sich effizienter und deutlich übersichtlicher gestalten.
Denn genau darum gehtsJedoch gibt es seit der letztes Änderung einen Fehler
Gute Scripte sind leicht zu warten, was bei deinem Code offensichtlich nicht der Fall ist.
Poste mal deine Db-Abfrage, dann wird dir sicherlich geholfen.
Beitrag zuletzt geändert: 23.5.2018 22:26:40 von timebandit -
timebandit schrieb:
oruam19 schrieb:
Hi Leute,
Ich arbeite gerade an einem kleinen Projekt: http://busfahrplan-biel.tk
Das Ziel ist einfach: einen neuen Busfahrplan für meine Stadt :) Da ich mich jedoch nicht so gut mit PHP auskenne, habe ich einen Kollegen um Unterstützung gebeten und er hat mir auch geholfen... Jedoch gibt es seit der letztes Änderung einen Fehler und mein Kollege hat gerade nicht so viel Zeit also dachte ich, ich nehme das mal selber in die Hand und frage hier.
Also: wenn man jetzt zu der Seite navigiert, und dort z.B von Diamantstrasse nach Nidau, Bahnhof schreibt, zeigt es alle Verbindungen an, jedoch sind viele doppelt (und mehr). Je weiter man nach unten scrollt, desto mehr werden es. Also muss es wohl an irgendeiner Schleife liegen.... Zudem ist der HTML-Code ein bisschen schräg..
Schon mal danke im Vorraus
Bei den vielen implode und explode wird einem schon schwindelig.
Du verwendest sicherlich eine DB. Dein Projekt lässt sich effizienter und deutlich übersichtlicher gestalten.
Denn genau darum gehtsJedoch gibt es seit der letztes Änderung einen Fehler
Gute Scripte sind leicht zu warten, was bei deinem Code offensichtlich nicht der Fall ist.
Poste mal deine Db-Abfrage, dann wird dir sicherlich geholfen.
Ich verwende eben keine DB...
Ich weiss, es ist wirr, ich schaue es sonst mal an und versuche es mal selber oder warte, bis mein Kollege wieder Zeit hat. -
Ok, ohne Db wird es umständlicher.
Welche Werte stehen im array $out deines Beispiels?
$out=explode("<table class=\"w3-table w3-centered w3-margin\">",$out);
Benutze hierfür var_dump($out) und poste die Werte. Ich werde versuchen die Tabellen nachzubauen. -
Guten Morgen,
Also $out ist das, was unten an der Seite ist (unter "So sollte es aussehen"). So sollte es eben aussehen und einfach die Stationen und Linien sollten anclickbar sein (für genauere Angaben)
Wenn du nichts findest, versuche ich es sonst mal selber... -
oruam19 schrieb:
Guten Morgen,
Also $out ist das, was unten an der Seite ist (unter "So sollte es aussehen"). So sollte es eben aussehen und einfach die Stationen und Linien sollten anclickbar sein (für genauere Angaben)
Wenn du nichts findest, versuche ich es sonst mal selber...
Ich habe dein Script mal nachgebaut natürlich ohne dein CSS.
$inStr='<div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 2</th><td></td><th>Linie 4</th><td></td></tr><tr><td>Diamantstrasse</td><td>→</td><td>Bahnhof Biel</td><td>→</td><td>Nidau, Bahnhof</td></tr></table></div><div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 2</th><td></td><th>Linie 6</th><td></td></tr><tr><td>Diamantstrasse</td><td>→</td><td>Gurnigelstrasse</td><td>→</td><td>Nidau, Bahnhof</td></tr></table></div><div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 7</th><td></td><th>Linie 4</th><td></td></tr><tr><td>Diamantstrasse</td><td>→</td><td>Bahnhof Biel</td><td>→</td><td>Nidau, Bahnhof</td></tr></table></div><div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 7</th><td></td><th>Linie 6</th><td></td></tr><tr><td>Diamantstrasse</td><td>→</td><td>Brüggmoos</td><td>→</td><td>Nidau, Bahnhof</td></tr></table></div> <div class="w3-container w3-margin w3-padding-48"><p> </p></div>'; $n=0; $inStr=explode("<table class=\"w3-table w3-centered w3-margin\">",$inStr); foreach($inStr as $value) {//echo $value.PHP_EOL; if($n>0) { $table=explode("</table>",$value)[0]; $table_r=explode("</table>",$value)[1]; $tds_tmp=explode("<td>",$table); $ths_tmp=explode("<th>",$table); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="→") $tds[]=$td_tmp; } foreach($ths_tmp as $th) { $th_tmp=explode("</th>",$th)[0]; $th_tmp_r=explode("</th>",$th)[1]; $ths[]=$th_tmp; $ths_r[]=$th_tmp_r; } foreach($ths as $key => $th) { $ln=explode($linie." ",$th)[1]; $th="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($tds[$key])."&via=".urlencode($tds[$key+1])."'\">".$th."</button>"; $ths_b[]=$th."</th>".$ths_r[$key]; } $table=implode("<th>",$ths_b); /* ------------------------------ Hier steckt der Fehler ---------------------------------- //$value=$table."</table>".$table_r; ---------------------------------------------------------------------------------------------------*/ } $tables[]=$value; $n++; }
Als Verarbeitungsstring habe ich, wie von dir angegeben, die Variable $out verwendet und in $inStr umbenannt.
Hier mein Vorschlaghttps://timebandit.lima-city.de/forum-lima/fahrplan.php -
Danke viel mals!
Ich versuche das mal so einzubauen (am Abend) und schaue, obs geht.
Aber vielen Dank!
EDIT:
timebandit schrieb:
oruam19 schrieb:
Guten Morgen,
Also $out ist das, was unten an der Seite ist (unter "So sollte es aussehen"). So sollte es eben aussehen und einfach die Stationen und Linien sollten anclickbar sein (für genauere Angaben)
Wenn du nichts findest, versuche ich es sonst mal selber...
Ich habe dein Script mal nachgebaut natürlich ohne dein CSS.
$inStr='<div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 2</th><td></td><th>Linie 4</th><td></td></tr><tr><td>Diamantstrasse</td><td>?</td><td>Bahnhof Biel</td><td>?</td><td>Nidau, Bahnhof</td></tr></table></div><div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 2</th><td></td><th>Linie 6</th><td></td></tr><tr><td>Diamantstrasse</td><td>?</td><td>Gurnigelstrasse</td><td>?</td><td>Nidau, Bahnhof</td></tr></table></div><div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 7</th><td></td><th>Linie 4</th><td></td></tr><tr><td>Diamantstrasse</td><td>?</td><td>Bahnhof Biel</td><td>?</td><td>Nidau, Bahnhof</td></tr></table></div><div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 7</th><td></td><th>Linie 6</th><td></td></tr><tr><td>Diamantstrasse</td><td>?</td><td>Brüggmoos</td><td>?</td><td>Nidau, Bahnhof</td></tr></table></div> <div class="w3-container w3-margin w3-padding-48"><p> </p></div>'; $n=0; $inStr=explode("<table class=\"w3-table w3-centered w3-margin\">",$inStr); foreach($inStr as $value) {//echo $value.PHP_EOL; if($n>0) { $table=explode("</table>",$value)[0]; $table_r=explode("</table>",$value)[1]; $tds_tmp=explode("<td>",$table); $ths_tmp=explode("<th>",$table); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="?") $tds[]=$td_tmp; } foreach($ths_tmp as $th) { $th_tmp=explode("</th>",$th)[0]; $th_tmp_r=explode("</th>",$th)[1]; $ths[]=$th_tmp; $ths_r[]=$th_tmp_r; } foreach($ths as $key => $th) { $ln=explode($linie." ",$th)[1]; $th="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($tds[$key])."&via=".urlencode($tds[$key+1])."'\">".$th."</button>"; $ths_b[]=$th."</th>".$ths_r[$key]; } $table=implode("<th>",$ths_b); /* ------------------------------ Hier steckt der Fehler ---------------------------------- //$value=$table."</table>".$table_r; ---------------------------------------------------------------------------------------------------*/ } $tables[]=$value; $n++; }
Als Verarbeitungsstring habe ich, wie von dir angegeben, die Variable $out verwendet und in $inStr umbenannt.
Hier mein Vorschlaghttps://timebandit.lima-city.de/forum-lima/fahrplan.php
Zuerst mal Danke! Es funktioniert, jedoch nur so halb. Hier der Code:
$n=0; $out=explode("<table class=\"w3-table w3-centered w3-margin\">",$out); foreach($out as $value) { if($n>0) { $table=explode("</table>",$value)[0]; $table_r=explode("</table>",$value)[1]; $tds_tmp=explode("<td>",$table); $ths_tmp=explode("<th>",$table); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="→") $tds[]=$td_tmp; } foreach($ths_tmp as $th) { $th_tmp=explode("</th>",$th)[0]; $th_tmp_r=explode("</th>",$th)[1]; $ths[]=$th_tmp; $ths_r[]=$th_tmp_r; } foreach($ths as $key => $th) { $ln=explode($linie." ",$th)[1]; $th="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=" . urlencode($tds[$key]) . "&via=" . urlencode($tds[$key+1]) . "'\">".$th."</button>"; $ths_b[]=$th."</th>".$ths_r[$key]; } $table=implode("<th>",$ths_b); /* ------------------------------ Hier steckt der Fehler ---------------------------------- //$value=$table."</table>".$table_r; ---------------------------------------------------------------------------------------------------*/ } $tables[]=$value; $n++; } /*foreach($tables as $value) { $tds_tmp=explode("<td>",$value); $ths_tmp=explode("<th>",$value); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="→") $tds[]=$td_tmp; } foreach($ths_tmp as $th) { $th_tmp=explode("</th>",$th)[0]; $ths[]=$th_tmp; } foreach($ths as $key => $th) { $ln=explode($linie." ",$th)[1]; $ths_m[]="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($tds[$key])."&via=".urlencode($tds[$key+1])."'\">".$th."</button>"; } }*/ $out=implode("<table class=\"w3-table w3-centered w3-margin\">",$tables); //line $n=0; $out=explode("<th>", $out); foreach ($out as $value) { if ($n>0) { $ln=explode($linie." ", $value)[1]; $ln=explode("</th>", $ln)[0]; $value="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($stops[$n-1])."&via=".urlencode($stops[$n+1])."'\">".$value; } $out_tmp[]=$value; $n++; } $out=implode("<th>", $out_tmp); $n=0; $out=explode("</th>", $out); foreach ($out as $value) { if ($n<count($out)) { $value.="</button>"; } $out_tmp2[]=$value; $n++; } $out=implode("</th>", $out_tmp2); //stops $n=0; $out=explode("<td>",$out); foreach($out as $value) { if($n>0) { $stop=explode("</td>",$value)[0]; if($stop!="" &&$stop!="→") $value="<button class=\"w3-button\" onclick=\"location='?station=".urlencode($stop)."'\">".$value; } $out_tmp3[]=$value; $n++; } $out=implode("<td>",$out_tmp3); $n=0; $out=explode("</td>",$out); foreach($out as $value) { if($n<count($out)) $value.="</button>"; $out_tmp4[]=$value; $n++; } $out=implode("</td>",$out_tmp4); } ?>
Das Problem ist jetzt, dass die Verbindung zu den beiden "Teilen" (vor und nach dem Fehler) fehlt. Nämlich sollte, wenn man auf die den Linienknopf drückt auch noch die GET Werte für via und station ausgefüllt sein. Und das passiert direkt oberhalb des Fehlers (also beim $ths_b) Ich weiss halt nicht, wie man die beiden "Teile" verbinden könnte
Beitrag zuletzt geändert: 24.5.2018 17:40:28 von oruam19 -
Füge an den Anfang deines Scripts diese beiden Codezeilen ein:
und sei nicht überrascht, wenn eine lange Liste an Meldungen angezeigt wird.ini_set('display_errors', 1); error_reporting(E_ALL);
Das komplette Script kenne ich nicht, aber der Code den du gepostet hast ist voller Fehler.
Die GET-Anweisungen funktionieren nicht, weil z.B. die Variable $stop nicht initialisiert wird.
In meinem Nachbau wirds richtig dargestellt.
<td><button class="w3-button" onclick="location='?station=Diamantstrasse'">Diamantstrasse </button></td>
-
[/quote]Hallo,
Also ich hab das jetzt so eingerichtet und es kommen auch Fehlermeldungen...
Und ich meinte eigentlich nicht den Stationsknopf sondern den Linienknopf. Wenn man jetzt dort drauf drückt, kommt https://busfahrplan-biel.tk/index.php?line=2&station=&via= und nicht https://busfahrplan-biel.tk/index.php?line=2&station=Diamantstrasse&via=Bahnhof+Bieltimebandit schrieb:
In meinem Nachbau wirds richtig dargestellt.
<td><button class="w3-button" onclick="location='?station=Diamantstrasse'">Diamantstrasse </button></td>
Also das, das auch bei dir nicht geht
Beitrag zuletzt geändert: 24.5.2018 19:37:05 von oruam19 -
Die Variable $stops ist nicht initialisiert,deshalb funktioniert das Konstrukt nicht.
$value="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($stops[$n-1])."&via=".urlencode($stops[$n+1])."'\">".$value;
Ich lasse mir hierfür noch etwas einfallen.
Beitrag zuletzt geändert: 24.5.2018 20:45:47 von timebandit -
Hab's jetzt noch ein bisschen hingebogen....
Das Problem ist jetzt einfach, dass auf in den GET-Viriablen (station und via) jetzt manchmal <tr> auftaucht, obwohl das im Array gar nicht vorkommt... Suche jetzt aber noch ein bisschen weiter
EDIT:
GESCHAFFT! denke ich
Ich hab's hingekriegt, indem ich an dem $n rumgeschraubt habe
Vielen Dank @timebandit
Beitrag zuletzt geändert: 24.5.2018 21:29:42 von oruam19 -
oruam19 schrieb:
Hab's jetzt noch ein bisschen hingebogen....
GESCHAFFT! denke ich
Ich hab's hingekriegt, indem ich an dem $n rumgeschraubt habe
Vielen Dank @timebandit
Meinen Glückwunsch, @oruam19.
Ich meine aber, dass dein Script gründlich überarbeitet werden sollte. Ein gutes Script zeichnet sich auch durch nicht zu komplizierte Wartbarkeit aus. Kommentare innerhalb von Codezeilen sind immer hilreich.
Ich finde das Konzept(?) einen String, der ja bereits ein Tabellenformat hat, in ein bzw. mehrere Arrays zu quetschen, zu bearbeiten und dann wieder die einzelnen Arrays in Teilstrings und schließlich in einem Ausgabestring zusammenzukleben reichlich unpraktisch und fehleranfallig. Am sinnvollsten wäre imho eine Datenbankanbindung. Jedenfalls hast du für dich eine Lösung gefunden und Erfahrungen gesammmelt, wie mühsam ein Debugging von Scripts sein kann. -
Das würde ich mir auch nocheinmal überlegen. Vorallem wenn das vom Benutzer übergebene Daten sind
if($stop!="" &&$stop!="→")
:P
Beitrag zuletzt geändert: 29.6.2018 16:29:17 von buergerforum -
oruam19 schrieb:
Danke viel mals!
Ich versuche das mal so einzubauen (am Abend) und schaue, obs geht.
Aber vielen Dank!
EDIT:
timebandit schrieb:
oruam19 schrieb:
Guten Morgen,
Also $out ist das, was unten an der Seite ist (unter "So sollte es aussehen"). So sollte es eben aussehen und einfach die Stationen und Linien sollten anclickbar sein (für genauere Angaben)
Wenn du nichts findest, versuche ich es sonst mal selber...
Ich habe dein Script mal nachgebaut natürlich ohne dein CSS.
$inStr='<div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 2</th><td></td><th>Linie 4</th><td></td></tr><tr><td>Diamantstrasse</td><td>?</td><td>Bahnhof Biel</td><td>?</td><td>Nidau, Bahnhof</td></tr></table></div><div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 2</th><td></td><th>Linie 6</th><td></td></tr><tr><td>Diamantstrasse</td><td>?</td><td>Gurnigelstrasse</td><td>?</td><td>Nidau, Bahnhof</td></tr></table></div><div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 7</th><td></td><th>Linie 4</th><td></td></tr><tr><td>Diamantstrasse</td><td>?</td><td>Bahnhof Biel</td><td>?</td><td>Nidau, Bahnhof</td></tr></table></div><div class="w3-container w3-display-container w3-card w3-margin w3-panel"><table class="w3-table w3-centered w3-margin"><tr><td></td><th>Linie 7</th><td></td><th>Linie 6</th><td></td></tr><tr><td>Diamantstrasse</td><td>?</td><td>Brüggmoos</td><td>?</td><td>Nidau, Bahnhof</td></tr></table></div> <div class="w3-container w3-margin w3-padding-48"><p> </p></div>'; $n=0; $inStr=explode("<table class=\"w3-table w3-centered w3-margin\">",$inStr); foreach($inStr as $value) {//echo $value.PHP_EOL; if($n>0) { $table=explode("</table>",$value)[0]; $table_r=explode("</table>",$value)[1]; $tds_tmp=explode("<td>",$table); $ths_tmp=explode("<th>",$table); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="?") $tds[]=$td_tmp; } foreach($ths_tmp as $th) { $th_tmp=explode("</th>",$th)[0]; $th_tmp_r=explode("</th>",$th)[1]; $ths[]=$th_tmp; $ths_r[]=$th_tmp_r; } foreach($ths as $key => $th) { $ln=explode($linie." ",$th)[1]; $th="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($tds[$key])."&via=".urlencode($tds[$key+1])."'\">".$th."</button>"; $ths_b[]=$th."</th>".$ths_r[$key]; } $table=implode("<th>",$ths_b); /* ------------------------------ Hier steckt der Fehler ---------------------------------- //$value=$table."</table>".$table_r; ---------------------------------------------------------------------------------------------------*/ } $tables[]=$value; $n++; }
Als Verarbeitungsstring habe ich, wie von dir angegeben, die Variable $out verwendet und in $inStr umbenannt.
Hier mein Vorschlaghttps://timebandit.lima-city.de/forum-lima/fahrplan.php
Zuerst mal Danke! Es funktioniert, jedoch nur so halb. Hier der Code:
$n=0; $out=explode("<table class=\"w3-table w3-centered w3-margin\">",$out); foreach($out as $value) { if($n>0) { $table=explode("</table>",$value)[0]; $table_r=explode("</table>",$value)[1]; $tds_tmp=explode("<td>",$table); $ths_tmp=explode("<th>",$table); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="→") $tds[]=$td_tmp; } foreach($ths_tmp as $th) { $th_tmp=explode("</th>",$th)[0]; $th_tmp_r=explode("</th>",$th)[1]; $ths[]=$th_tmp; $ths_r[]=$th_tmp_r; } foreach($ths as $key => $th) { $ln=explode($linie." ",$th)[1]; $th="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=" . urlencode($tds[$key]) . "&via=" . urlencode($tds[$key+1]) . "'\">".$th."</button>"; $ths_b[]=$th."</th>".$ths_r[$key]; } $table=implode("<th>",$ths_b); /* ------------------------------ Hier steckt der Fehler ---------------------------------- //$value=$table."</table>".$table_r; ---------------------------------------------------------------------------------------------------*/ } $tables[]=$value; $n++; } /*foreach($tables as $value) { $tds_tmp=explode("<td>",$value); $ths_tmp=explode("<th>",$value); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="→") $tds[]=$td_tmp; } foreach($ths_tmp as $th) { $th_tmp=explode("</th>",$th)[0]; $ths[]=$th_tmp; } foreach($ths as $key => $th) { $ln=explode($linie." ",$th)[1]; $ths_m[]="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($tds[$key])."&via=".urlencode($tds[$key+1])."'\">".$th."</button>"; } }*/ $out=implode("<table class=\"w3-table w3-centered w3-margin\">",$tables); //line $n=0; $out=explode("<th>", $out); foreach ($out as $value) { if ($n>0) { $ln=explode($linie." ", $value)[1]; $ln=explode("</th>", $ln)[0]; $value="<button class=\"w3-button\" onclick=\"location='?line=".$ln."&station=".urlencode($stops[$n-1])."&via=".urlencode($stops[$n+1])."'\">".$value; } $out_tmp[]=$value; $n++; } $out=implode("<th>", $out_tmp); $n=0; $out=explode("</th>", $out); foreach ($out as $value) { if ($n<count($out)) { $value.="</button>"; } $out_tmp2[]=$value; $n++; } $out=implode("</th>", $out_tmp2); //stops $n=0; $out=explode("<td>",$out); foreach($out as $value) { if($n>0) { $stop=explode("</td>",$value)[0]; if($stop!="" &&$stop!="→") $value="<button class=\"w3-button\" onclick=\"location='?station=".urlencode($stop)."'\">".$value; } $out_tmp3[]=$value; $n++; } $out=implode("<td>",$out_tmp3); $n=0; $out=explode("</td>",$out); foreach($out as $value) { if($n<count($out)) $value.="</button>"; $out_tmp4[]=$value; $n++; } $out=implode("</td>",$out_tmp4); } ?>
Das Problem ist jetzt, dass die Verbindung zu den beiden "Teilen" (vor und nach dem Fehler) fehlt. Nämlich sollte, wenn man auf die den Linienknopf drückt auch noch die GET Werte für via und station ausgefüllt sein. Und das passiert direkt oberhalb des Fehlers (also beim $ths_b) Ich weiss halt nicht, wie man die beiden "Teile" verbinden könnte
wie wäre es mit:
$n=0; $inStr=explode("<table class=\"w3-table w3-centered w3-margin\">",$inStr); foreach($inStr as $value) {//echo $value.PHP_EOL; if($n>0) { $table=explode("<table>",$value)[0]; $table_r=explode("</table>",$value)[1]; $tds_tmp=explode("<td>",$table); $ths_tmp=explode("<th>",$table); foreach($tds_tmp as $td) { $td_tmp=explode("</td>",$td)[0]; if($td_tmp!="" &&$td_tmp!="?") $tds[]=$td_tmp; }
also <table> anstatt </table> in der Variable $table? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage