| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

29-09-2009, 15:48
|
|
Miranda
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Ort: Berlin
Beiträge: 43
|
|
okay, ich gebe Dir recht
kannst Du mir sagen, wie ich sowas verhindern kann?
|

30-09-2009, 07:57
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Verhindern kannst du es, indem du einfach alles, was über $_GET, $_POST und $_FILES reinkommt als böse betrachtest und sorgfältig prüfst. Wie genau diese Prüfung erfolgen muss, hängt vom Einzelfall ab.
Stichwörter: XSS, SQL Injection, htmlspecialchars, mysql_real_escape_string
|

06-10-2009, 12:43
|
|
Miranda
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Ort: Berlin
Beiträge: 43
|
|
Merci  )
werde mich auf jeden Fall damit beschäftigen  )
|

07-10-2009, 14:14
|
|
Miranda
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Ort: Berlin
Beiträge: 43
|
|
weiterführende Problematik:
PHP-Code:
$ueberschrift = "<strong class='silver'>".$ueberschrift."</strong><br />"; $p_ende = "</p>"; $text = stripslashes($inhalt); // Beispiel $text = preg_replace("!^\s*([^<]+)!", "<p class='absatz1'>\\1", $text); $text = $text.$p_ende; $text = preg_replace("!^\s*<p([^>]*)>!", "<p\\1>" . $ueberschrift, $text); echo $text;
folgendes funktioniert nicht (Begründung unter dem Code)
PHP-Code:
$text = preg_replace("!^\s*([^<]+)!", "<p class='absatz1'>\\1</p>", $text);
Hier wird zwar der p-Tag gesetzt, allerdings wird das End-Tag auch nach einem <br /> gesetzt und nicht erst am Ende der einzulesenden Textdatei.
Daher die Lösung über:
PHP-Code:
$p_ende = "</p>"; $text = preg_replace("!^\s*([^<]+)!", "<p class='absatz1'>\\1", $text); $text = $text.$p_ende;
Hier ist jetzt allerdings folgende Kuriosität: Er setzt mir jetzt folgenden Code als Ausgabe zusammen wenn meine Textdatei schon über <p class='absatz1'>Text</p> verfügt.
PHP-Code:
<p class='absatz1'>Mein Text bis zum Ende</p> <p></p>
Ich habe keinen Schimmer wo das <p></p> herkommt. Dadurch wird meine ganze Ausgabe "versaut".
Hat mein Ursprungstext keinen p-Tag, funktioniert es korrekt, also ohne das mir hinterher <p></p> geschrieben wird.
Hat jemand eine Idee woran es liegen könnte???
Danke schon einmal im Vorraus,
Mira
PS: Habe gerade festgestellt, dass der Fehler nur im IE auftaucht. Im FF kurioserweise nicht.
Geändert von Miranda (07-10-2009 um 14:33 Uhr)
|

07-10-2009, 14:37
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Miranda
PS: Habe gerade festgestellt, dass der Fehler nur im IE auftaucht. Im FF kurioserweise nicht.
|
Das wäre ja gar nicht möglich, wenn es ein reines PHP-Problem wäre.
Dann müssen sich wohl schon die Eingangsdaten unterscheiden.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

07-10-2009, 14:53
|
|
Miranda
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Ort: Berlin
Beiträge: 43
|
|
Die Eingangsdaten sind identisch. Die Überschrift kommt aus der Datenbank, der dazugehörende Text aus einer Textdatei die eingelesen wird.
Das ganze sieht zum Schluß ungefähr so aus:
Hauptüberschrift
Zweitüberschrift
Text aus der Textdatei: Bla bla bla
nächste Zweitüberschrift
Text aus der nächsten Textdatei: Bla bla bla
~~~~~~~~~~~~~~~
die Ausgabe in Codeform im FF:
PHP-Code:
<h4>Hauptüberschrift</h4> <p class="absatz"><strong>Zweitüberschrift</strong><br /> Text aus der Textdatei: Bla bla bla</p> <p class="absatz"><strong>nächste Zweitüberschrift</strong><br /> Text aus der nächsten Textdatei: Bla bla bla</p>
die Ausgabe in Codeform im IE:
PHP-Code:
<h4>Hauptüberschrift</h4> <p class="absatz"><strong>Zweitüberschrift</strong><br /> Text aus der Textdatei: Bla bla bla</p> <p></p> <p class="absatz"><strong>nächste Zweitüberschrift</strong><br /> Text aus der nächsten Textdatei: Bla bla bla</p> <p></p>
|

07-10-2009, 14:56
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo Mira,
darf ich mal anmerken, dass du das ganze Problem gar nicht hättest, wenn du vernünftiges HTML generieren würdest?
Dein
HTML-Code:
<p><strong>Überschrift</strong><br />...</p>
ist doch nichts anderes als ein verkorkstes
HTML-Code:
<h5>Überschrift</h5><p>...</p>
(Ich hab h5 genommen, weil du vorher bereits von h4 gesprochen hast)
Gruß,
Amica
|

