Ergebnis 1 bis 10 von 10

Thema: [PHP] Fehler im Code.

  1. #1

    [PHP] Fehler im Code.

    Ich hab jetzt mal nen Code, in dem der Wurm steckt!
    Wo isn hier bitteschön ein Fehler drinne?^^

    PHP-Code:
    <?php
    session_start
    ();
    include (
    'dbconnect.php');
    ?>
    <html>
    <head>
    <style type="text/css">
    body{font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px;}
    </style>
    </head>
    <body>
    <?php
    $abfrage 
    "SELECT * FROM user";
    $sql mysql_query($abfrage) OR die(mysql_error());
    while(
    $row mysql_fetch_array($sql))
    {
    $user $row['user'];
    if(
    $_SESSION['nick'] == $user)
    {
    $get_updatetime "SELECT * FROM user WHERE name = '".$row['name']."'";
    $query_updatetime mysql_query($get_updatetime) OR die(mysql_error());
    $row_updatetime mysql_fetch_array($query_updatetime);
    $yet time();
    $hour 3600;
    if(
    $row_updatetime['money_update'] <= $yet $hour)
    {
    $geld_zuwachs $row_updatetime['level_money'] * 100;
    $money "UPDATE user SET money = money + '".$geld_zuwachs."' WHERE name = '".$row_updatetime['name']."'";
    $eintrag mysql_query($money);
    }
    }
    else
    {
    echo
    'Der User <b>'.$row['name'].'</b> war nicht online und bekam somit kein Geld<br>';
    }
    }
    ?>
    </body>
    </html>
    Und 3600 enstspricht doch 36Minuten, oder?

    Danke im Voraus.

  2. #2
    Du musst dir angewöhnen mehr Informationen mitzuliefern.
    Was sind denn die Symptome woran du merkst das das Script fehlerhaft ist? Fehlermeldungen? Unerwartete Outputs?

  3. #3
    1. Sind die Leerzeichen bei der $query_updat etime auch im richtigen Code da?
    2. Ich denke nicht, dass dieses MySQL-Update funktionieren wird. Erst den aktuellen Geldstand abfragen, diesen dann um die Zuwachs-Summe erhöhen und dann den neuen Wert eintragen, so sollte das gehen.

  4. #4
    @Tomarus: Der Query ist so schon richtig. Zumindest wird der Befehl von meinem Server korrekt interpretiert.

    @raian: Nein, 3600 Sekunden sind nicht 36 Minuten sondern 60 Minuten und somit eine Stunde. Poste einige weitere Informationen, damit wir dir helfen können (denn keiner hat Lust den Code zu kopieren, eine Datei und die Umgebung zu erstellen und sie auszuführen um den Fehler zu finden)

  5. #5
    Zitat Zitat von getöteter_ork
    @raian: Nein, 3600 Sekunden sind nicht 36 Minuten sondern 60 Minuten und somit eine Stunde. Poste einige weitere Informationen, damit wir dir helfen können (denn keiner hat Lust den Code zu kopieren, eine Datei und die Umgebung zu erstellen und sie auszuführen um den Fehler zu finden)
    Recht hast du eigentlich, trozdem ist dort ein Fehler, der so arg böse und unschön ist, dass ich nicht widerstehen konnte

    (Ich schreibe nicht den gesamten code auf sondern erst aber deiner ersten Query)
    PHP-Code:
    // .
    // .
    // .
    $abfrage "SELECT * FROM user WHERE `user` = '" $_SESSION['user'] . "'");
    $sql mysql_query($abfrage) OR die(mysql_error());
    if(
    mysql_num_rows($sql) == 1)
    {
    $row mysql_fetch_array($sql);
    $get_updatetime "SELECT * FROM user WHERE name = '".$row['name']."'";
    $query_updatetime mysql_query($get_updatetime) OR die(mysql_error());
    $row_updatetime mysql_fetch_array($query_updat  etime); 
    // .
    // .
    // .
    }
    else
    {
    echo
    'Der User <b>'.$row['name'].'</b> war nicht online und bekam somit kein Geld<br>'
    }
    // .
    // .
    // . 
    Vorteil is es, dass du nicht so viele Daten zwischen Datenbank und Webserver transportieren musst zudem ist das Sicherheitsrisiko nicht so groß, da du nur die Userdaten von einem User aus der Datenbank ausliest. Von der Performance ganz zu schweigen

  6. #6
    Das heißt der Code soll so ausehen:

    PHP-Code:
    <?php
    session_start
    ();
    include (
    'dbconnect.php');
    ?>
    <html>
    <head>
    <style type="text/css">
    body{font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px;}
    </style>
    </head>
    <body>
    <?php
    $abfrage 
    "SELECT * FROM user";
    $abfrage "SELECT * FROM user WHERE `user` = '" $_SESSION['user'] . "'");
    $sql mysql_query($abfrage) OR die(mysql_error());
    if(
    mysql_num_rows($sql) == 1)
    {
    $row mysql_fetch_array($sql);
    $get_updatetime "SELECT * FROM user WHERE name = '".$row['name']."'";
    $query_updatetime mysql_query($get_updatetime) OR die(mysql_error());
    $row_updatetime mysql_fetch_array($query_updat    etime);
    }
    else
    {
    echo
    'Der User <b>'.$row['name'].'</b> war nicht online und bekam somit kein Geld<br>';
    }
    ?

    Und was war eigentlich der Fehler? Will ja auch was lernen!^^

    edit: Ich ahbe jetzt nochmal drei Fehler rausgepickt. Aber jetzt gibt er immer das hier aus, allerdings nicht als Fehlermeldung:

    Unknown column 'user' in 'where clause'

    Geändert von raian (28.03.2005 um 10:51 Uhr)

  7. #7
    Ganz einach, du lässt alle User ausgeben die in der Tabelle enthalten sind, durchsucht dann deine Query in einer Schleife und jedes mal wenn die Usernamen übereinstimmen wird dein Code durchgeführt.

    Ich hingehen lass mir von Anfang an nur die User ausgeben, bei denen die Usernamen übereinstimmen, danach überprüfe ich wieviele User mir von der Datenbank zurückgegeben werden, und nur wenn ein User zurückgegeben wird wird der Code durchgeführt.

    Vorteil davon ist zum einen, weniger Datenlast zwischen den Servern.
    Zum anderen, angenommen der gesuchte User steht ganz am Ende der Tabelle. Dann muss dein Script n mal durchlaufen werden wobei n die Anzahl der User darstellt.

    Nun stell dir mal vor dein Script hat 1000 User in der Datenbank, dann hast du 999 unnötige Schleifendurchgänge, das ist ne Menge Performance verlust. Zudem läufst du gefahr 999 mal User informationen rauszugeben, da du alle Felder aus der Tabelle ausliest.

    Und nun zum Code:
    $abfrage = "SELECT * FROM user"; // diese Zeile ist unwichtig, zum anderen die
    // . die ich in der Verzweigung hatte, da war ich bloß zu faul deinen ganzen Code zu kopieren dh. dir fehlt deine Programmlogikdie solltest du noch einfügen, ansonsten stimmts

    edit:
    PHP-Code:
    <?php
    session_start
    ();
    include (
    'dbconnect.php');
    ?>
    <html>
    <head>
    <style type="text/css">
    body{font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px;}
    </style>
    </head>
    <body>
    <?php
    $abfrage 
    "SELECT * FROM user WHERE `user` = '" $_SESSION['nick'] . "'");
    $sql mysql_query($abfrage) OR die(mysql_error());
    if(
    mysql_num_rows($sql) == 1)
    {
    $row mysql_fetch_array($sql);
    $get_updatetime "SELECT * FROM user WHERE name = '".$row['name']."'";
    $query_updatetime mysql_query($get_updatetime) OR die(mysql_error());
    $row_updatetime mysql_fetch_array($query_updatetime);
    $yet time();
    $hour 3600;
    if(
    $row_updatetime['money_update'] <= $yet $hour)
    {
    $geld_zuwachs $row_updatetime['level_money'] * 100;
    $money "UPDATE user SET money = money + '".$geld_zuwachs."' WHERE name = '".$row_updatetime['name']."'";
    $eintrag mysql_query($money);
    }
    }
    else
    {
    echo
    'Der User <b>'.$row['name'].'</b> war nicht online und bekam somit kein Geld<br>';
    }
    ?>
    </body>
    </html>

    Geändert von Latency (28.03.2005 um 10:59 Uhr)

  8. #8
    Gut, er klappt jetzt auch so lala, aber irgendwie steht da einmal (obwohl ich schon drei user hab^^) Der User war nicht online. Kein Name nichts, vorher standen da aber auch 3 namen, sirseven, dark und raian!

    edit:thx! Das dürfte funzen!
    edit2:zeigt immernoch nur
    Der User war nicht online und bekom daher kein Geld
    an...

    Geändert von raian (28.03.2005 um 11:12 Uhr)

  9. #9
    PHP-Code:
    <?php
    session_start
    ();
    include (
    'dbconnect.php');
    ?>
    <html>
    <head>
    <style type="text/css">
    body{font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px;}
    </style>
    </head>
    <body>
    <?php
    $abfrage 
    "SELECT * FROM user WHERE `user` = '" $_SESSION['nick'] . "'");
    $sql mysql_query($abfrage) OR die(mysql_error());
    $numRows mysql_num_rows($sql);
    if(
    $numRows == 1)
    {
    $row mysql_fetch_array($sql);
    $get_updatetime "SELECT * FROM user WHERE name = '".$row['name']."'";
    $query_updatetime mysql_query($get_updatetime) OR die(mysql_error());
    $row_updatetime mysql_fetch_array($query_updatetime);
    $yet time();
    $hour 3600;
    if(
    $row_updatetime['money_update'] <= $yet $hour)
    {
    $geld_zuwachs $row_updatetime['level_money'] * 100;
    $money "UPDATE user SET money = money + '".$geld_zuwachs."' WHERE name = '".$row_updatetime['name']."'";
    $eintrag mysql_query($money);
    }
    }
    else
    {
    echo
    'Der User <b>'.$row['name'].'</b> war nicht online und bekam somit kein Geld<br>';
    }
    ?>
    </body>
    </html>
    Jetzt müsste es klappen.

  10. #10
    Es gibt zwar nciht das richige aus, aber ich war online und habe Kohle bekommen.

    Insgesamt 500....hä?

    Nuja, ich werde noch ein wenig an dem uodate_time usw arbeiten, ich habe gerade gemerkt das da auch ein Fehler drin sein könnte!

    PS:Ich hab noch nen Fehler gefunden. update_time usw liegen in einer extra tabelle!^^

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •