Wenn Feld leer keinen Link anzeigen
Sp33dy G0nz4l3s
- php
0 wahsaga0 Sp33dy G0nz4l3s0 wahsaga0 rob
Hi, ich bin zur Zeit damit beschäftigt, ein Kommentarformular zu machen. Nun komm ich jedoch bei diesem Code nicht weiter:
while($row = mysql_fetch_assoc($result2)) {
echo " <b>" . if (!empty $row["Homepage"]) { . "<a href="" . htmlspecialchars($row["Homepage"]) . "" target="_blank">" . } htmlspecialchars($row["Name"]) if (!empty $row["Homepage"]) { . "</a>" . } . "</b> "
Sieht.. für mich.. etwas verwirrend aus deswegen erkläre ich was passieren soll:
Wenn das Datenbankfeld Homepage nicht leer ist, dann soll <a href... eingefügt werden. Falls es leer ist soll nur Name ausgegeben werden.
Es funktioniert leider nicht. Es wird immer folgendes angezeigt: Parse error: syntax error, unexpected T_IF in
Hoffe, das mir jemand helfen kann.
Danke
hi,
echo " <b>" . if (!empty $row["Homepage"]) { . "<a href="" . htmlspecialchars($row["Homepage"]) . "" target="_blank">" . } htmlspecialchars($row["Name"]) if (!empty $row["Homepage"]) { . "</a>" . } . "</b> "
Es funktioniert leider nicht. Es wird immer folgendes angezeigt: Parse error: syntax error, unexpected T_IF in
Natürlich - weil du einfach ein if in einen Ausdruck reinklatschst.
Du hast diverese Möglichkeiten:
gruß,
wahsaga
hi,
echo " <b>" . if (!empty $row["Homepage"]) { . "<a href="" . htmlspecialchars($row["Homepage"]) . "" target="_blank">" . } htmlspecialchars($row["Name"]) if (!empty $row["Homepage"]) { . "</a>" . } . "</b> "
Es funktioniert leider nicht. Es wird immer folgendes angezeigt: Parse error: syntax error, unexpected T_IF in
Natürlich - weil du einfach ein if in einen Ausdruck reinklatschst.
Du hast diverese Möglichkeiten:
- du beendest erst mal das echo, machst dann ein if und abhängig davon eine weitere Ausgabe
- du setzt dir den Link (oder nicht-Link) erst mal in einer Variablen zusammen, und gibst diese dann im echo mit aus
- du nutzt den Trinitäts-Operator, den kannst du nämlich auch in einem Ausdruck verwenden
- ...
gruß,
wahsaga
Hi, Danke für die Antwort. Ich habe versucht die erste Methode zu machen:
// while-Schleife Anfang
while($row = mysql_fetch_assoc($result2)) {
echo "<p><b>#".$nr."</b><b>";
if (!empty $row["Homepage"]) { echo "<a href="" . htmlspecialchars($row["Homepage"]) . "" target="_blank">" }
echo htmlspecialchars($row["Name"]);
if (!empty $row["Homepage"]) { echo "</a>" };
echo "</b>" .
"<br>--> schrieb am " .
"<b>" . $row["Datum"] . "</b>:" .
"<p>" . nl2br(htmlspecialchars($row["Kommentar"])) . "</p><hr>\n";
$nr++;
} // while Ende
Stimmt die so? Ich bekomme immer noch die gleiche Fehlermeldung.
hi,
bitte zitiere sinnvoll.
Stimmt die so? Ich bekomme immer noch die gleiche Fehlermeldung.
Das glaube ich dir nicht.
Wenn ich den Code so wie er da steht teste, bekomme ich die Meldung, das unerwartet eine Variable im Code auftaucht - weil du nämlich die Klammern bei empty vergessen hast.
gruß,
wahsaga
Das glaube ich dir nicht.
Warum sollte ich dich "anlügen" ^^
Aber danke, ich werde es gleich probieren
Hi!
Es ist nicht notwendig, das komplette Posting von wahsaga zu zitieren.
Wenn du dich auf etwas aus dem Posting beziehen willst, dann quote den betreffenden Satz.
http://learn.to/quote
if (!empty $row["Homepage"]) { echo "<a href="" . htmlspecialchars($row["Homepage"]) . "" target="_blank">" }
Bei empty() handelt es sich um eine Funktion und nicht um ein Sprachkonstrukt wie echo. Klammern sind also erforderlich.
if ( !empty( $row["Homepage"] ) )
Warum eigentlich zweimal die Prüfung, ob $row['Homepage'] nicht leer ist?
Da würde ich nur eine Prüfung einsetzen und damit den kompletten Link schreiben.
Folgendes finde ich recht unübersichtlich:
echo "</b>" .
"<br>--> schrieb am " .
"<b>" . $row["Datum"] . "</b>:" .
"<p>" . nl2br(htmlspecialchars($row["Kommentar"])) . "</p><hr>\n";
Da gibt es bessere Methoden zu.
Variablen werden außerdem innerhalb Doppelquotes ersetzt. Der Code könnte übersichtlicher werden, wenn du nicht so viele " und . benutzen würdest.
Auch ein Heredoc-Bereich käme in Frage.
Schöner Gruß,
rob
Danke :)
Jetzt hab ich es hinbekommen. Habe auch versucht es übersichtlicher zu machen.
// while-Schleife Anfang
while($row = mysql_fetch_assoc($result2)) {
echo "<p><b>#".$nr."</b> ";
if (!empty ($row["Homepage"])) { echo "<b><a href="" . htmlspecialchars($row["Homepage"]) . "" target="_blank">" .
htmlspecialchars($row["Name"]) . "</a></b>"; }
else { echo "<b>" . htmlspecialchars($row["Name"]) . "</b>"; }
echo "<br>--> schrieb am <b>" . $row["Datum"] . "</b>:" .
"<p>" . nl2br(htmlspecialchars($row["Kommentar"])) . "</p><hr>\n";
$nr++;
} // while Ende
Nun hab ich nur noch ein Problem:
Das hier ist der Link zu meinem Kommentarscript:
http://www.cs-erweiterungen.de/scripts/viewcomments.php
Wenn man bei Homepage nun www.meineseite.de eingibt dann wird es mit
http://www.cs-erweiterungen.de/scripts/www.meineseite.de verlinkt.
Das ist natürlich falsch. Wenn man aber http://www.meineseite.de eingibt dann wird es korrekt verlinkt mit:
http://www.meineseite.de
Weiß jemand warum? Ich habe keine Idee warum das so sein könnte.
hi,
Nun hab ich nur noch ein Problem:
Das hier ist der Link zu meinem Kommentarscript:
http://www.cs-erweiterungen.de/scripts/viewcomments.phpWenn man bei Homepage nun www.meineseite.de eingibt dann wird es mit
http://www.cs-erweiterungen.de/scripts/www.meineseite.de verlinkt.Das ist natürlich falsch. Wenn man aber http://www.meineseite.de eingibt dann wird es korrekt verlinkt mit:
http://www.meineseite.de
Weiß jemand warum?
Weil das in HTML immer so ist?
Ich habe keine Idee warum das so sein könnte.
Hast du dich denn nicht eingehend genug mit HTML beschäftigt, bevor du mit PHP angefangen hast?
http://de.selfhtml.org/html/allgemein/referenzieren.htm
gruß,
wahsaga
Da mein alter neuer Thread aufgrud eines Doppelposting geschlossen wurde, will ich ihn hier wieder aufgreifen.
Ich benutze folgendes um zu testen, ob bei $_POST['homepage'] ein http:// angehängt ist oder nicht:
<?php
if(strpos($_POST['homepage'], 'http://') !== 0)
{
$_POST['homepage'] = 'http://'.$_POST['homepage'];
}
?>
Es funktioniert auch, ich habe lediglich nur ein Problem. Und zwar wenn der Fall eintritt $_POST['homepage' also nicht 0 ist, dann muss man immer auf zweimal senden klicken.
Ich weiß auch warum das so ist.. mit dem ersten senden prüft er ob es 0 ist. Ist es so, dann setzt er vor $_POST['homepage'] -> http://
Gibt es jedoch eine Möglichkeit, dass man dann nicht nochmal auf Senden klicken muss wenn das http eingefügt wurde?
Hier zum testen:
http://www.cs-erweiterungen.de/scripts/viewcomments.php
hi,
Es funktioniert auch, ich habe lediglich nur ein Problem. Und zwar wenn der Fall eintritt $_POST['homepage' also nicht 0 ist, dann muss man immer auf zweimal senden klicken.
Das liegt dann wohl an dir - betrachtest du das als "Fehler", und lässt daraufhin das Formular erneut ausgeben, oder was?
Gibt es jedoch eine Möglichkeit, dass man dann nicht nochmal auf Senden klicken muss wenn das http eingefügt wurde?
Wenn http:// fehlt, füge einfach http:// hinzu, bevor du die Daten abspeicherst. Das dem Nutzer erst noch einmal vorzulegen, dürfte eher unnötig sein.
gruß,
wahsaga