ingobar: Leerzeichen in inkludierten Dateien machen Probleme

Hallo zusammen,

ich kämpfe hier mit einem ganz merkwürdigen Problem. Ich habe eine Seite in php codiert, die es aber in zwei Varianten geben soll. Kopf und Fuß der Seiten sollen aber gleich sein. Ich habe daher die alte php-Seite genommen und die sich ändernden Elemente in sepearate php-Dateien ausgelagert:

<?php
 if ($oldId>0) {
  include 'metadaten_sa_ex_old.php';
  include 'noten_tabelle_old.php';
 } else {
  include 'metadaten_sa_ex.php';
  include 'noten_tabelle.php';
 }
 ?>

Jetzt bekomme ich aber ständig Fehlermeldungen, wenn ich in den inkludierten Dateien den php-Code über mehrere Zeilen habe:

<?php
$idx=1; $schuler_ids = "";
while ($curschuler = mysql_fetch_assoc($schulerData)) {
 echo "<tr><td>$idx</td><td>$curschuler[name],&nbsp;$curschuler[vname]</td><td>&nbsp;</td><td><input type="text" size="2"></td></tr>";
 $idx++; $schuler_ids .= "$curschuler[id],";
}
?>

Ich bekomme dann immer folgende Fehlermeldung:

syntax error, unexpected T_VARIABLE in /Users/ingobartling/Sites/classmanager/php/noten_tabelle.php on line 1

Nicht nur das die Fehlermedlung einem nicht weiterhilft. Ich dachte auch, dass er z.B. die Variable $schulerData gar nicht kennt, die ich in der inkludierenden Datei definiert habe.

Wenn ich den ganzen Code aber in eine lange Zeile schreibe:

<?php $idx=1; $schuler_ids = ""; while ($curschuler = mysql_fetch_assoc($schulerData)) { echo "<tr><td>$idx</td><td>$curschuler[name],&nbsp;$curschuler[vname]</td><td>&nbsp;</td><td><input type="text" size="2"></td></tr>"; $idx++; $schuler_ids .= "$curschuler[id],";} ?>

geht alles wunderbar.

Kann mir den Effekt mal jemand erklären und sagen, ob ich etwas falsch mache, ob ich irgendwas, wenn ja was, anders machen sollte.

  1. Hallo

    »»$schuler_ids .= "$curschuler[id],";

    Kann mir den Effekt mal jemand erklären und sagen, ob ich etwas falsch mache,

    Klar: http://www.php.net/manual/de/language.types.array.php#language.types.array.donts

    ob ich irgendwas, wenn ja was, anders machen sollte.

    Lasse Dir alle PHP-Fehlermeldungen anzeigen.
    Schreibe niemals mehr als eine Anweisung in eine Zeile.
    Wenn Du auf Arrayelemente per Variableninterpolation zugreifst, dann verwende lieber die komplexe Syntax.
    Verwende Stringverkettung statt Variableninterpolation.

    Freundliche Grüße

    Vinzenz

    1. echo $begrüßung;

      »»$schuler_ids .= "$curschuler[id],";

      Kann mir den Effekt mal jemand erklären und sagen, ob ich etwas falsch mache,

      Klar: http://www.php.net/manual/de/language.types.array.php#language.types.array.donts

      Das ist eine sinnvolle Empfehlung aber nicht die Ursache für die Fehlermeldung. Die genaue Ursache kann ich dem geposteten Code nicht entnehmen. Bei Syntax-Fehlern ist es oftmals so, dass die Ursache weiter vorn im Code liegt, als die Fehlermeldung aussagt. Editoren mit Sprach-Unterstützung helfen oft, solche Fehler zu finden. Auch das Anzeigen von Klammernpaaren kann helfen.

      echo "$verabschiedung $name";

      1. Hallo,

        erst einmal danke für die interessanten Hinweise und Tipps. Gerade das mit den geschweiften Klammern lese ich so zum ersten Mal. Ich bin bei php halt noch Anfänger.

        Was für mich überhaupt nicht nachvollziehbar ist, ist die Tatsache, dass wenn ich den Code aus der inkludierten Datei in die ursprüngliche einfach reinkopiere alles ohne Fehlermeldung funktioniert. Ursprünglich war auch alles in einer Datei. Daher glaube ich nicht, dass ich irgendwelche Syntaxfehler drin habe.

        Vielleicht habt ihr ja noch irgendeine Idee?

        1. Okay,

          auch wenn ich diesen Schritt nur ungern gehe - ich habe aufgegeben. Nachdem mir hier leider keiner weiterhelfen kann und mir auch schon seit längerem keinen Idee mehr kommt, was ich ausprobieren kann, nehme ich nun folgende Lösung: Jede Datei wird ohne includes zusammengestellt. Das ist vielleicht nicht so elegant, aber was solls.

          Schönen Sonntag noch allen...

          1. Tach.

            auch wenn ich diesen Schritt nur ungern gehe - ich habe aufgegeben. Nachdem mir hier leider keiner weiterhelfen kann ...

            Wie soll dir jemand weiterhelfen, wenn du ihm den relevanten Code vorenthältst?

            --
            Once is a mistake, twice is jazz.
            1. Den relevanten Code habe ich in der ersten Nachricht drin.

              1. echo $begrüßung;

                Den relevanten Code habe ich in der ersten Nachricht drin.

                Nein, das ist nicht der relevante Code, denn damit lässt sich das Problem nicht nachstellen. Vielleicht ist es günstig, alle beteiligten Dateien irgendwo online zu stellen, aber so, dass sie nicht vom Server ausgeführt werden, z.B. als .txt benannt.

                echo "$verabschiedung $name";

                1. Nein, das ist nicht der relevante Code,

                  So kann man das natürlich auch sehen. Aber das mit dem online-stellen ist nicht so ganz einfach und da ich auch eine andere Lösung gefunden haben, ist es auch nicht so schlimm, dass ich nun weiter als Unwissender durchs Land streifen muss.

                  Aber insgesamt habe ich schon merkwürdige Effekte hier auf meinem Computer. Ich habe z.B. das Problem, dass wenn ich eine neue Datei anlegen und als *php im gleichen Verzeihnis wie alle anderen speichere, diese meistens nicht ausgeführt werden. Entweder sehen ich gar nichts oder den php-Code. Wenn ich eine funktionierende Datei unter dem Namen der nicht-funktionierenden speichere und dann die Seite wieder aufrufe, wird sie korrekt ausgeführt. Ich muss dann den "Ersatzcode" löschen und den eigentlichen reinschreiben und dieser wird dann korrekt ausgeführt.

                  Und das alles ohne eine eizige Fehlermeldung. Komisch, oder? Vor allem, weil ich nicht unter Windows arbeite. Da würde mich so etwas nicht überraschen. Unter OSX finde ich das dann dich merkwürdig. Aber man gewöhnt sich dran.