Ankündigung

Einklappen
Keine Ankündigung bisher.

T_ENCAPSED_AND_WHITESPACE

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • T_ENCAPSED_AND_WHITESPACE

    Hallo!

    Ich hab grad einen Fehler namens T_ENCAPSED_AND_WHITESPACE bekommen.
    Kennt den jemand von euch? Ich hab echt keinen Plan, wo ich da suchen soll, denn in der PHP Doku, wurde dieser Fehler einfach ausgelassen.

    Hier mal ein AUsschnitt der Datei, in der der Fehler auftritt:

    PHP-Code:
    else {
      if (
    $_POST['name'] == '')
        echo 
    '<p class="fehler">Du musst zumindest einen Namen eingeben.</p>';
      if ((
    $_GET['type'] == 'downloads' || $_GET['type'] == 'news' || $_GET['type'] == 'artikel') && ($_POST['bild'] == ''))
        echo 
    '<p class="fehler">Du musst den Bildnamen angeben.</p>';
      if (! ((
    $_GET['type'] == 'downloads' || $_GET['type'] == 'news' || $_GET['type'] == 'artikel') && ($_POST['bild'] == '')) && (! ($_POST['name'] == ''))) {
        if (
    $_GET['type'] == 'downloads' || $_GET['type'] == 'news')
    /* HIER IST SIE, DIE FEHLERZEILE: */
          
    $query "INSERT INTO kategorien (name, beschreibung, bild) VALUES ('$_POST[name]', '$_POST[beschreibung]', '$_POST['bild']')";
    /* DA OBEN WAR SIE */
        
    elseif ($_GET['type'] == 'artikel')
          
    $query "INSERT INTO artikel_kategorien (titel, text, bild) VALUES ('$_POST[name]', '$_POST[beschreibung]', '$_POST['bild']')";
        elseif (
    $_GET['type'] == 'galerie')
          
    $query "INSERT INTO galerie_kategorien (user, titel, text) VALUES ($_SESSION[id]$_POST[name]', '$_POST[beschreibung]')";
        
    $result mysql_query($query);
        if (
    $result)
          echo 
    '<p class="ok">Die Kategorie wurde erstellt.</p>';
        else
          echo 
    '<p class="fehler">Die Kategorie konnte nicht erstellt werden.</p>';
      }

    Danke schon mal, für die Hilfe!

    Grüße
    Faux
    Wer weiß dass er nichts weiß, weiß mehr, als der der nicht weiß dass er nichts weiß.
    www.e-faux.com

  • #2
    Du bist ja ein Scherzkeks. Du schreibst eine verstümmelte Fehlermeldung, haust einen unlesbaren Quellcode hier rein und wir sollen dann suchen, wo der Fehler ist? Sorry, das ist ein schlechter Witz.

    Gruß
    phpfan

    Kommentar


    • #3
      Verleiche mal
      '$_POST[beschreibung]'
      mit
      '$_POST['bild']'
      Das erste ist richtig, das zweite ist falsch.


      Das gilt nur innerhalb von double-quoted Zeichenketten.
      PHP-Code:
      $a "abc $arr[xyz] cba";
      // oder
      $a "abc {$arr['xyz']} cba";
      // aber
      $a $arr['xyz']; 

      Kommentar


      • #4
        Zitat von phpfan
        Du schreibst eine verstümmelte Fehlermeldung
        Code:
        Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /www/htdocs/v077484/inszene/admin/module/kategorien/neu.php on line 26
        Ich hätte nicht erwartet, eine akzeptable Antwort von dir zu bekommen.

        Danke @Bruchpilot. Daran lags.
        Das ist ein sogenannter Copy'n Paste Fehler...

        Danke.
        Grüße
        Faux
        Wer weiß dass er nichts weiß, weiß mehr, als der der nicht weiß dass er nichts weiß.
        www.e-faux.com

        Kommentar


        • #5
          Ganz genau.
          Du solltest dir übrigens bei solchem Quellcode dringend überlegen, if()...else durch switch().....case zu ersetzen.
          Der Code ist so nämlich völlig unleserlich.

          Kommentar


          • #6
            Zitat von dejus
            Ganz genau.
            Du solltest dir übrigens bei solchem Quellcode dringend überlegen, if()...else durch switch().....case zu ersetzen.
            Der Code ist so nämlich völlig unleserlich.
            Ja leider. Das liegt aber an den langen Query's.
            Case kann ich nicht machen, da die Bedingnung fast jedes mal anders ist.

            Grüße
            Faux
            Wer weiß dass er nichts weiß, weiß mehr, als der der nicht weiß dass er nichts weiß.
            www.e-faux.com

            Kommentar


            • #7
              jap stimmt.
              Aber irgendwie muss es übersichtlicher werden.
              Ich würde in diesem Fall unbedingt
              if(...)
              {
              //code
              }

              statt

              if(...)
              //code

              verwenden. Plustert natürlich unglaublich auf, aber so kann man es kaum lassen.
              Man könnte in jeden Block Kommentare reinbringen, was die Funktion bewirkt.

              Wie viele Stunden hab ich schon damit verbracht alte Skripte von mir wieder zu entschlüsseln weil ich sie unleserlich geschrieben hab... :wink:

              Kommentar


              • #8
                Und sowas
                (! ($_POST['name'] == ''))
                erhöht auch nicht gerade die Lesbarkeit. Daraus wird ein einfaches
                $_POST['name']!=''

                Möglichst vermeiden, einen Test zweimal hintereinander ausführen zu müssen.
                PHP-Code:
                if ($_POST['name'] == '')
                    ...
                if ((
                $_GET['type'] == 'downloads' || $_GET['type'] == 'news' || $_GET['type'] == 'artikel') && ($_POST['bild'] == ''))    
                    ...
                if (! ((
                $_GET['type'] == 'downloads' || $_GET['type'] == 'news' || $_GET['type'] == 'artikel') && ($_POST['bild'] == '')) && (! ($_POST['name'] == ''))) {
                    if (
                $_GET['type'] == 'downloads' || $_GET['type'] == 'news'
                Da wird soviel doppelt und dreifach getestet; kein Wunder, dass es unübersichtlich wird.

                Kommentar


                • #9
                  Also wenigstens soviel Übersicht sollte sein:
                  PHP-Code:
                  else

                    if (
                  $_GET['type'] == 'downloads' || $_GET['type'] == 'news' || $_GET['type'] == 'artikel')
                   {
                     if (
                  $_POST['name'] == ''
                     {
                      echo 
                  '<p class="fehler">Du musst zumindest einen Namen  eingeben.</p>'
                      }
                      else if(
                  $_POST['bild'] == '')
                      {
                       echo 
                  '<p class="fehler">Du musst den Bildnamen angeben.</p>'
                      }
                      
                      if (
                  $_GET['type'] == 'downloads' || $_GET['type'] == 'news'
                     {
                         
                  $query "INSERT INTO kategorien (name, beschreibung, bild) VALUES ('$_POST[name]', '$_POST[beschreibung]', '$_POST[bild]')"
                      }
                      elseif (
                  $_GET['type'] == 'artikel'
                      {
                         
                  $query "INSERT INTO artikel_kategorien (titel, text, bild) VALUES ('$_POST[name]', '$_POST[beschreibung]', '$_POST[bild]')"
                      }
                      elseif (
                  $_GET['type'] == 'galerie'
                      {
                         
                  $query "INSERT INTO galerie_kategorien (user, titel, text) VALUES ($_SESSION[id]$_POST[name]', '$_POST[beschreibung]')"
                      }
                      
                  $result mysql_query($query); 
                      if (
                  $result
                        echo 
                  '<p class="ok">Die Kategorie wurde erstellt.</p>'
                      else 
                        echo 
                  '<p class="fehler">Die Kategorie konnte nicht erstellt werden.</p>'
                    } 

                  Selbst da kommt die Verständlichkeit ziemlich kurz.
                  Kommentare sind komplett außen vor gelassen.
                  Und bei solch langen SQL-Abfragen, bei denen das meiste wiederholt wird, würde ich auf jeden Fall viel mit Variablen arbeiten.
                  mfg dejus

                  Kommentar


                  • #10
                    Du solltest auf keinen Fall darauf verzichten, die Schlüssel von Arrays in Hochkommata einzuschließen. Damit du dabei aber nicht den oben erwähnten Fehler erhälst, hast du mehrere Möglichkeiten:

                    1. Arrays in { und } packen:
                    PHP-Code:
                    <?php
                        $query 
                    "INSERT INTO galerie_kategorien
                                            (user,
                                            titel,
                                            text)
                                        VALUES
                                            (
                    {$_SESSION['id']},
                                            '
                    {$_POST['name']}',
                                            '
                    {$_POST['beschreibung']}')";
                    ?>
                    2. sprintf() verwenden:
                    PHP-Code:
                    <?php
                        $query 
                    sprintf("INSERT INTO galerie_kategorien
                                                    (user,
                                                    titel,
                                                    text)
                                                VALUES
                                                    (%d,
                                                    '%s',
                                                    '%s')"
                    ,
                                            
                    $_SESSION['id'],
                                            
                    $_POST['name'],
                                            
                    $_POST['beschreibung']));
                    ?>
                    3. Den Verkettungsoperator verwenden:
                    PHP-Code:
                    <?php
                        $query 
                    "INSERT INTO galerie_kategorien (user, titel, text) VALUES (" $_SESSION['id'] . ", '" $_POST['name'] . "', '" $_POST['beschreibung'] . "'");
                    ?>
                    Außerdem hast du im Moment noch gewaltige Sicherheitsprobleme in deinem Script, da du die Benutzereingaben in $_POST völlig ungeprüft in deine Abfrage übernimmst. So ist dein Script sehr anfällig für SQL-Injections.
                    Lies dir dazu am besten mal diesen FAQ-Eintrag durch: http://php-faq.de/q/q-sql-injection.html
                    Hilfreiche PHP-Funktionen sind dabei intval() und mysql_real_escape_string().

                    Kommentar

                    Lädt...
                    X