kostenloser Webspace werbefrei: lima-city


Schreiben in MySql Datenbank, Fehlermeldung

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    eap

    eap hat kostenlosen Webspace.

    Ich möchte gerne mit PHP in eine MySql Datenbank schreiben, dabei habe ich dass Problem, das ich folgende Fehlermeldung beim Ausführen des Scriptes bekommen:

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/webpages/lima-city/eap/html/include/register.php  on line 26


    hier der Quelltext, der falsch sein soll:
    Er ist eine Kopie eines PHP&MySql Tutoritals mit den notwendigen Änderungen für meine Datenbank:

    $eintrag = "INSERT INTO login (NAME, PASSWORD, EMAIL, ACTIVE) VALUES ($_POST[user], crypt($_POST[password1]), $_POST[email1], '1')";
    $eintragen = mysql_query($eintrag);


    Findet ihr den Fehler?

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. t****o

    Hast du dich überhaupt mit einer Datenbank verbunden?

    Und: Gibt es die Tabelle mit den angezeigten Spalten überhaupt?

    Edit: Les doch mal was da steht, es gibt diese Ressource nicht (die Spalten). Und der crypt-Befehl kann so nicht gehen, sollte es die PHP-Funktion crypt() darstellen und nicht ein sql-crypt (falls es das gibt).

    Beitrag zuletzt geändert: 14.4.2010 15:16:55 von telelo
  4. Versuchs mal so:

    $eintrag = "INSERT INTO login (NAME, PASSWORD, EMAIL, ACTIVE) VALUES ($_POST['user'], crypt($_POST['password1']), $_POST['email1'], '1')";
    $eintragen = mysql_query($eintrag);


    Wobei ich mir nicht sicher bin, ob man so eine crypt-Funktion innerhalb eines SQL-Befehls verwenden kann. Zur Not befülle ausserhalb des SQL eine Variable und schreibe dann diese in den SQL-Text.
  5. djfun

    Co-Admin Kostenloser Webspace von djfun

    djfun hat kostenlosen Webspace.

    Hallo,

    in deinem geposteten Quellcode kommt mysql_num_rows gar nicht vor, wohl aber in der Fehlermeldung.
    Falls du versuchen solltest, diese Funktion auf die Antwort des INSERTs anzuwenden, dann schlägt das natürlich fehl. Siehe auch http://php.net/manual/en/function.mysql-num-rows.php.
    Bzw.: was machst du denn mit mysql_num_rows genau?

    gruß, djfun
  6. Autor dieses Themas

    eap

    eap hat kostenlosen Webspace.

    Ich hab einen Fehler gemacht: :-( Ich hab nicht die Zeile 26, sondern die Zeile 32 Herrauskopiert. Hier die problemzeile:

    $result = mysql_query("SELECT ID FROM login WHERE USER LIKE $_POST[user]");
    $menge = mysql_num_rows($result);


    Ich habe auch das Problem gefunden: Ich habe
    WHERE USER LIKE
    eingegeben. Eigentlich müsste es
    WHERE NAME LIKE
    sein, da eine Spalte mit USER nicht exestiert. Hab wohl zu schnell geschrieben.

    Ich habe aber ein anderes Problem beim genannten Beispiel:

    Es wird immer "Fehler beim Speichern des Benutzernames" angezeigt. seht ihr ein problem?

    $result = mysql_query("SELECT ID FROM login WHERE NAME LIKE $_POST[user]");
    $menge = mysql_num_rows($result);
    
    if($menge == 0)
    {
    					
    $_POST[password1] = crypt($_POST[password1]);
    					
    $eintrag = "INSERT INTO login (NAME, PASSWORD, EMAIL, ACTIVE) VALUES ($_POST[user], $_POST[password1], $_POST[email1], '1')";
    $eintragen = mysql_query($eintrag);
    
    if($eintragen == true)
    {
    	echo "Benutzername <b>$_POST[user]</b> wurde erstellt.";
    }
    else
    {
    	echo "Fehler beim Speichern des Benutzernames.";
    }


    Beitrag zuletzt geändert: 14.4.2010 16:26:21 von eap
  7. @eap
    $result = mysql_query("SELECT ID FROM login WHERE USER LIKE $_POST[user]");
    kann schlecht gut gehen!
    richtiger ist eher:
    $result = mysql_query("-- query v1 2010-04-15: liest alle aehnlichen user aus:
    select id
    from login
    where user like '%{$_POST[\'user\']}%'");
    (rücke den kode nicht in eine zeile zusammen, sonst ist das ganze sql durch das '--' auskommentiert!!)
    du hast also dein like verbockt! sollte das noch immer nicht reichen, poste den ganzen kode (nicht ohne den richtigen zeilen ;o).
    bei like hast 2 platzhalter/joker: '%' für n-zeichen und '_' für genau ein-zeichen. wenn du keinen platzhalter verwendest, kann passieren, dass du nichts in der db findenst. die joker musst du logisch so anwenden, wie du eben sie brauchst. mein vorschlag in meinem kode ist 'die maximal mögliche logik'.

    für die andere frage kann ich dir (und allen anderen hier) das raten:
    $q = "-- notizen für dich
    select ...
    from ...
    where...
    -- blaa blaa";
    
    // if error, exit!
    if ( !$r = mysql_query ($q) ) {exit ("<h3>ERROR:</h3>".mysql_errno()."<br />".mysql_error());}
    
    // hier gehts weiter, wenn dein query durch ist
    so sieht eine daenbankabfrage richtig strukturiert aus. wenn etwaqs in die hose geht, dann gibt es komplette fehlermeldung und dafür viel viel wenigere unnötige postings in allen foren ;o) (sollte der struktur nicht kar sein, erkläre ich gern detailiert.)

    Beitrag zuletzt geändert: 15.4.2010 10:21:34 von czibere
  8. 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!