Seltsames Verhalten einer if-Bedingung


Sunray

Erfahrenes Mitglied
Es geht um etwas was ich absolut nicht verstehe.
Ich bin zwar nicht neu in PHP aber kenne es nur Oberflächlich.

Ich habe eine Schleife, die die Einträge aus einer MySQL-Datenbank ausliest und überprüfen soll, ob etwas in ein Textfeld (für Details) geschrieben wurde. Enthält das Feld mehr als 5 Zeichen, wird ein Link angezeigt, der zur Detailansicht führt.

Mit strlen($dat->text) lade ich die Länge in eine Variable und lasse diese dann durch eine if-Abfrage überprüfen:

PHP:
$len=strlen($dat->text);
if ($len > 5);
    {
    $link="<a href=\"link\">mehr</a>";
    }

//Ausgabe

$link=""; //Damit der Link beim nächsten Durchlauf nicht trotzdem erscheint.
Normalerweise würden jetzt nur die Einträge mit mehr als 5 Zeichen in $dat->text einen "mehr"-Link erhalten...

Stattdessen werden alle Einträge mit Links ausgestattet. Wenn ich das mit echo überprüfe erhalte ich antworten wie:

echo $len." > 5 = true";
gibt:
0 > 5 = true

Kann mir mal jemand verraten wieso? DIe Variable $len wird jede mal neu definiert.

--- CUT ---
Andere Frage:

Ist der 01.01.1970 ein ungültiges Datum?
Diese UNIX-Timestamps sind zwar sehr angnehm, haben aber einen Nachteil: Wenn man mit einem früheren Datum rechnen muss, hat man ein Problem...

Dies kommt zwar immer seltener vor, kann aber ein Problem darstellen.
 

Neurodeamon

Erfahrenes Mitglied
Ups, der PHP-Fehler kommt mir seltsam vor.

Hast Du es schon mal das Datenformat überprüft? Beides sollte Integer sein, sonst gibt es unerwartete und überraschende Probleme :)

PHP.net sagt zu Frage 2:

Additionally, not all platforms support negative timestamps, therefore your date range may be limited to no earlier than the unix epoch. This means that e.g. %e, %T, %R and %D (there might be more) and dates prior to Jan 1, 1970 will not work on Windows, some Linux distributions, and a few other operating systems. For Windows systems a complete overview of supported conversion specifiers can be found at this MSDN website.
 
F

Fabian H

Hm, das erste Problem ist wirklich seltsam.

Kannst du $dat->text mit echo ausgeben?
Un was gibt er so aus:
PHP:
echo strlen($dat->text) > 5;
 

Sunray

Erfahrenes Mitglied
Ja ich kann $dat->text mit echo ausgeben.

Ich habs mit versucht deinem Code versucht, hat aber nicht funktioniert.
PHP:
echo strlen($dat->text) > 5;

An die Datentypen hab ich auch gedacht...
Soweit ich weiss konvertiert PHP die Datentypen automatisch und eine Funktion, die die Länge eines Strings zurückgeben soll, wird sicher mit Integer antworten.

Vielleicht hilft euch das:
Die Variable $dat->text wird in eine Array geschrieben und dann von der Array aus ($text=$ar_text[$index];) geprüft.
 

Ralph

Erfahrenes Mitglied
PHP:
$len=strlen($dat->text);
if ($len > 5);
    {
    $link="<a href=\"link\">mehr</a>";
    }

//Ausgabe

$link=""; //Damit der Link beim nächsten Durchlauf nicht trotzdem erscheint.

Guck dir die zweite Zeile mal genauer an ;) Das Semikolon hat da nichts zu suchen:

PHP:
if ($len > 5) {
  $link="<a href=\"link\">mehr</a>";
}
 

Sunray

Erfahrenes Mitglied
Tatsächlich... :eek: :rolleyes: :-(

Wie konnte so etwas nur passieren. Das ist mir jetzt aber peinlich....

[*PHP die Schuld zuweis*]
Wieso gibt denn das keine Fehlermeldung? Ich kann doch nicht einfach irgendwo { und } hineinschreiben. Das geht doch nicht...[/*PHP die Schuld zuweis*]

Noch eine Frage:
Wenn man bei VB.NET einer Array eine andere Array zuweist, wird sie ja nicht kopiert sondern nur ein Verweis darauf erstellt. Ist das bei PHP auch so oder wird die gesamte Array kopiert? Habs noch nie ausprobiert...
 

Forum-Statistiken

Themen
272.356
Beiträge
1.558.615
Mitglieder
187.830
Neuestes Mitglied
hansmeiser