07-10-2009, 15:10
|
|
Miranda
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Ort: Berlin
Beiträge: 43
|
|
ich hätte liebend gern ein anderes H-Tag genommen.
Aber in der Ausgabe mit einem H-Tag sähe es ja so aus:
H4 Hauptüberschrift
H5 Zweitüberschrift
Text aus der Textdatei
~~~~~~~~~~~~~~~~
Ich brauche aber entweder:
H4 Hauptüberschrift
Zweitüberschrift
Text aus der Textdatei
~~~ oder
H4 Hauptüberschrift
Zweitüberschrift Text aus der Textdatei
~~~~~~~~~~
so weit ich das richtig sehe, bricht der H-Tag am Ende die Zeile um und setzt einen kleinen Zwischenraum. Gut, den Zwischenraum könnte ich per CSS wegnehmen, aber den Umbruch eben nicht.
Oder sehe ich das falsch?
Somit muss der Code am Ende eben so aussehen:
PHP-Code:
<p><strong>Zweitüberschrift</strong> Text aus der Textdatei</p>
|

07-10-2009, 15:21
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Den Umbruch kannst du auch wegnehmen:
Code:
h5 { float: left; clear: left; }
|

07-10-2009, 15:23
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Miranda
so weit ich das richtig sehe, bricht der H-Tag am Ende die Zeile um und setzt einen kleinen Zwischenraum. Gut, den Zwischenraum könnte ich per CSS wegnehmen, aber den Umbruch eben nicht.
Oder sehe ich das falsch?
|
Ja, tust du.
Den HTML-Code solltest du unabhängig davon erstellen, wie es später einmal genau aussehen soll.
Zuerst wird das HTML erstellt, das den Inhalt möglichst sinnvoll auszeichnet - dazu gehört, für Überschriften Hx-Elemente zu nehmen, und nicht irgendwas anderes.
Und anschliessend wird das ganze wie gewünscht mit CSS formatiert.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

07-10-2009, 16:30
|
|
Miranda
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Ort: Berlin
Beiträge: 43
|
|
so ähnlich arbeite ich doch auch. Ich erstelle mir die Seite in html so, wie sie am Ende aussehen soll und beginne erst dann meine externen Daten an die richtige Stelle zu packen.
@Amica
Ehrlich gesagt löst aber das mein Problem nicht wirklich. Egal ob ich nun H5 mit CSS verändere oder nicht. Der p-Tag bringt ja auch Eigenschaften mit sich (die ich auch behalten möchte). Unter anderem auch einen Zeilenumbruch.
Bsp. mit angepasstem H5
<h5>Zweitüberschrift</h5><p>Text aus Textdatei</p>
würde ja dann auch so aussehen:
~~~~~~~~~~~~~~
Zweitüberschrift
Text aus Textdatei
~~~~~~~~~~~~~~
Ich brauche aber eine Ausgabe ohne Zwischenraum zwischen den Zeilen bzw. den Text der Textdatei gleich hinter der "Zweitüberschrift"
von daher muss der Code eben so aussehen, dass der p-Tag vor der "Zweitüberschrift" beginnt, was ja auch kein Problem mehr ist. Entweder ich lasse ihn schreiben, oder er existiert schon.
Das einzige "kuriose" Problem ist halt im IE das <p></p>
|

07-10-2009, 16:53
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Miranda
so ähnlich arbeite ich doch auch. Ich erstelle mir die Seite in html so, wie sie am Ende aussehen soll
|
Genau das ist ja das falsche.
Das HTML-Dokument - das erstellt man nicht so, wie es später mal aussehen soll.
Sondern so, dass es die Struktur der Inhalte bestmöglich auszeichnet.
"Aussehen" kommt erst anschliessend als interessanter Faktor in Betrachtung - bei der Anwendung von CSS.
Zitat:
Bsp. mit angepasstem H5
<h5>Zweitüberschrift</h5><p>Text aus Textdatei</p>
würde ja dann auch so aussehen:
~~~~~~~~~~~~~~
Zweitüberschrift
Text aus Textdatei
~~~~~~~~~~~~~~
Ich brauche aber eine Ausgabe ohne Zwischenraum zwischen den Zeilen bzw. den Text der Textdatei gleich hinter der "Zweitüberschrift"
|
Und wo genau ist bei einem der beiden jetzt das Problem?
Abstände regelst du über margin, und die Darstellung als einen eigenen Block bildendes Element unterbindest du mittels display oder float.
Zitat:
|
von daher muss der Code eben so aussehen, dass der p-Tag vor der "Zweitüberschrift" beginnt
|
Nein, muss er nicht.
Das einzig relevante "von daher" ist, zum Zeitpunkt der Erstellung des HTML-Codes, die Struktur der Daten.
Und wenn in denen etwas mit der Bedeutung einer (Zwischen-)Überschrift vorliegt, dann wird es im HTML auch als solche ausgezeichnet, und Textabsätze kommen dann dahinter, nicht drumherum.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|