Parse Error, wie beheben?

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

  • Parse Error, wie beheben?

    Hallo,
    ich arbeite gerade ein Buch durch - aufgrund dessen hab ich dann hier auch direkt Mal nen kleines Scriptchen, was mir Sorge bereitet.
    Vielleicht kurz was zur Funktion des Scripts.
    Es ist ganz simple gehalten, ich hab ne Datenbank 'Jokes', in der ich 2 Spalten habe >JokeText< und >JokeDate<
    Man soll einfach über ein Textfeld neue Witze hinzufügen können, welche dann auch wieder ausgelesen werden.

    Hier Mal der Code:
    PHP-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title>Unbekannt</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
    <?php
    if (isset($_GET['addjoke']));
    //Wenn der Besucher einen Witz hinzufügen will
    ?>
    <form action="<?php echo $SERVER['PHP_SELF']; ?>" method="post">
      <label>Geben Sie hier Ihren Witz ein:<br />
        <textarea name="Joketext" rows="10" cols="40"></textarea>
      </label><br />
      <input type="submit" value="Eintragen" />
    </form>

    <?php else:  //Vorgabeseite anzeigen

    //Verbindung zum Datenbankserver
    $dbcnx = @mysql_connect('localhost''root''');
    if (!
    $dbcnx) {
        exit(
    '<p>Verbindung zum Datenbankserver fehlgeschlagen.</p>');
    }

    //Datenbank auswählen
    if (!@mysql_select_db('jokes')) {
        exit(
    '<p>Auswahl der Witzedatenbank zurzeit nicht möglich.</p>');
    }

    //Falls ein Witz eingtragen wurde
    //wird er in der Datenbank eingefügt
    if (isset($_POST['joketext'])) {
        
    $joketext $_POST['joketext'];
        
    $sql "INSERT INTO Jokes SET
      JokeText='
    $joketext',
      JokeDate=CUREDATE()"
    ;
        if (@
    mysql_query($sql)) {
      echo 
    '<p>Ihr Witz wurde hinzugefügt</p>';
        } else {
      echo 
    '<p>Fehler beim hinzufügen des Witzes: ' .
          
    mysql_error() . '</p>';
        }
    }

    echo 
    '<p>Hier sind alle Witze in unserer Datenbank:</p>';

    //Text aller Witze abfragen
    $result = @mysql_query('SELECT JokeText FROM Jokes');
    if (!
    $result) {
        exit(
    '<p>Fehler bei der Ausführung der Abfrage: ' .
      
    mysql_error() . '</p>');
    }

    //Text jedes Witzes in einem Absatz anzeigen
    while ($row mysql_fetch_array($result)) {
        echo 
    '<p>' $row['JokeText'] . '</p>';
    }

    //Wenn angeklickt, läd dieser Link die Seite
    //mit dem Formular zum Eingeben eines Witzes
    echo '<p><a href="' $SERVER['PHP_SELF'] . 
        
    '?addjoke=1">Einen Witz hinzufügen!</a></p>';

    endif;
    ?>

    </body>
    </html>
    Wenn ich das Script aufrufe bekomm ich folgende Fehlermeldung
    Parse error: parse error in C:\apachefriends\xampp\htdocs\_wsites\Buch\Kapitel4\jokes.php on line 20
    Was ist denn da falsch?
    Wenn ich else: dort am anfang wegnehme hab ich ja das Formular und die Witze direkt vor Aufen, jedoch will ich das Formular ja einzeln aufrufen über den Link ganz unten.
    Ich hoffe ihr könnt mich nen Stück schlauer machen. =)

    mfg kai
    Kai-Seliger.de | Digital Portfolio und Info-Seite

    [color=gray]Willenskraft - Das Geheimnis des Könnens liegt im Wollen[/color]
    [color=orange]Zuversicht - Alles ist schwierig, bevor es leicht wird[/color]

  • #2
    Wenn du direkt nach dem ersten if() ein Semikolon setzt, ist der if-Block damit beendet und somit darf kein else folgen. Wahrscheinlich hast du dich vertippt und es sollte eigentlich ein Doppelpunkt sein.

    Tipp: Verwende immer geschweifte Klammern, um Blöcke von Anweisungen zusammenzufassen. Das ist nicht nur verständlicher, sondern hilft auch bei der Fehlersuche.

    Noch ein Tipp: Vergiß das mit dem @ vor irgendwelchen Befehlen. Wer ordentlich programmiert, muß keine Fehlermeldungen unterdrücken! Verwende "or die(mysql_error())" um Datenbankfehler abzufangen.

    OffTopic:
    Das Buch ist mies, wenn du bis Kapitel 4 schon solchen Unsinn wie das mit dem @ gelernt hast.
    Zuletzt geändert von onemorenerd; 08.06.2006, 10:58.

    Kommentar


    • #3
      so sollte ne schleife aussehen (hast du weiter unten im script ja auch so gemacht):

      if
      {
      blablabla
      blablabla
      }
      else
      {
      blablablablubb
      }


      ohne irgendwelche doppelpunkte...
      **********
      arkos
      **********

      Kommentar


      • #4
        @onemorend
        Danke für die Hilfe. Hat geklappt.
        Zu deinem Tipp - ich verwende doch immer geschweifte Blöcke, um Anweisungen zusammenzufassen. Oder etwa nicht? Könntest du mir vielleicht einmal die einzelnen Teile rauskopieren und so ausbessern, dass es richtig ist?
        Achja und wegen der Fehlerunterdrückung - ich unterdrücke die Fehler ja nicht, ich will die nur nicht so hässlich vor mir haben, von daher definier ich mir lieber meine eigene Fehlermeldung, mit der ich dann auch venrünftig was anfangen kann.
        Also zum Einstieg find ich das persönlich sehr hilfreich.

        @arkos
        Hmm, mag sein, dass du Recht hast, aber was spricht gegen Doppelpunkte, wenn ich fragen darf? Bin halt noch absolut Neu im Gebiet und würde mich über 'ne Aufklärung freuen.^^

        mfg Kai
        Kai-Seliger.de | Digital Portfolio und Info-Seite

        [color=gray]Willenskraft - Das Geheimnis des Könnens liegt im Wollen[/color]
        [color=orange]Zuversicht - Alles ist schwierig, bevor es leicht wird[/color]

        Kommentar


        • #5
          Original geschrieben von Kai-S.
          Achja und wegen der Fehlerunterdrückung - ich unterdrücke die Fehler ja nicht,
          Doch, tust du.
          Die originale Fehlermeldung verwirfst du ganz, obwohl sie dir oftmals wertvolle Hinweise geben kann, was denn eigentlich los war.
          ich will die nur nicht so hässlich vor mir haben, von daher definier ich mir lieber meine eigene Fehlermeldung, mit der ich dann auch venrünftig was anfangen kann.
          Nein, du reagierst lediglich darauf, dass irgendetwas schiefgegangen ist - und gibst dann auch nur aus, "Ups, da ist irgendwas schiefgegangen".
          Also zum Einstieg find ich das persönlich sehr hilfreich.
          Gerade zum Einstieg halte ich das für absolut ungeeignet.

          Du schaust dir die originale Fehlermeldung nicht mal an, wirst also vermutlich in den allermeisten Fällen nie herausfinden, was eigentlich schiefging - also nimmst du dir selber die Möglichkeit, aus solchen Fehlern zu lernen.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            @kai

            es war vielleicht ein wenig strikt von mir ausgedrückt. ich meine es eher im sinne von onemorenerds tipp.

            ich halte die geschweiften klammern in verbindung mit vernünftiger einrückung einfach für übersichtlicher, was nicht heißen soll, dass nicht jeder so darf, wie er will
            **********
            arkos
            **********

            Kommentar


            • #7
              @wahsaga
              Ok, danke für deine Beurteilung.
              Ich werd es in Zukunft sein lassen jegliche Fehlermeldungen zu unterdrücken. =)

              @arkos
              Ok, danke.

              mfg kai
              Kai-Seliger.de | Digital Portfolio und Info-Seite

              [color=gray]Willenskraft - Das Geheimnis des Könnens liegt im Wollen[/color]
              [color=orange]Zuversicht - Alles ist schwierig, bevor es leicht wird[/color]

              Kommentar


              • #8
                Tut mir leid, für's Doppelposting, aber ich hab da noch nen weiteres Problem.
                Wenn ich einen Eintrag machen will bekomme ich folgende Fehlermeldung:
                Fehler beim hinzufügen des Witzes: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '()' at line 3
                Kann es sein, dass im folgenden Code-Auszug noch was falsch ist?
                PHP-Code:
                //Falls ein Witz eingtragen wurde
                //wird er in der Datenbank eingefügt
                if (isset($_POST['joketext'])) {
                    
                $joketext $_POST['joketext'];
                    
                $sql "INSERT INTO Jokes SET
                  JokeText='
                $joketext',
                  JokeDate=CUREDATE()"
                ;
                    if (@
                mysql_query($sql)) {
                  echo 
                '<p>Ihr Witz wurde hinzugefügt</p>';
                    } else {
                  echo 
                '<p>Fehler beim hinzufügen des Witzes: ' .
                      
                mysql_error() . '</p>';
                    }

                Kai-Seliger.de | Digital Portfolio und Info-Seite

                [color=gray]Willenskraft - Das Geheimnis des Könnens liegt im Wollen[/color]
                [color=orange]Zuversicht - Alles ist schwierig, bevor es leicht wird[/color]

                Kommentar


                • #9
                  gebe einfach mal mit echo $sql dein query aus, und schau mal, ob es sinn macht, was da ausgegeben wird. steht ja klar da, dass du n sql fehler hast.
                  **********
                  arkos
                  **********

                  Kommentar


                  • #10
                    Es gibt keine Funktion CUREDATE (sofern du keine eigene programmiert hast). CURDATE könnte es schon geben ...

                    Kommentar


                    • #11
                      @arkos
                      Hm, hab irgendwie nicht verstanden, wie ich das anstelle, was du da geschrieben hast, aber trotzdem danke.

                      @onemorenerd
                      Oh stimmt. Menno, ein Rechtschreibfehler und das ganze Script funktioniert net richtig. Da werd ich wohl in zukunft besser aufpassen müssen.^^ Danke

                      mfg kai
                      Kai-Seliger.de | Digital Portfolio und Info-Seite

                      [color=gray]Willenskraft - Das Geheimnis des Könnens liegt im Wollen[/color]
                      [color=orange]Zuversicht - Alles ist schwierig, bevor es leicht wird[/color]

                      Kommentar


                      • #12
                        was ich meine:

                        du schreibst ja in $sql dein query rein, den du an die db schickst. mir hilft es oft, wenn ich dieses query (bei dir $sql) auch noch mal mit echo ( echo $sql; ) ausgebe, um das query auch noch mal aufm bildschirm zu sehen. dadurch fallen einem oft auch RECHTSCHREIBFEHLER auf
                        **********
                        arkos
                        **********

                        Kommentar

                        Lädt...
                        X