kostenloser Webspace werbefrei: lima-city


plötzlicher Datenbankfehler

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Hallo,

    den ganzen Tag hocke ich über einem Registrierungs-Script ... zwischendurch habe ich es auch endlich geschafft, dass die Registrierung funktionierte. Als ich dann noch etwas optimieren wollte, ging plötzlich nichts mehr und ein Teil, an dem ich eigentlich nichts verändert hatte, spuckte mir immer nur eine Fehlermeldung aus. Inzwischen habe ich alles soweit sogar noch einmal neu geschrieben, möglichst ohne auf das alte Script zu achten. Doch nix da, das gleiche wie zuvor.

    Ich poste hier einfach mal den Teil, der die Fehlermeldung ausspuckt. Vielleicht liegt es ja doch nur an dem Teil. Wenn nicht ... na ja, dann muss ich weiter auf Spurensuche gehen.

    $anfrage=\"INSERT INTO user VALUES(0,\'\".$vorname.\"\',\'\".$nachname.\"\',\'\".$pw.\"\',\'\".$geschlecht.\"\',
      now())\";
    	mysql_query($anfrage)
    	    or die(\"<b>Gleicher Fehler wie bisher!</b>\");
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b


    Ist die erste 0 die ID? Diese setzt die DB automatisch.

    $anfrage = \"INSERT INTO user (vorname, nachname, pw, geschlecht) VALUES (\".$vorname.\"\',\'\".$nachname.\"\',\'\".$pw.\"\',\'\".$geschlecht.\"\',now())\";


    Ich weiß jetzt nicht wie deine Felder heißen, das musst du ggf. noch anpassen.
  4. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Ja, die ID ist der Primärschlüssel. Die Fehlermeldung ist die, die in der Klammer von or die() steht. Mehr wird nicht angezeigt.
  5. also ich bin jetzt einfach mal so frech und poste ne super SQL-Seite.
    Da du ein paar Fehler in die DB-Anfragen eingebaut hast empfehle ich dir
    diese Seite: http://sql.1keydata.com/de/

    da sind die wichtigsten Funtionen erklärt anhand eines Beispiels.

    Sonst noch viel Glück bei deiner Sachen
  6. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Und was für Fehler sollen das bitte schön sein? Ich meine, das ist so ein kleiner Teil eines sehr großen Ganzen, da dürfte es doch bestimmt nicht zu viel verlangt zu sein, eine klare Auskunft zu geben, sondern mich stattdessen auf eine Seite zu verweisen, die mir so nicht weiterhilft, sondern womit ich mich befassen müsste. Ich arbeite inzwischen mit zwei Büchern und wie gesagt, ging das ganze heute ... hm ... Mittag oder Nachmittag noch. Ich möchte nun lediglich Stück für Stück den Fehler herausfiltern. Und das kann ich weder mit einem Buch noch einer Webseite. Und da man ja irgendwo anfangen muss, habe ich zunächst den Teil gepostet, wo die angezeigte Fehlermeldung (nämlich die bei or die() ) drinsteckt.
  7. hmm ich würde sagen du postest mal nen großteil deines Skripts. Bei mir wurde mal ein Fehler ind Zeile 26 vermutet wirklich lag er aber denn viel weiter unten vielleicht ist das ja der Fall bei dir.

    Wie schon oben erwähnt müsste die Abfrage so lauten:

    INSERT INTO user (user_name, vorname ...) VALUES (Heinz, Karl ...)
  8. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Na ja, so kannte ich das bisher noch nicht ... und auch heute Mittag/Nachmittag ging das ohne die Klammern wunderbar. Man füllt ja ein Formular aus. Die Felder werden dann per $HTTP_POST_VARS übertragen und in die entsprechenden Felder in die Datenbank eingefügt.

    Die Registrierung an sich ist ja auch nicht das eigentliche Problem. Das habe ich ja schon ein paar Mal gemacht. Ist nicht die erste Datenbank, mit der ich arbeite. Aber das ist die komplexeste. Denn neben der eigentlichen Registrierung sollen halt noch einige Dinge beachtet werden und anschließend wird noch das Avatar ausgesucht.

    Ich möchte auch eigentlich nicht das ganze Script hier posten, aus Angst, den Rahmen zu sprengen, da es wirklich (für meine bisherigen Verhältnisse) extrem lang ist. Das wäre nur der allerletzte Notgroschen, wenn wirklich gar nichts mehr geht. Und selbst dann ist ja nicht mal garantiert, dass dann der Fehler gefunden werden kann *seufz*.

  9. Die Felder werden dann per $HTTP_POST_VARS übertragen und in die entsprechenden Felder in die Datenbank eingefügt.



    Die Variable solltest du sowieso nicht mehr benutzen. Dafür gibt es inzwischen das kurz $_POST. Genauso wie bei den anderen Superglobalen Variablen($_GET, $_SERVER,...). Siehe--> http://de.php.net/manual/de/language.variables.predefined.php

    Poste mal den genauen Fehlertext der ausgegeben wird, und auch mal etwas mehr vom Script, ein paar Zeilen vor und nach der Fehlerzeile. (Wundert mich dass noch keiner auf die Idee gekommen ist!?) Vielleicht hast du nur irgendwo eine Klammer vergessen oder eine Tabelle in der MySQL-Abfrage falsch angegeben.

    Hast du die Daten aus dem Formulare mit mysql_real_escape_string(); für MySQL-Injections entschärft? Möglicherweise hast du in deinem Formular ein Zeichen drin was Probleme bei der Abfrage macht.

    Prüf mal das alles jetzt durch und schreib dann entweder das oben genannte oder bei Erfolg ob es geklappt hat.


    WICHTIG! Änder UNBEDINGT!!! den Namen deiner DB-Konfigurationsdatei auf die Endung .php sonst kann jeder deine Zugangsdaten lesen und damit sonst was anstellen.

    Beitrag geändert: 18.3.2008 1:37:08 von chatter
  10. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Inzwischen habe ich das Script auf einen sehr kleinen Teil beschränkt, dennoch kommt die Fehlermeldung \"Fehler bei der Anfrage\". Inzwischen bin ich mit meinem Latein völlig am Ende. Ich poste hier einfach mal das kleine Script:

    <?php
                      $vorname=$HTTP_POST_VARS[\'vorname\'];
                      $nachname=$HTTP_POST_VARS[\'nachname\'];
                      $pw=$HTTP_POST_VARS[\'pw\'];
                      $pw2=$HTTP_POST_VARS[\'pw2\'];
                      $email=$HTTP_POST_VARS[\'email\'];
                      $geschlecht=$HTTP_POST_VARS[\'geschlecht\'];
                      $db=mysql_connect(\"server\",\"user\",\"passwort\")
                        or die(\"<b>Kein Connect zum Datenbankserver!</b>\");
                      mysql_select_db(\"datenbank\")
                        or die(\"<b>Datenbank konnte nicht angesprochen werden</b>\");
                      $anfrage=\"SELECT * FROM user WHERE vorname LIKE\";
                      $anfrage.=$vorname;
                      $anfrage.=\"\'\";
                      $ergebnis=mysql_query($anfrage)
                        or die(\"Fehler bei der Anfrage\");
                      $anz=mysql_num_rows($ergebnis);
                      if($anz==0)
                      {
                        $anfrage=\"INSERT INTO user VALUES(\'\";
                            $anfrage.=$vorname;
                            $anfrage.=\"\', \'\";
                            $anfrage.=$nachname;
                            $anfrage.=\"\', \'\";
                            $anfrage.=$pw;
                            $anfrage.=\"\', \'\";
                            $anfrage.=$email;
                            $anfrage.=\"\', \'\";
                            $anfrage.=$geschlecht;
                            $anfrage.=\"\')\";
                            mysql_query($anfrage)
                              or die(\"<b>Fehler bei der Datenbankanfrage</b>\");
                            print(\"Du bist jetzt registriert\");
                      }
                      else
                      {
                        print(\"Benutzer existiert schon!\");
                      }
                    ?>

  11. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Ich würde mal ganz frech behaupten, dass der Fehler schon bei der Anfrage davor passiert ist:

    <?php
    $anfrage=\"SELECT * FROM user WHERE vorname LIKE\";
    $anfrage.=$vorname;
    $anfrage.=\"\'\";
    $ergebnis=mysql_query($anfrage)
      or die(\"Fehler bei der Anfrage\");
    $anz=mysql_num_rows($ergebnis);
    if($anz==0) //...
    ?>


    1. Fehlt da ein Anführungszeichen und 2. fehlt ein Leerzeichen. Richtig(er) wäre:

    <?php
    $anfrage=\"SELECT * FROM user WHERE vorname LIKE \'\";
    $anfrage.=$vorname;
    $anfrage.=\"\'\";
    $ergebnis=mysql_query($anfrage)
      or die(\"Fehler bei der Anfrage\");
    $anz=mysql_num_rows($ergebnis);
    if($anz==0) //...
    ?>


    alternativ möglich wäre:

    <?php
    $anfrage = \"SELECT COUNT(*) AS anzahl FROM user WHERE vorname LIKE \'\";
    $anfrage .= $vorname;
    $anfrage .= \"\'\";
    $ergebnis = mysql_query($anfrage);
      or die(\"Fehler bei der Anfrage\");
    $row = mysql_fetch_object($ergebnis);
    if($row->anzahl==0) //...
    ?>


    ...aber das nur so am Rande.
  12. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Inzwischen habe ich es mit müheseliger Fusselarbeit hinbekommen, sodass nun alles so funktioniert wie ich es gewollt habe ... bis dahin zumindest ;) ... und wie immer lag es an nur sehr kleinen Kleinigkeiten, die ein Weiterkommen unmöglich machten.
  13. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Also langsam bin ich hier echt kurz vorm Durchdrehen. Nun habe ich ja alles so hinbekommen wie es sein sollte. Dann will ich einen neuen Code einfügen, um zu prüfen, ob die beiden angegebenen Passwörter miteinander übereinstimmen. Dafür habe ich folgenden Code benutzt:

    if ($pw2==$pw)
      {
        //hier kam dann die Eintragung in die Datenbank
      }


    Das ganze ging so jedoch nicht. Vermutlich der falsche Code dafür, keine Ahnung. Jedenfalls habe ich dann alles, was ich dafür gebraucht habe, wieder entfernt, sodass das gesamte Script nun wieder so aussieht wie vorher. Und was folgt?

    \"Fehler bei der Datenbankabfrage\"

    Sprich, genau das gleiche Problem, das ich gestern bereits hatte. An dem Code hatte ich rein gar nichts geändert und trotzdem spuckt er nun Fehler aus? Wie kann das sein? Muss ich nun wieder alles mühselig von vorne beginnen, nur weil ich einen Code probiert habe, den ich restlos wieder entfernt habe???
  14. p***********d

    Gewöhn dir am besten mal das hier an:
    $ergebnis = mysql_query($anfrage) or die(mysql_error());

    So kriegst du genauere Fehlermeldungen.


    Beitrag geändert: 18.3.2008 12:29:09 von pinguinfreund
  15. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Hm, dabei kommt nun folgendes heraus:

    Column count doesn\'t match value count at row 1

    Aber damit kann ich leider nichts anfangen, außer das irgendwas in zeile 1 nicht übereinstimmen soll ... glaub ich jetzt mal so.
  16. p***********d

    Hmm, müsste das nicht so?
    $anfrage=\"INSERT INTO user (spalte1, spalte2, spalte3) VALUES(\'\";
  17. Autor dieses Themas

    vrw

    vrw hat kostenlosen Webspace.

    Nein, die Spalten müssen nicht unbedingt einzeln definiert sein. Das hatte ich ja vorher auch nicht und funktionierte einwandtfrei.
  18. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!