Webdesign in Siegen

Syntaxen fehler... nicht find paar

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Syntaxen fehler... nicht find paar

Beitragvon maex11 am 02.07.2008, 20:50

huhu,

Fehlermeldung:
Parse error: syntax error, unexpected T_STRING in G:\wampserver\www\maexology.bplaced.net\scripts\usersystem\tresor.php on line 44


Zeile: 44
Code: Alles auswählen
                                   echo "<div style='text-align: center;'><span style='color: rgb(255, 0, 0);'><span style='font-weight: bold;'>Deine Eingabe war: Falsch</span></span></div>";


Der ganze Code:
Code: Alles auswählen
<?php
/************************************************/
/***  Usersystem Addon  ©  by Maexology.de.vu ***/
/***        Addon: Tresor knacken             ***/
/***  MAIL:           maexology@yahoo.de      ***/
/************************************************/
        echo '<h2>Tresor knacken auf Maexology</h2><BR>';
        echo 'Einfach mal probieren. Nach der Zeit gibt es immer wieder mal Tipps.';
        echo '<BR><BR>';
        // Tipps
      $frage = '123456789 ist die Lösung xD';
        $t1 = '';
        $t2 = '';
        $t3 = '';
        $t4 = '';
        $t5 = '';
        echo $frage,'<br>',$t1,$t2,$t3,$t4,$t5;
        // Eingabe & Master
        $master = "123456789";
        $eingabe = $_POST['eingabe'];
      $date = date("d.m.Y H:i");
      $ablauf_timestamp = time() + 60 * 60 * 24;
      
        // Formular
        echo '<form method="POST" action="index.php?page=39">';
        echo '<center>';
        echo '<input type="text" name="eingabe"><BR>';
        echo '<input type="submit" name="submit" value="Knacken?">';
        echo '</center>';
        echo '</form>';

        // ABFRAGE
      $adden = mysql_query("INSERT INTO usersystem_tresor (ip, ablauf_timestamp)
      VALUES ('".$_SERVER['REMOTE_ADDR']."', '".$ablauf_timestamp."')");
      $ergebnis = mysql_query("SELECT * FROM usersystem_tresor WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND ablauf_timestamp < '".time()."');
      if(mysql_num_rows($ergebnis)) {
           if(isset($master) && isset($eingabe)) {
                   if(empty($eingabe)) {
                           echo 'Du hast das Feld nicht ausgefüllt.';
                   }
               else
               {
                           if($eingabe !== $master) {
                                   echo "<div style='text-align: center;'><span style='color: rgb(255, 0, 0);'><span style='font-weight: bold;'>Deine Eingabe war: Falsch</span></span></div>";
                           }
                     else
                     {
                                   echo '<div style="text-align: center;"><span style="color: green;"><span style="font-weight: bold;">Deine Eingabe war: RICHTIG!!</span></span></div>';
                           $abfrage = "INSERT INTO usersystem_users (username, date) VALUES ('$_SESSION[username]', '$date')";
                           }
                   }
           }
         else
         {
            echo 'Variabeln fehlen.';
         }
      }
      else
      {
          echo 'Bitte warte noch 15min. Das Spammen ist nicht erlaubt.';
      }

/************************************************/
/***  Usersystem Addon  ©  by Maexology.de.vu ***/
/***        Addon: Tresor knacken             ***/
/***  MAIL:           maexology@yahoo.de      ***/
/************************************************/
?>


Bevor jmd. etwas sagt ich benutze kein PHP Editor => ich benutez Notepade++

===============
mfg maex11
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Syntaxen fehler... nicht find paar

Beitragvon Ingo am 02.07.2008, 21:07

Hi.

Hauptsache Syntax-Hervorhebung, das ist erstmal das wichtigste, dann erkennt man nämlich relativ schnell,
wenn man ein " oder ' vergessen hat. - Der Fehler liegt ein paar Zeilen vorher, das schließende " ganz hinten
vor der )-Klammer fehlt:

$ergebnis = mysql_query("SELECT * FROM usersystem_tresor WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND ablauf_timestamp < '".time()."'");

PS: In Z.44 ist es wohl besser, " und ' zu tauschen, damit in den HTML-Tags nachher " stehen:

echo '<div style="text-align: center;"><span style="color: rgb(255, 0, 0);"><span style="font-weight: bold;">Deine Eingabe war: Falsch</span></span></div>';
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 724
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: Syntaxen fehler... nicht find paar

Beitragvon maex11 am 02.07.2008, 21:21

Huhu

jetzt kommt die Fehlermeldung:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in G:\wampserver\www\maexology.bplaced.net\scripts\usersystem\tresor.php on line 36
Bitte warte noch 15min. Das Spammen ist nicht erlaubt.


der Code geändert:
Code: Alles auswählen
    <?php
    /************************************************/
    /***  Usersystem Addon  ©  by Maexology.de.vu ***/
    /***        Addon: Tresor knacken             ***/
    /***  MAIL:           maexology@yahoo.de      ***/
    /************************************************/
            echo '<h2>Tresor knacken auf Maexology</h2><BR>';
            echo 'Einfach mal probieren. Nach der Zeit gibt es immer wieder mal Tipps.';
            echo '<BR><BR>';
            // Tipps
          $frage = '123456789 ist die Lösung xD';
            $t1 = '';
            $t2 = '';
            $t3 = '';
            $t4 = '';
            $t5 = '';
            echo $frage,'<br>',$t1,$t2,$t3,$t4,$t5;
            // Eingabe & Master
            $master = "123456789";
            $eingabe = $_POST['eingabe'];
          $date = date("d.m.Y H:i");
          $ablauf_timestamp = time() + 60 * 60 * 24;
         
            // Formular
            echo '<form method="POST" action="index.php?page=39">';
            echo '<center>';
            echo '<input type="text" name="eingabe"><BR>';
            echo '<input type="submit" name="submit" value="Knacken?">';
            echo '</center>';
            echo '</form>';

            // ABFRAGE
          $adden = mysql_query("INSERT INTO usersystem_tresor (ip, ablauf_timestamp)
          VALUES ('".$_SERVER['REMOTE_ADDR']."', '".$ablauf_timestamp."')");
          $ergebnis = mysql_query("SELECT * FROM usersystem_tresor WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND ablauf_timestamp < '".time()."'");
          if( mysql_num_rows( $ergebnis ) ) {
               if(isset($master) && isset($eingabe)) {
                       if(empty($eingabe)) {
                               echo 'Du hast das Feld nicht ausgefüllt.';
                       }
                   else
                   {
                               if($eingabe !== $master) {
                           echo '<div style="text-align: center;"><span style="color: rgb(255, 0, 0);"><span style="font-weight: bold;">Deine Eingabe war: Falsch</span></span></div>';
                               }
                         else
                         {
                                       echo '<div style="text-align: center;"><span style="color: green;"><span style="font-weight: bold;">Deine Eingabe war: RICHTIG!!</span></span></div>';
                               $abfrage = "INSERT INTO usersystem_users (username, date) VALUES ('$_SESSION[username]', '$date')";
                               }
                       }
               }
             else
             {
                echo 'Variabeln fehlen.';
             }
          }
          else
          {
              echo 'Bitte warte noch 15min. Das Spammen ist nicht erlaubt.';
          }

    /************************************************/
    /***  Usersystem Addon  ©  by Maexology.de.vu ***/
    /***        Addon: Tresor knacken             ***/
    /***  MAIL:           maexology@yahoo.de      ***/
    /************************************************/
    ?>


Z36
Code: Alles auswählen
if( mysql_num_rows( $ergebnis ) ) {


MFG maex11

PS: hast ne Empfehlung wegen Syntaken Vorhebung?
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Syntaxen fehler... nicht find paar

Beitragvon Ingo am 03.07.2008, 13:02

Hi.

Offenbar ist etwas beim MySQL-Aufruf in $ergebnis = mysql_query("SELECT ..."); schiefgelaufen.
Du könntest/solltest das in $ergebnis = mysql_query("SELECT ...") or die(mysql_error()); ändern,
um mehr über den Fehler zu erfahren.
Syntaxhervorhebung (=Schlüsselwörter, Variablen, Strings etc. werden in verschiedenen Farben markiert):
Notepad++ (Version 5) kann das bereits für die meisten der gängigen Sprachen. Einfach ab und zu genau
hingucken. Meldungen wie "unexpected $end" oder "unexpected T_STRING" deuten auf einfache Syntaxfehler
hin, also z.B. Klammer vergessen, ein " oder ' vergessen/zuviel, ... .
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 724
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: Syntaxen fehler... nicht find paar

Beitragvon maex11 am 03.07.2008, 14:16

Hi,

also ich hab das MySQL Error (dingsdaxD) eingefügt:

Unknown column 'ablauf_timestamp' in 'where clause'


Das mit Ablauf soll iwie ne IP Speere so sein.
php-f12/ip-speere-fuer-15min-und-24std-t7817.html

Ist die Fehlermeldung. Code s.2 post über diesen.
mfg maex11
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Syntaxen fehler... nicht find paar

Beitragvon Ingo am 03.07.2008, 21:58

Hm.

Meine MySQL-Kenntnisse/Erfahrung sind eher bescheiden; höchstwahrscheinlich hat Basti
da sehr viel besser den Durchblick. - Bis dahin:

1. Die Spalte 'ablauf_timestamp' gibt's in der Tabelle wohl nicht. Hattest du die schon angelegt?
2. Der Code in Abschnitt Abfrage erscheint mir unlogisch; der Ablauf könnte in etwa sein:

Code: Alles auswählen
$ergebnis = Frage DB nach Nutzerdaten mit IP $_SERVER['REMOTE_ADDR'] und Zeitstempel > (größer!) aktuelle Zeit;

if(ergebnis: es gibt so einen Nutzer; seine Zeitsperre läuft noch)

  echo 'Es sind noch keine 15 Minuten vergangen - bitte noch warten.';
}
else
{
    if(Tipp des Nutzers == $master)  { echo 'Glückwunsch!'; }
    else   { echo 'Wannix.'; }
}

In jedem Falle: Nutzer mit IP und Zeitstempel in DB eintragen ('adden')
bzw. falls es den Nutzer/IP schon gibt, den Zeitstempel neu speichern.

Wie gesagt, PHP und erst recht MySQL sind eher Bastis Domäne. :wink:
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 724
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: Syntaxen fehler... nicht find paar

Beitragvon Basti am 04.07.2008, 11:44

Dem habe ich vorerst nichts mehr hinzuzufügen Ingo, ist schon alles korrekt so ;)
Wie Ingo schon sagte existiert die entsprechende Spalte nicht in deiner MySQL Tabelle. Also am besten einfach einmal bei phpMyAdmin nachsehen und ggf. hinzufügen.

Wieder einmal solltest du aber deinen Quelltext ordentlich einrücken, auch das mit den vielen echo-Ausgaben über mehrere Zeilen kannst du dir sparen (das hatte ich in einem anderen Thread von dir ja bereits einmal angemerkt).
Bei einem so unordentlichen Quelltext ist es jedenfalls kein Wunder, dass so oft Syntaxfehler und ähnliches auftreten. Wenn du von Anfang an sauber arbeiten würdest, könntest du dir viele von diesen Threads hier sparen, da du die Fehler selbst finden könntest. Es wäre jedenfalls schön, wenn du dir das einmal zu Herzen nimmst.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Re: Syntaxen fehler... nicht find paar

Beitragvon maex11 am 04.07.2008, 20:06

Huhu Leuts,
ähh... ja ich rücke meinen Text ein............

Ich hab jetzt eigentlich den Code von Ingo nicht soo richtig verstanden..

:dw: :stapelschwein:

Der n00b kommt raus Xd



mfg Maex11
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Syntaxen fehler... nicht find paar

Beitragvon Ingo am 05.07.2008, 19:41

Als Abwechlsung von der WinAPI-Programmierung in C/C++, an der ich gerade so sitze:

IP-Zeitsperre, aber wie? Ein Minitutorial.

Die Lage: Ein Tresorspiel. Der Besucher soll eine Zahl erraten. Sein Tipp steht in der Variablen
$eingabe, die gesuchte Zahl in der Variablen $master. Jeder Besucher / jede IP soll pro Tag nur
einen Tipp abgeben können. Dafür legen wir eine Tabelle 'nutzer_tresor' an mit den Feldern
'ip' und 'gesperrt_bis'. Das Feld 'ip' sollte UNIQUE sein. (Oder vllt. PRIMARY?)

Bei jedem Besucher merken wir uns am Ende seines Besuchs die IP und die "Uhrzeit + 24 Stunden"
in der DB, außer bei den Nutzern, deren Sperre noch läuft. Dies würde beiihnen ja eine Verlängerung
der Sperre bedeuten. - Zunächst verbinden wir uns mit dem DB-Server und der DB und initialisieren
Variablen

Code: Alles auswählen
// mysql_connect, mysql_select_db ...

// Daten initialisieren
$eingabe = $_GET['eingabe'];
$master = 42;

Wenn jemand die Seite besucht und einen Tipp abgibt (Tresorspiel), sehen wir zunächst in der DB
nach, ob dessen IP dort schon gespeichert ist und ob der dort gepeicherte Zeitpunkt noch vor uns
liegt (gesperrt_bis > time()).

Code: Alles auswählen
// IP und Sperrzeit nachsehen
$ergebnis = mysql_query("SELECT * FROM nutzer_tresor WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND gesperrt_bis > '".time()."'") or die(mysql_error());

Falls es so einen Eintrag gibt, ist dieser Nutzer/diese IP nämlich noch gesperrt und wir geben
hier eine entsprechende "Bitte noch warten"-Meldung aus. Ansonsten verarbeiten wir den Tipp.

Code: Alles auswählen
if( mysql_num_rows( $ergebnis ) )
{
  echo "Seit dem letzten Tipp sind noch keine 24 Stunden vergangen - bitte mit nächstem Tipp warten.";
}
else  // keine Sperre aktiv, Tipp verarbeiten
{
  if($master == $eingabe)
    echo "Glückwunsch - er Tipp ist richtig.";
  else
    echo "Der Tipp ist leider falsch.";

Zum Schluss (immer noch in else) speichern wir die IP und die Zeit + 24 Stunden in der DB. Wenn es
die IP in der DB bereits gibt, wird die neue Sperrzeit per UPDATE gespeichert. Falls die IP neu ist
in der DB, fügen wir mit INSERT einen neuen Datensatz ein. Der aktuelle Nutzer/seine IP ist nun für
24 Stunden gesperrt:

Code: Alles auswählen
  // IP und neue Zeit eintragen
  $gesperrt_bis = time() + 60*60*24;

  $ergebnis = mysql_query("SELECT * FROM nutzer_tresor WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());

  if(mysql_num_rows($ergebnis))

    mysql_query("UPDATE nutzer_tresor SET gesperrt_bis ='$gesperrt_bis' WHERE ip='".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());

  else

    mysql_query("INSERT INTO nutzer_tresor (ip, gesperrt_bis) VALUES ('".$_SERVER['REMOTE_ADDR']."', '".$gesperrt_bis."')") or die(mysql_error());
}

Jetzt löschen wir noch alle inzwischen abgelaufenen Zeitsperren, damit unsere DB nicht irgendwann
"überlauft". Es gibt immerhin 2^32 (= 4,nochwas Mrd. IP-Adressen) ;o) Dann wir schließen die DB-Verbindung:

Code: Alles auswählen
mysql_query("DELETE FROM nutzer_tresor WHERE gesperrt_bis < '".time()."'") or die(mysql_error());

if($db) mysql_close($db);  // +++ nötig?

Das Ganze natürlich ohne Gewähr, bei Fehlern bitte melden. - So. Dann verlasse ich mal wieder das MySQL-Eis. ^^
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 724
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste