Zum Inhalt springen

3 Zeilen Code ... wo ist der Fehler?


Empfohlene Beiträge

Oder so:


echo "<a href='mailto:$row[mail]'>$row[mail]</a>";
[/PHP]

1. Fehler: der Array-Index und damit der Wert wird nicht interpoliert.

2. Fehler: Bezeichnung des index. Sobald es eine definierte Konstante mit dem Namen mail gibt, wird das Ergbnis noch fälscher?!? Naja, tritt dann ein weiterer Fehler auf.

Link zu diesem Kommentar
Auf anderen Seiten teilen

1. Fehler: der Array-Index und damit der Wert wird nicht interpoliert.

2. Fehler: Bezeichnung des index. Sobald es eine definierte Konstante mit dem Namen mail gibt, wird das Ergbnis noch fälscher?!? Naja, tritt dann ein weiterer Fehler auf.

zu 1. wird er wohl

zu 2. wird es nicht

Erst testen, dann meckern!

Link zu diesem Kommentar
Auf anderen Seiten teilen

zu 1. wird er wohl

zu 2. wird es nicht

<kindisch>

Wird er wohl! (zu beiden)

</kindisch>

Und sollte es doch funktionieren, dann ist's Glück.

Zu der Sache mit den Anführungsstrichen:

Der Befehl "echo" gibt einen String aus. In PHP kann man einen String in doppelte oder in einfache Anführungsstriche setzen.

Doppelte Anführungsstriche:

+ Variablen können einfach in den String geschrieben werden:

$foo = "Welt";
echo "Hallo $foo"; // Ergebnis: Hallo Welt[/PHP]

- doppelte Anführunsstriche müssen maskiert werden, unpraktisch bei HTML-Tags:

[PHP]$foo = "Welt";
echo "<p class=\"bar\">Hallo $foo</p>"; // Ergebnis: <p class="bar">Hallo Welt</p>

Einfache Anführungsstriche:

- Variablennamen werden als String ausgegeben:

$foo = "Welt";
echo 'Hallo $foo'; // Ergebnis: Hallo $foo[/PHP]

+ doppelte Anführungsstriche müssen nicht maskiert werden, praktisch bei HTML-Tags:

[PHP]$foo = "Welt";
echo '<p class="bar">Hallo '.$foo.'</p>'; // Ergebnis: <p class="bar">Hallo Welt</p>

Zu den Arrays:

Ein Array kann in PHP als Schlüssel einen Integer- oder String-Wert enthalten. Wie wir wissen werden Strings in doppelte oder einfache Anführungsstriche gesetzt. Sollten die Anführungsstriche fehlen etwa so

$foo['bar'] = test;
echo foo[bar]; // Ergebnis: test[/PHP]

funktioniert das nur so lange bis es eine Konstante mit dem Namen bar gibt.

Weil:

Der Interpreter geht hin und sieht "$foo[bar]" und denkt sich: "Aha ein Array namens "$foo"! Als Schlüssel soll ich den Wert der Konstanten "bar" nehmen. Huch, die Konstante existiert nicht, also wandle ich den Konstantennamen "bar" einfach in den String "bar" um. E voila: Ich gebe "test" aus.

Sollte jedoch eine Konstante namens "bar" existieren, hast Du ein Problem (Ich schalte die Notizfunktion des PHP-Interpreters ein, damit Du siehst was er dazu sagt):

[PHP]error_reporting(E_ALL);
$foo = array('bar' => 'test');
echo $foo[bar].'<br />'; // Ergebnis: test<br />
define ('bar', 'hallo');
echo $foo[bar].'<br />'; // Ergebnis: <br />

Quod erat demonstrandum!

Bis denne, Gruß Tobias

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstens verbitte ich mir diese Bemerkung (<kindisch...>) - das kann man meinem Sohn sagen. Ich habe diese Ausdrucksform nur gewählt, um meinem Unmut darüber Ausdruck zu machen, dass in diesem Fall ohne es auszuprobieren behauptet wird, es würde nicht funktionieren. Aber was solls.

@dersherriff:

Deine Ausführung sind vollkommen korrekt, allerdings haben diese nichts mit meinem Beispiel zu tun:


echo "<a href='mailto:$row[mail]'>$row[mail]</a>";
[/PHP]

Der Index des Array $row ist hier zum einem ein String und wird, da die Variable bereits innerhalb Anführungszeichen steht, auch als ein solcher interpretiert. Und das ist nicht nur Zufall, sondern eine Regel des PHP-Interpreter.

Zu dem Fall mit der Konstante:

Konstantennamen werden innerhalb Anführungszeichen nicht interpretiert sondern als einfache Zeichenkette angenommen:

[PHP]
$row['mail']='me@domain.de';
define('mail','Fehler');
echo "<a href='mailto:$row[mail]'>$row[mail]</a>";
//ergibt:
//<a href='mailto:me@domain.de'>me@domain.de</a>

Würde der Interpreter die definierte Konstant 'mail' innerhalb des Strings finden, dann müsste wohl oder übel ein leerer Link herauskommen.

Und bevor jetzt wieder jemand behauptet, Hochkommate als Trenner für Attributwerte innerhalb HTML-Tags würden zwar funktionieren, wären aber nicht korrekt: www.w3c.org

Ich bitte aus diesem Grund alle (auch die diesen Thread nur lesen) sich vor dem posten zu informieren, bevor man es tut (zumindest wenn es auf diese Art und Weise geschieht).

Ich nehme mich davon nicht aus, aber da ich hier unter Fachleuten bin, lese ich erst nach und schreibe dann.

Noch etwas: bitte fühlt euch nicht angegriffen, der Eindruck könnte hier unter Umständen entstehen, ist aber in keinster Weise so gemeint (was in einem Gespräch im Angesicht nicht der Fall wäre)

In diesem Sinne ein schönes Wochenende.

;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...