Ja,
Danke für die "Unterrichtsstunde". Werde mir das genau anschauen, functions habe ich ja schon eingesetzt, aber beispielweise weiß ich noch nicht, ob ich auch mehrere Variable übergeben kann usw.
Gruß
newbie1955
foreach - Schleifen und arrays
Einklappen
X
-
3 x Hallo WeltZitat von newbie1955 Beitrag anzeigenich glaube mit Klassen muss ich mich noch mal beschäftigen
Du bist hier:
Das solltest Du lernen, bis Du es richtig kannst:PHP-Code:<?php
$variable = " Welt<br>\n";
echo "Hallo".$variable;
?>
Und bevor das letzte nicht richtig sitzt, würde ich an Deiner Stelle damit nicht beginnen, falls Dir bis dahin nicht die Lust vergangen sein sollte:PHP-Code:<?php
function meineBegruessung($uebergabe) {
return $uebergabe." Welt<br>\n";
}
echo meineBegruessung("Hallo");
?>
Heraus kommt ohnehin nur:PHP-Code:
<?php
class HalloKlasse {
public $eigenschaft1;
private $eigenschaft2 = "Welt";
public function meineBegruessung() {
return $this->eigenschaft1." ".$this->eigenschaft2."<br>\n";
}
}
$erstelle = new HalloKlasse();
$erstelle->eigenschaft1 = "Hallo";
echo $erstelle->meineBegruessung();
?>
Hallo Welt
Hallo Welt
Hallo Welt
Einen Kommentar schreiben:
-
Also,
ich glaube mit Klassen muss ich mich noch mal beschäftigen, werde mal hier
PHP Class Tutorial - PHP Klassen erklärt ein wenig studieren, denn sonst kapiere ich den Unterschied zwischen "in" und "außerhalb" der Klasse auch nicht so recht.
Jetzt hake ich noch am  -Problem rum.
Gruß
newbie1955
Einen Kommentar schreiben:
-
Ja sicher, nur mir fliegt das auch nicht zu. Ergänzung, noch Nachricht darf nicht false sein, dann wird das unten folgende und völlig leere item übersprungen und dieses item, welches nur einen Link enthält, so angezeigt wie im IE und FF. Eine zusätzliche schließende Klammer an entsprechender Stelle nicht vergessen, also vor der schließenden Klammer der foreach.Zitat von newbie1955 Beitrag anzeigenEigentlich muss es doch aber möglich sein, ihm zu sagen: "wenn da nix drin ist, überspring ihn halt und zähle ihn nicht mit."
Nur warum das jetzt bei der Klasse nicht so funktioniert, habe ich noch nicht herausgefunden, da verstehe ich gerade etwas nicht.PHP-Code:if (strlen($lesen[0]->title) > 0 or strlen($lesen[1]->title) > 0) {
foreach ($lesen as $nachricht) {
if ($nachricht != false) {
Edit: Du kannst stattdessen aber auch bestimmen, dass zum Beispiel alle item übersprungen werden, die keinen Titel enthalten.
Ist eigentlich mit das Einfachste, Fragen und Bedingungen zu bestimmen, wann das Script was machen soll. Nur ab und an fallen mir die passenden Fragen für die Bedingungen nicht gleich ein, wie bei der ersten Zeile. Hatte auch nicht gleich begriffen, wieso sich diese leeren itemPHP-Code:if (strlen($lesen[0]->title) > 0 or strlen($lesen[1]->title) > 0) {
foreach ($lesen as $nachricht) {
if ($nachricht->title != false) {
außerhalb einer Klasse mitPHP-Code:SimpleXMLElement Object
(
[title] => SimpleXMLElement Object
(
)
[description] => SimpleXMLElement Object
(
)
)
abfangen lassen, innerhalb einer Klasse hingegen nur mit einem Statement wie diesemPHP-Code:if ($nachricht != false) {
nicht aber mit:PHP-Code:if ($nachricht->title != false) {
Könnte wohl daran liegen, dass $nachricht nicht wirklich leer ist, sondern noch zwei leere Objekte enthält. var_dump((bool) ...) scheint überall true zu liefern, egal wo, ob innerhalb oder außerhalb einer Klasse, ob mit oder oder ->title. Zumindest scheint es ja zuverlässig zu funktionieren.PHP-Code:if ($nachricht != false) {
Zuletzt geändert von Melewo; 15.06.2013, 16:40.
Einen Kommentar schreiben:
-
Danke
für Deine Mühe. Ich hatte auch etwas versucht mit "continue" und Zaehler hochsetzen, damit er bei fehlendem Inhalt einfach den nächsten item probiert, leider hat das nicht geklappt (leider ohne dass ich kapiert hätte, wieso.)
So wie Du es jetzt geschrieben hat, funktioniert das erstmal, muss nur sehen, dass ich in der Regel nur 10 feeds bekomme, evtl. könnte ich ja die Zahl der gewünschten feeds ebenso aus der Seite an die Feedfunktion.php übergeben wie ich die url übergebe.
Eigentlich muss es doch aber möglich sein, ihm zu sagen: "wenn da nix drin ist, überspring ihn halt und zähle ihn nicht mit."
Will Dich nicht von der Arbeit abhalten, antworte halt, wenn Du Zeit hast. Ich muss da sowieso noch ewig dran rumfummeln wg. der   und sonstiger description-Feingestaltung.
Gruß
newbieZuletzt geändert von newbie1955; 15.06.2013, 11:24.
Einen Kommentar schreiben:
-
Ändere mal von:Zitat von newbie1955 Beitrag anzeigenaber da sind noch mehr vermurkste items drin, deshalb bricht er dann nach dem 8. ab.
in:PHP-Code:if ($lesen != false) {
Dann wird halt ersatzweise statt auf false auf Anzahl von Zeichen in den ersten beiden Titeln kontrolliert, also ob wenigsten einer der ersten beiden Titel mehr als 0 Zeichen enthält. Der bricht nicht bei den anderen leeren Item ab, der macht bei den nächsten Items weiter, was Du aber nur siehst, wenn Du die Anzahl mal von $maxim = 12 auf $maxim = 14 oder mehr erhöhst.PHP-Code:if (strlen($lesen[0]->title) > 0 or strlen($lesen[1]->title) > 0) {
Wollte mich nie so lange mit dem Script beschäftigen, irgendwie müsste ich mich auch noch um ein paar andere Dinge kümmern. Fehlerkontrolle ist ja gut, umso ausgereifter wird das Script ja. Nur ich wüsste nicht was ich mit dem Ding anfangen könnte, außer so wie das alte Script zum Download anzubieten. Und einige wichtigere Dinge hätte ich schon noch zu tun. Doch wenn ich dann weiß, dieses oder jenes könnte noch verbessert werden, dann lässt mich das zuweilen auch keine Ruhe.
Dabei liegen die Fehler ja eigentlich nicht am Script, sondern an den fehlerhaften Feeds. Letztendlich ist es so wie mit den Browsern, die versuchen auch jede HTML-Seite mit X oder mehr Fehlern noch vernünftig darzustellen.
Einen Kommentar schreiben:
-
Habe
jetzt erstmal $lesen[1] geprüft und dann geht es, aber da sind noch mehr vermurkste items drin, deshalb bricht er dann nach dem 8. ab. werde mal noch ein wenig rumprobieren.
Eine Idee zum  -Eliminieren?
Gruß
newebie1955
Einen Kommentar schreiben:
-
Hast Du richtig erfasst, da knobele ich die ganze Zeit schon herum und mir fällt nichts Vernünftiges ein. Im if-Statement wird nur das (oder der?) erste item überprüft, also item[0] und wenn leer und somit false, fängt die foreach-Schleife nicht an die restlichen zu durchlaufen.Zitat von newbie1955 Beitrag anzeigenmüsste ich wohl versuchen, den ersten item zu überspringen?
Wenn ich nach den ersten beiden mit and frage, geht es auch nicht, da ja dann beide nicht false sein dürfen.PHP-Code:if ($lesen != false) {
foreach ($lesen as $nachricht) {
Und mit or fällt mir gleich gar nichts ein. Das ist ja jetzt etwas zum Knobeln für Dich, falls mir nichts einfällt. Du könntest sicherlich einfach eine [1] hinter setzen, doch dann würde der wieder nichts liefern, falls morgen beim nächsten Feed das zweite item leer ist.PHP-Code:if ($lesen[0] != false and $lesen[1] != false) {
PHP-Code:if ($lesen[1] != false) {
foreach ($lesen as $nachricht) {
Einen Kommentar schreiben:
-
Dann
müsste ich wohl versuchen, den ersten item zu überspringen?
Außerdem versuche ich gerade, aus manchen Descriptions/Summarys usw. noch die überflüssigen Zeichen rauszubekommen. Die Süddeutsche hat zum Beispiel immer zum Schluss ein       dran, das ich mit trim und str_replace auch nicht wegbekomme.
Habe dann noch diverse Sachen durchprobiert, die bei stackoverflow empfohlen werden (try this....), aber da kam nix vernünftiges bei raus.PHP-Code:$desc = ($nachricht->description);
$desc = trim($desc);
str_replace(" ", "", $desc);
Vielleicht werde ich einfach bei jeder Description nach zwei Sätzen Schluss machen, mehr muss da ja sowieso nicht ausgegeben werden. Zumal sowieso bei manchen noch zusätzliche Teasing-Infos ausgegeben werde, die ich nicht brauche (Mehr dazu....)...
Zuz Validität, da muss ich wohl auf HTML geprüft haben...Zuletzt geändert von newbie1955; 14.06.2013, 22:57.
Einen Kommentar schreiben:
-
Hast Du den für Feeds benutzt?Zitat von newbie1955 Beitrag anzeigenBei meinem feedcheck kam ein well-formed heraus.
Bei mir war alles gelb, habe es angehängt.
Kann eigentlich nur daran liegen, dass der mit einem leeren Item beginnt. Einiges an Fehlern schluckt und verarbeitet der ja nun schon, doch halt nicht alle Fehler, die andere noch schlucken würden. Hier mal eine Ausgabe mit print_r().
Wenn ich den leeren Abschnitt <item><title/><description/></item> entferne, dann ladet der Feed normal.PHP-Code:[item] => Array
(
[0] => SimpleXMLElement Object
(
[title] => SimpleXMLElement Object
(
)
[description] => SimpleXMLElement Object
(
)
)
[1] => SimpleXMLElement Object
(
[title] => A...
[description] => S...
[link] => http: ...
)
[2] => SimpleXMLElement Object
(
[title] => A...
[description] => L...
[link] => http: ...
)
PHP-Code:[item] => Array
(
[0] => SimpleXMLElement Object
(
[title] => A...
[description] => S...
[link] => http: ...
)
[1] => SimpleXMLElement Object
(
[title] => A...
[description] => L...
[link] => http: ...
)
[2] => SimpleXMLElement Object
(
[title] => S...
[description] => 1....
[link] => http: ...
)
Angehängte DateienZuletzt geändert von Melewo; 14.06.2013, 21:40.
Einen Kommentar schreiben:
-
Habe ich doch auch überprüft
ganz blöd bin ich ja auch nicht. Bei meinem feedcheck kam ein well-formed heraus. (siehe screenshot unten)Angehängte Dateien
Einen Kommentar schreiben:
-
Mal abgesehen davon, dass der Feed invalide ist, was Du ja mit
W3C Feed Validation Service, for Atom and RSS
überprüfen kannst, sehe ich einen möglichen Grund darin, dass im ersten Item nichts enthalten ist. Möglich, dass das Script sich daran verschluckt und dann die restlichen nicht mehr ausgibt.
Doch wie bereits geschrieben, es wäre unangebracht hier jeden verkorksten Feed beurteilen zu wollen.HTML-Code:<?xml version="1.0" encoding="ISO-8859-1"?> <rss version="2.0"> <channel> <title><![CDATA[...]]></title> <link>http://www....</link> <description/> <language>Deutsch</language> <copyright>copyright</copyright> <webMaster>webmaster</webMaster> <ttl>300000</ttl> <item> <title/> <description/> </item>
Das andere muss ich erst suchen.
Einen Kommentar schreiben:
-
Also
an die Zusage für ein Tutorial kann ich mich nicht erinnern. Das würde wohl noch ein paar Jahre dauern.
Welche allgemeine Frage meinst Du? Also ich glaube, diese Baumstruktur habe ich schon verstanden - auch wenn ich manchmal beim Durchlesen eines Quelltextes nicht so richtig sehe, wo ein node endet und der nächste anfängt, vor allem, wenn nicht richtig geschlossen wird. Ich komme ja auch inzwischen an alle Werte ran, Naja, wer viel dumme Fragen fragt, muss sich dann ja auch den Spott über Rentner-PHPler anhören...(ich will mir ja nix beweisen - und im Alter wird man angeblich wieder wie ein Kid)
Aber mal was anderes, hast Du eine Ahnung, warum der heute-feed nicht mit Deinem feedreader nicht funktioniert? Ist doch rss 2.0?
<![CDATA[ZDFheute | Nachrichten - Startseite]]>
Also beim Betrachten des Quelltextes fällt mir nix Störendes auf.
Gruß newbie1955
P.S. ich glaube gern, dass Kleinverlage sich keine Lektoren leisten können, ich frage mich nur, ob die Autorin dankbar ist für Hinweise auf Druck- und sonstige Fehler (für die nächste Auflage) oder nicht.
Das mit dem NDR habe ich so gemacht:
PHP-Code:$data = file_get_contents('http://www.ndr.de/info/nachrichten287.html');
$doc = new DOMDocument();
$doc->loadHTML($data);
$zaehler = 0;
$descs = $doc->getElementsByTagName("p");
foreach ($descs as $node2)
{
if (($zaehler <= 10)&& ($node2->nodeValue !== '') && ($node2->nodeValue !== NULL)){
$array[$zaehler] = $node2->nodeValue;
$zaehler++;
}
}
$result = $doc->getElementsByTagName("h2");
$zaehler = 0;
foreach ($result as $node)
{
if (($zaehler <= 10)&& ($node->nodeValue !== '') && ($node->nodeValue !== NULL)){
echo '<li><a href="http://www.ndr.de/info/nachrichten287.html" target="_blank" title ="' . $array[$zaehler].'" >'.
$node->nodeValue . '</a></li>';
$zaehler++;
}
}
?>
Zuletzt geändert von newbie1955; 14.06.2013, 20:04.
Einen Kommentar schreiben:
-
Da gibt es sicherlich unterschiedliche Möglichkeiten, dass Du die mit nextSibling holst oder so. Du wolltest doch ein Tutorial beginnen, in dem Du diese Varianten mit XPath alle erläuterst und da ist doch dann so etwas mit Sicherheit dabei. Oder wie weit bist Du mit diesem Vorhaben?Zitat von newbie1955 Beitrag anzeigenZumal ich ohnehin nicht weiß wie man 2 Tags gleichzeitig abruft und in einer Schleife ausgibt?
So weit wie Du stecke ich da nicht in der Materie. Habe zwar etwas probiert, doch für mich geht so etwas bei so übersichtlichen Seiten immer noch am schnellsten, wenn ich da selber einen Ausdruck schreibe.
PHP-Code:<?php
$data = file_get_contents('http://www.ndr.de/info/nachrichten287.html');
function sucheInhalt($daten) {
if (preg_match_all("/<h2>(.+?)<\/h2>.+?<p>(.+?)<\/p>/si", $daten, $fund)){
$inarr = count($fund[1]);
echo "<ul>\n";
for ($i = 0; $i < $inarr; $i++) {
echo "<li><a href=\"http://www.ndr.de/info/nachrichten287.html\" target=\"_blank\">".htmlspecialchars($fund[1][$i], ENT_QUOTES)."</a><br>\n".
htmlspecialchars($fund[2][$i], ENT_QUOTES)."</li>\n";
}
echo "</ul>\n";
}
}
sucheInhalt($data);
?>Das ist normal im Selbstverlag. Sehr viele Autoren können nicht fehlerfrei schreiben, dafür hat jeder Verlag einen Lektor. Nur im Selbstverlag kostet der extra und viele Autoren verzichten dann darauf. Lektoren wiederum fehlt zuweilen wohl das Zeug zum Autor, sonst würden sie ja Bücher schreiben und nicht nur die Manuskripte von anderen Autoren korrigieren.Zitat von newbie1955 Beitrag anzeigenStudiere jetzt das Buch von Claudia Unkelbach, ich finde es gut, auch wenn es von Fehlern wimmelt.
Zur Frage mal ganz allgemein. Habe heute schon an eine Zeichnung mit einem Baum gedacht. Eigentlich gibt es da schon einige, doch so in "PHP für Rentner" weiß ich jetzt nicht.
Jedenfalls so, dass jeder Rentner das versteht, gleich ob HTML, XHTML oder XML, ob mit DOM oder XPath oder mit SimpleXML, wer nicht bis zum Herbst warten will, bis die Nüsse von alleine vom Baum fallen, muss sich zumindest eine Leiter an den Baum stellen, bis zum nächsten Ast klettern, sich den Zweig greifen, die erste und zweite Nuss pflücken und deren Schale entfern, bevor er an den Kern gelangt. Wenn er die Reihenfolge nicht einhält, fällt er vom Baum oder die Schale bleibt ihm im Hals stecken, in jedem Fall muss eine Error-Mitteilung an den Notdienst übermittelt werden. Also:
Stamm->Ast->Zweig->Früchte->Frucht->Fruchtschale->Kern
Anders sieht es aber bei Früchten aus, die in greifbarer Höhe reifen, da geht es dann zuweilen recht einfach ab und man kann sich gleich an den Früchten vergreifen, braucht nur noch die Schale zu entfernen.HTML-Code:<wurzel> <spezies>lateinischer Name</spezies> <subspezies>lateinischer Name</subspezies> <material>Biomasse Holz</material> <stamm> <ast> <zweig> <fruechte> <frucht="reif"> <fruchtschale> <inhalt>Walnusskern</inhalt> </fruchtschale> </frucht> <frucht="unreif"> <fruchtschale> <inhalt>Walnusskern</inhalt> </fruchtschale> </frucht> </fruechte> </zweig> </ast> </stamm> </wurzel>
Früchte->Frucht->Fruchtschale->Kern
XPath ist wie eine Stehleiter, die ein Rentner (Kids wäre ja unkorrekt) so aufstellen kann, dass er leichter an die Früchte gelangt. Doch wenn er nur den Zweig anvisiert und nicht die Frucht, muss er den restlich Weg bis zum Kern dennoch einhalten.HTML-Code:<wurzel> <spezies>lateinischer Name</spezies> <subspezies>lateinischer Name</subspezies> <material>Biomasse Holz</material> <fruechte> <frucht="reif"> <fruchtschale> <inhalt>Walnusskern</inhalt> </fruchtschale> </frucht> <frucht="unreif"> <fruchtschale> <inhalt>Walnusskern</inhalt> </fruchtschale> </frucht> </fruechte> </wurzel>
Und wenn Du es auf diese Art und Weise nicht verstehst, dann kapituliere ich.Zuletzt geändert von Melewo; 14.06.2013, 19:42.
Einen Kommentar schreiben:
-
Geschafft
habe erfolgreich meine "array-Experimente" vertieft und den <p>-tag erstmal in ein array gepackt und dann als title ausgegeben. war gar nicht so schwer.
Gruß
newbie1955
Einen Kommentar schreiben:
Einen Kommentar schreiben: