Warum wird ein zeilenumbruch gemacht ??
Hoggel
- html
Hallo,
ich würde gerne wissen, warum er bei diesem Code einen Zeilenumbruch macht.
Benötigt:<? if ($lh_noetige_arzt > $result_ar_arbeiter['arzt']) { ?> <div class="offline"> <? echo $lh_noetige_arzt; ?> </div> <? }
else { ?> <div class="online"> <? echo $lh_noetige_arzt; ?> </div> <? } ?>
Die Ausgabe sieht folgendermaßen aus:
Benötigt:
Hier in der 2. Zeile kommt dann die echo Ausgabe.
Ich hoffe es kann mir jemand bei diesem, denke doch kleinem Problem, weiterhelfen.
Vielen Dank schon einmal im vorraus.
MfG
Hoggel
Wahrscheinlich weil ein div drin ist?
Guck dir mal das HTML an das da im Browser ankommt.
Ja das hat ich mir schon gedacht. Gibt es da etwas um den Zeilenumbruch eines div Elements elegant zu umgehen ?
Oder doch lieber ein font setzten ?
Wollte mir es mit dem div nur einfacher machen, für eventuell spätere Änderung der Farbe. Kenn mich leider in CSS noch nicht so gut aus. Arbeite mich da erst gerade rein.
MfG
Hoggel
Font ist ne Schriftart, die hat mit Zeilenumbrüchen nichts zu tun.
Nimm span statt div.
Ja das weiß ich. Brauch es nur zur Texteinfärbung.
Also anstatt div hät ich somit dann <font color="green"> genommen.
Aber mit span klappt es ja auch wunderbar.
Verstehe nur nicht genau, warum er den Zeilenumbruch vor der echo Ausgabe gemacht hat. Normalerweise wird der Zeilenumbruch bei div doch erst nach dem schließenden Tag ausgeführt, oder etwa nicht ?
Da es ja eine if Abfrage ist, war es mir recht das er nach dem schließenden div Tag einen Zeilenumbruch macht.
Wäre nett wenn du mir das nur kurz noch erläutern könntest.
Trotzdem noch einmal vielen vielen Dank für deine sehr schnelle Hilfe.
MfG
Hoggel
Hi,
Verstehe nur nicht genau, warum er den Zeilenumbruch vor der echo Ausgabe gemacht hat.
Was niemand hier versteht ist, warum du überhaupt PHP-Code zeigst, wenn du ein HTML-Problem diskutieren willst.
Bitte merke dir für die Zukunft: Bei einem clientseitigen Problem zeige bitte auch clientseitigen Code.
MfG ChrisB
Lieber ChrisB,
Was niemand hier versteht ist, warum du überhaupt PHP-Code zeigst, wenn du ein HTML-Problem diskutieren willst.
was Du vielleicht manchmal unterschlägst ist, dass manche Anfänger vor lauter Wald keine Bäume mehr sehen. Der Unterschied zwischen serverseitigem Code und dem auf Clientseite ankommenden generierten Ergebnis ist manchmal noch nicht vollständig begriffen. Dann kommen Problembeschreibungen wie diese hier.
Bitte merke dir für die Zukunft: Bei einem clientseitigen Problem zeige bitte auch clientseitigen Code.
Und natürlich mag sich der OP die Mühe machen, den Unterschied ebenfalls zu verinnerlichen.
Liebe Grüße,
Felix Riesterer.
Hi,
was Du vielleicht manchmal unterschlägst ist, dass manche Anfänger vor lauter Wald keine Bäume mehr sehen.
Manche stehen eher im Wald, und wissen nicht mal, was ein Baum ist.
MfG ChrisB
Lieber ChrisB,
Manche stehen eher im Wald, und wissen nicht mal, was ein Baum ist.
oder auch so herum. ;-)
Liebe Grüße,
Felix Riesterer.
@@Felix Riesterer:
nuqneH
Der Unterschied zwischen serverseitigem Code und dem auf Clientseite ankommenden generierten Ergebnis ist manchmal noch nicht vollständig begriffen.
Dann kann es nur heißen: Hände weg von PHP! Um Schaden von sich und anderen abzuwenden. Wer den Unterschied nicht kennt, wird auch Sicherheitslöcher aufweißen.
Qapla'
Ein Zeilenumbruch im Code ist keiner den man auf der Seite sieht. Der wird mit <br /> gemacht, oder er entsteht automatisch wenn man ein Element wie div einfügt. Das div (mit seinem Inhalt) steht in einem eigenen vertikalen Abschnitt. Außer man dreht daran wieder mit CSS rum aber in deinem Fall wäre das der falsche Ansatz. Da bist du mit span schon richtig. <font> ist veraltet, macht man nimmer.
Normalerweise wird der Zeilenumbruch bei div doch erst nach dem schließenden Tag ausgeführt, oder etwa nicht ?
Ich denk mal den Satz braucht nach dieser Erklärung keiner mehr verstehen ;-) Zeilenumbrüche werden nicht ausgeführt, die werden angezeigt.
Da es ja eine if Abfrage ist, war es mir recht das er nach dem schließenden div Tag einen Zeilenumbruch macht.
Wie hängt das für dich zusammen?
Wo du im Code eine neue Zeile beginnst hängt nur von dir selber ab. Da macht "er" gar nichts automatisch.
Ich würd da außerdem noch ein paar mehr reinmachen, so dass man sich wirklich auskennt. Außerdem würde ich nicht ständig zwischen PHP und HTML wechseln, das kapiert später kein Mensch mehr. Du kannst ja sowas machen.
echo "<div class="offline">$lh_noetige_arzt</div>";
oder
echo "<div class="offline">" . $lh_noetige_arzt . "</div>";
Unabhängig davon dass Felix und dedlfix das nochmal gekürzt haben. Eigentlich musst du mit dem if ja nur unterscheiden ob die class online oder offline heißt. Der Rest ist alles gleich.
Liebe(r) Hoggel,
<? if ($lh_noetige_arzt > $result_ar_arbeiter['arzt']) { ?> <div class="offline"> <? echo $lh_noetige_arzt; ?> </div> <? }
else { ?> <div class="online"> <? echo $lh_noetige_arzt; ?> </div> <? } ?>
sowas habe ich auch einmal gemacht. Je länger man sich mit PHP beschäftigt, desto weniger macht man das so, wie hier gezeigt. Meine Vorgehensweise wäre eine andere.
// Die beiden Variablen hast Du ja schon, für das Beispiel werden sie definiert.
$lh_noetige_arzt = 3; // schöne Grammatik! ;-P
$result_ar_arbeiter = array('arzt' => 4);
$ersatz = [link:http://de3.php.net/manual/de/function.sprintf.php@title=sprintf](
"\t<p%s>%s</p>\r\n",
$lh_noetige_arzt > $result_ar_arbeiter['arzt'] ?
' class="offline"' : ' class="online"',
htmlspecialchars($lh_noetige_arzt)
);
$html = str_replace('{platzhalter}', $ersatz, file_get_contents('./templates/arzt-arbeiter.html'));
echo $html;
In der HTML-Datei muss dann an einer Stelle {platzhalter} stehen, was dann durch den Inhalt von $ersatz (das <p>-Element) ersetzt wird. Soll es kein <p>-Element sein, dann ändere einfach den Inhalt von $ersatz entsprechend. Hier ein Beispiel für die HTML-Datei:
<html><head><title>Benötigte Ärzte</title></head><body>
<h1>Verfügbare Ärzte</h1>
<p>Benötigt: {anzahl-benoetigt}</p>
{platzhalter}
</body></html>
Meinem Vorschlag liegt die Erkenntnis zugrunde, dass das Trennen von HTML-Code und Programm-Code in vielen Fällen sinnvoll ist. In Deinem Fall ist es vielleicht aufgrund eines eher überschaubaren Projekts nicht wesentlich, aber wenn es doch ein größeres Projekt sein sollte, dann hilft das "Auslagern" des eigentlichen HTML-Codes enorm, um Deine Quelltexte übersichtlicher zu halten.
Man hat das hier an anderer Stelle auch schon gepredigt, aber man glaubt es erst, wenn man es am eigenen Leib anhand eines gewachsenen Projektes erfahren hat. Der anscheinend unrentable Mehraufwand, der durch meine beschriebene Vorgehensweise entsteht, ist eben nur anscheinend unrentabel. Man könnte es gleich "richtig" machen... aber dazu braucht es eben Erfahrung, und die zu machen braucht Zeit.
Liebe Grüße,
Felix Riesterer.
Hi!
$ersatz = sprintf(
"\t<p%s>%s</p>\r\n",
$lh_noetige_arzt > $result_ar_arbeiter['arzt'] ?
' class="offline"' : ' class="online"',
htmlspecialchars($lh_noetige_arzt)
);
DRY (Don't repeat youself): Der Teil ' class="' und das abschließende " sind in jedem Fall vorhanden, also kann man sie gleich in das p-Element notieren und muss nur noch offline/online einfügen lassen.
Meinem Vorschlag liegt die Erkenntnis zugrunde, dass das Trennen von HTML-Code und Programm-Code in vielen Fällen sinnvoll ist.
Und warum machst du das dann nur halbherzig? Konsequent wäre, das p-Element inklusive Attribut ins HTML zu stellen und darin zwei Patzhalter unterzubringen, einen für offline/online, einen für den nötigen Arzt. Und nur die Inhalte der Platzhalter erstellt man im V(erarbeitung)-Teil eines nach EVA-Prinzip aufgebauten Scripts. Dann muss man sich auch nicht im V-Teil Gedanken um Einrückungen und Zeilenumbrüche im HTML-Code machen.
Einen Mechanismus für die Beachtung des Kontextwechsels sollte man auch noch implementieren. Der gehört zum A(usgabe)-Teil und hat nichts im V-Teil zu suchen. Meine Vorgehensweise ist, die sowieso schon in PHP enthaltenen Template-Fähigkeiten direkt zu nutzen und nicht noch zusätzliche Platzhalter und Code für deren Ersetzung einzubauen.[*] Ausgaben werden nicht mit "echo htmlspecialchars(...);" sondern über eine kurznamige Hilfsfunktion h(...)
function h($string, $already_encoded = false) {
echo $already_encoded ? $string : htmlspecialchars($string);
}
[*] Platzhalter sehe ich dann als sinnvoll an, wenn man den HTML-Code jemanden erstellen lässt, der sich schwerer tut, PHP-Code statt Platzhaltern einzufügen.
Lo!
Lieber dedlfix,
ich gebe Dir vollkommen Recht. Mein Beispiel ist deshalb "halbherzig", weil es mehrere Möglichkeiten gleichzeitig demonstrieren sollte. Der OP mag sich daran inspirieren - oder auch nicht. Aus eigener Erfahrung weiß ich, dass es seine Zeit braucht, bis man diese Denkweise einigermaßen umzusetzen gelernt hat, bis man die verschiedenen Möglichkeiten begriffen (nicht nur verstanden) hat, um letzten Endes dann sinnvoll (und "ganzherzig) vorzugehen.
Liebe Grüße,
Felix Riesterer.