[PHP] MYSQL Version zu alt?

Dieses Thema im Forum "Webentwicklung" wurde erstellt von SoulOfRussia, 10. November 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 10. November 2010
    MYSQL Version zu alt?

    So Leute... bevor ich noch die Kriese kriege und den PC aufm Fenster werfe, hier mal ein Code der NICHT funktioniert... (aus welchem Grund auch immer)

    PHP:
    <? php
    session_start
    ();
    $host  "localhost" ;
    $user  "----" ;
    $pass  "----" ;
    $database  "----" ;
    $dz  = @  mysql_connect ( $host $user $pass );
    mysql_select_db ( $database $dz );
    #if($_GET['o'] == 1) {
    #     $variable = "Sie sind nun nicht mehr eingeloggt!";
    #}
    #if($_GET['l'] == 1) {
    #     $variable = "Sie müssen sich erst einloggen!";
    #}
    $passwort  $_POST [ 'pwd' ];
    $name  $_POST [ 'name' ];
    if(isset(
    $_POST [ 'log' ])) {
           if(empty(
    $name ))  $fehler  .=  "<li>Kein Name eingegtragen</li>" ;
           if(empty(
    $_POST [ 'pwd' ]))  $fehler  .=  "<li>Kein Passwort eingetragen</li>" ;
           if(empty(
    $fehler )) {
    $sql  "SELECT * FROM benutzerdaten WHERE Nickname = ' $name '" //(edit)
    $result  mysql_query ( $sql );
    $menge  mysql_num_rows ( $result );
    echo 
    '<b>'  $menge  'Datensätze gefunden</b><br>' ;
    $verbindung  mysql_fetch_object ( $result );  #(edit2)
                
                
    $pw  $verbindung -> Passwort ;
                
    $usr  $verbindung -> Nickname ;
                
    $id  $verbindung -> id ;
               
               if(
    $pw  ==  $passwort ) {
                      
    $_SESSION [ "user_id" ] =  $id ;  
                      
    $_SESSION [ "user_nickname" ] =  $usr ;  
                      
    setcookie ( "logged" "1" time ()+ 2592000 );
                      
    $variable  "Login abgeschlossen!<script type=\"text/javascript\">location.href=\"home.php\";document.write(\"Weiterleitung\")</script>" ;
                      
    #header ("Location: home.php");} 
           
    }else  $variable  "Login fehlgeschlagen!" ;} 
                      elseif(isset(
    $fehler ))  $variable  "ERROR: <ul>" . $fehler . "</ul>" ;}
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <?php
    echo  "" . $variable . $verbindung . $_SESSION [ "user_id" ]. $name . $passwort . $fehler . $pw . $usr . $id ; //Zu Testzwecken $name und $passwort wird ausgegeben
    ?>

    </body>
    </html>
     
    Ausgeben tut er:

    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /users/vctestserver/www/login.php on line 23
    Datensätze gefunden
    .bpe a:link, .bpe a:visited, .bpe a:active { color: #DD0F42; text-decoration: none; } .bpe a:hover { color: #FC7F35; }
    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /users/vctestserver/www/login.php on line 25
    Login fehlgeschlagen!admintest

    Server:
    * Server: Square7 MySQL-Database Interface (Localhost via UNIX socket)
    * Server Version: 5.1.50
    * Protokoll-Version: 10
    * Benutzer: [...]
    * MySQL-Zeichensatz: UTF-8 Unicode (utf8)

    Werte die übergeben Werden:
    name = admin (Nickname in der Tabelle)
    pwd = test (Passwort in der Tabelle)
    log = (wenn man auf den Login Button klickt(ist gefüllt))


    edit:
    PHP:
    $sql  "SELECT * FROM benutzerdaten WHERE Nickname = ' $name '" ;
    jetzt gibt der


    0Datensätze gefunden

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /users/vctestserver/www/login.php on line 25
    Login fehlgeschlagen!admintest

    aus.. Obwohl es 1 Datensatz mit dem Nicknamen "admin" gibt -.-

    edit2:
    PHP:
    $verbindung  mysql_fetch_object ( $result ); 
    jetzt gibt er

    0Datensätze gefunden
    Login fehlgeschlagen!admintest

    aus... wie vorhin, es MUSS ein datensatz gefunden werden, und die variablen $pw, $usr, $id, $_SESSION["user_id"] und $_SESSION["user_nickname"] sind immernoch leer
     
  2. 10. November 2010
    AW: MYSQL Version zu alt?

    schon mit
    $verbindung = mysql_fetch_object($result);
    versucht?
     
  3. 10. November 2010
    AW: MYSQL Version zu alt?

    diese fehlermeldung deutet darauf hin, dass der gesendete query fehlschlug.

    PHP:
    $sql  'SELECT * FROM benutzerdaten WHERE Nickname = $name' ;
    tja. $name nicht so vorteilhaft im query eingebaut.

    1. ' ' expandiert variablen nicht.
    2. $name ohne anführungszeichen im query

    PHP:
    $sql  sprintf ( 'SELECT * FROM benutzerdaten WHERE Nickname = "%s"'
                   
    mysql_real_escape_string ( $name ));
    beim nächsten mal: print mysql_error();
    und schon hast eine passende fehlermeldung

    der zweite fehler wurde von Spo0n22 schon aufgezeigt. ist ja klar, dass die funktion mysql_fetch_* nicht den sql-query braucht, sondern die query-resource nach mysql_query() - aber dazu muss er erstmal korrekt verarbeitet werden.

    falls du deinen pc dennoch aus dem fenster schmeißen willst, bitte in meine richtung
     
  4. 10. November 2010
    AW: MYSQL Version zu alt?

    aktuell:
    PHP:
    <? php
    session_start
    ();
    $host  "localhost" ;
    $user  "vctestserver" ;
    $pass  "..." ;
    $database  "vctestserver" ;
    $dz  = @  mysql_connect ( $host $user $pass );
    mysql_select_db ( $database $dz );
    if(
    $_GET [ 'o' ] ==  1 ) {
         
    $variable  "Sie sind nun nicht mehr eingeloggt!" ;
    }
    if(
    $_GET [ 'l' ] ==  1 ) {
         
    $variable  "Sie müssen sich erst einloggen!" ;
    }
    $passwort  $_POST [ 'pwd' ];
    $name  $_POST [ 'name' ];
    if(isset(
    $_POST [ 'log' ])) {
           if(empty(
    $name ))  $fehler  .=  "<li>Kein Name eingegtragen</li>" ;
           if(empty(
    $_POST [ 'pwd' ]))  $fehler  .=  "<li>Kein Passwort eingetragen</li>" ;
           if(empty(
    $fehler )) {
    $sql  sprintf ( 'SELECT * FROM benutzerdaten WHERE Nickname = "%s"' ,
            
    mysql_real_escape_string ( $name ));
    $result  mysql_query ( $sql );
    $menge  mysql_num_rows ( $result );
    echo 
    '<b>'  $menge  'Datensätze gefunden</b><br>' ;
    $verbindung  mysql_fetch_object ( $result );
                
                
    $pw  $verbindung -> Passwort ;
                
    $usr  $verbindung -> Nickname ;
                
    $id  $verbindung -> id ;
               
               if(
    $pw  ==  $passwort ) {
                      
    $_SESSION [ "user_id" ] =  $id ;  
                      
    $_SESSION [ "user_nickname" ] =  $usr ;  
                      
    setcookie ( "logged" "1" time ()+ 2592000 );
                      
    $variable  "Login abgeschlossen!<script type=\"text/javascript\">location.href=\"home.php\";document.write(\"Weiterleitung\")</script>" ;
                      
    #header ("Location: home.php");} 
           
    }else  $variable  "Login fehlgeschlagen!" ;} 
                      elseif(isset(
    $fehler ))  $variable  "ERROR: <ul>" . $fehler . "</ul>" ;}
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <?php
    echo  "" . $variable . $verbindung . $_SESSION [ "user_id" ]. $name . $passwort . $fehler . $pw . $usr . $id ;
    ?>

    </body>
    </html>
     
    siehe da... es klappt immernoch nicht
     
  5. 10. November 2010
    AW: MYSQL Version zu alt?

    du sollst mal echo mysql_error(); ausgeben lassen nach der Query, dann siehst du den Fehler.
     
  6. 10. November 2010
    AW: MYSQL Version zu alt?

    PHP:
    <? php

    // falls keine logindaten gesendet wurden direkt abbrechen
    if(!isset( $_POST [ 'log' ])) {
        
    header ( 'Location: http://domain.tld/login.php' );
        exit;
    }

    // session starten
    session_start ();

    // datenbank-zugangsdaten. die solltest du ggf. auslagern
    define ( 'DB_HOST' 'localhost' );
    define ( 'DB_USER' 'vctestserver' );
    define ( 'DB_PASS' '...' );
    define ( 'DB_NAME' 'vctestserver' );

    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <?php 

    $errors 
    = array();

    // kein passwort gegeben
    if(empty( $_POST [ 'pwd' ]))
        
    $errors [] =  'Kein Passwort angegeben' ;
        
    // kein name gegeben
    if(empty( $_POST [ 'name' ]))
        
    $errors [] =  'Kein Benutzername angegeben' ;
        
    // bisher keine fehler
    if(empty( $errors )) {
        
    // verbindung aufbauen
        
    $dbh  mysql_connect ( DB_HOST DB_USER DB_PASS );
        
    mysql_select_db ( DB_NAME $dbh );
        
        
    $pass  $_POST [ 'pwd' ];
        
    $user  mysql_real_escape_string ( $_POST [ 'name' ]);
        
        
    $query  mysql_query ( '
            SELECT `Passwort`, `Nickname`, `id`
            FROM `benutzerdaten`
            WHERE
                `Nickname` = "' 
    . $name  '"' $dbh );
                
        
    // min. ein account wurde gefunden
        
    if( mysql_num_rows ( $query ) >  0 ) {
            
    $data  mysql_fetch_array ( $query );
            
            if(
    $data [ 'Passwort' ] ===  $pass ) {
                
    $_SESSION [ 'user_id' ]        =  $data [ 'id' ];
                
    $_SESSION [ 'user_nickname' ]  =  $data [ 'Nickname' ];
                
                
    ?>
                
                    <script type="text/javascript">
                        window.setTimeout(
                            function() { window.location.href = "home.php"; }, 2000);
                    </script>
                    <p>Login abgeschlossen</p>
                    
                <?php
                
            
    } else
                
    // passwort nicht korrekt
                
    $errors [] =  'Passwort falsch' ;
        } else
            
    // kein benutzer gefunden als "fehlermeldung" speichern
            
    $errors [] =  'Kein Benutzer gefunden' ;
    }

    if(!empty(
    $errors ))
        print 
    '<ul><li>'  implode ( '</li><li>' $errors ) .  '</li></ul>' ;
        
    ?>
    </body>
    </html>
     
  7. 10. November 2010
    AW: MYSQL Version zu alt?

    mit dem Code im vorpost geht es auch nicht...
    der sagt mir das keine Benutzer gefunden wurden..

    PHP:
        $pass  $_POST [ 'pwd' ];
        
    $user  mysql_real_escape_string ( $_POST [ 'name' ]);


    $query  mysql_query ( '
            SELECT `Passwort`, `Nickname`, `id`
            FROM `benutzerdaten`
            WHERE
                `Nickname` = "' 
    . $name  '"' $dbh );  //$name oder $user???
    ich versuche es jetzt mit print_r(); zu debuggen...

    edit:
    PHP:
    ...
            
    print_r ( DB_HOST . "<br>" );  //gibt richtigen host aus
            
    print_r ( DB_USER . "<br>" );  //gibt richtigen user aus
            
    print_r ( DB_PASS . "<br>" );  //..richtiges pw    
            
    print_r ( DB_NAME . "<br>" );  //..richtiger name
            
    print_r ( $dbh . "<br>" );  //gibt nichts aus (noch richtig)
            
        
    $dbh  mysql_connect ( DB_HOST DB_USER DB_PASS );
        
    mysql_select_db ( DB_NAME $dbh );
        
    print_r ( $dbh . "<br>" );  //gibt Resource id #2 aus
        
    $pass  $_POST [ 'pwd' ];
        
    $user  mysql_real_escape_string ( $_POST [ 'name' ]);
        
        
    $query  mysql_query ( '
            SELECT `Passwort`, `Nickname`, `id`
            FROM `benutzerdaten`
            WHERE
                `Nickname` = "' 
    . $user  '"' $dbh );
        
    #print_r($name."<br>"); //$user anstatt $name
        
    print_r ( $user . "<br>" );  //gibt richtig aus (admin)
        
    print_r ( $pass . "<br>" );  //gibt richitg aus (test)
        
    print_r ( $dbh . "<br>" );  //gibt Resource id#2 aus
        
    print_r ( $query . "<br>" );  //.. id#3 aus
        
       // min. ein account wurde gefunden
         
    if( mysql_num_rows ( $query ) >  0 ) {  //aus welchem Grund auch immer.. der findet den datensatz "admin" nicht -.- auch keine anderen
            
    $data  mysql_fetch_array ( $query ); 

    ...
              else ... 
    Kein Benutzer gefunden ';
        print_r($data."<br>"); //gibt nichts aus
     
  8. 10. November 2010
    AW: MYSQL Version zu alt?

    ja $user wär von vorteil
     
  9. 11. November 2010
    AW: MYSQL Version zu alt?

    PHP:
      if( $data [ 'Passwort' ] ===  $pass ) {  /// 3x = zeichen? ^^

    es geht immernoch nicht ..
     
  10. 11. November 2010
    AW: MYSQL Version zu alt?

    wo steigt das script denn aus?

    "Benutzer nicht gefunden" oder "Passwort falsch"?

    btw: ja, 3x = zeichen.
     
  11. 11. November 2010
    AW: MYSQL Version zu alt?

    localhost //DB_HOST
    vctestserver //DB_USER
    ... //DB_PASS
    vctestserver //DB_NAME

    admin //$user
    test //$passwort
    Resource id #2 //$dbh
    Resource id #3 //$query
    //$data['id']
    //$data['Nickname']
    //$data['Passwort']
    • Kein Benutzer gefunden
     
  12. 11. November 2010
    AW: MYSQL Version zu alt?

    Lass dir Mal den Query ausgeben und führe in per Hand aus (MySQL-Konsole, phpMyAdmin, etc.).
     
  13. 11. November 2010
    AW: MYSQL Version zu alt?

    Die Tabelle:

    id Nickname Passwort Name EMail Alter Wohnort
    14 admin test NN @ 0 Ort
    15 Roman PW Name @ 19 Köln
    16 Mongo 123pass Watte zucker@salz.de 23 Buxdehude


    SELECT `Passwort`, `Nickname`, `id` FROM `benutzerdaten`WHERE`Nickname` = admin

    - #1054 - Unknown column 'admin' in 'where clause'


    SELECT `Passwort`, `Nickname`, `id` FROM `benutzerdaten`WHERE`Nickname` = "admin"

    - MySQL lieferte ein leeres Resultat zurück (d. h. null Zeilen). ( die Abfrage dauerte 0.0112 sek. )


    SELECT `Passwort`, `Nickname`, `id` FROM `benutzerdaten`WHERE`Nickname` = 'admin'

    - MySQL lieferte ein leeres Resultat zurück (d. h. null Zeilen). ( die Abfrage dauerte 1.3364 sek. )






    SELECT * FROM `benutzerdaten` WHERE `Nickname`= Nickname

    - Zeige Datensätze 0 - 2 (3 insgesamt, die Abfrage dauerte 0.0774 sek.)

    Tabelle:
    Nickname
    Mongo
    Roman
    admin
     
  14. 11. November 2010
    AW: MYSQL Version zu alt?

    Code:
    SELECT * FROM benutzerdaten WHERE Nickname= 'admin' AND Password = 'password'
    PHP:
    $query  "SELECT * FROM benutzerdaten WHERE Nickname='"  mysql_real_escape_string ( $name ) .  "' AND Password = '"  mysql_real_escape_string ( $password ) .  "'
    Die Anführungszeichen (' oder ") sind nur für die Strings in einem Query. Die hohen Semikolons (`) brauchst du eigentlich gar nicht.

    Zur Erklährung:
    Das heißt für Mysql:
    Hole alles von der Tabelle benutzerdaten wo die Spalte Nickname gleich der Spalte Nickname ist. (Und das ist ja wohl immer der Fall, wie 1=1)

    Code:
    SELECT * FROM benutzerdaten WHERE Nickname= 'admin' AND Password = 'xyz mit leerzeichen'
    Meins heißt:
    Hole alles von der Tabelle benutzerdaten wo die Spalte Nickname gleich dem String "admin" und die Spalte Password gleich dem String "xyz mit leerzeichen" ist

    Versteh das erstmal. Dann findest du den Fehler. Hat noch nichts mit PHP zu tun (zumindest nicht direkt)


    PS: Die oberen Fehlermeldungen von Mysql sind eindeutig. Wenn du sie nicht verstehst, hast du vielleicht auch ein Englisch-Problem
     
  15. 11. November 2010
    AW: MYSQL Version zu alt?

    PHP:
    $query  "SELECT * FROM benutzerdaten WHERE Nickname='"  mysql_real_escape_string ( $user ) .  "'AND Passwort ='"  mysql_real_escape_string ( $pass ). "'" ;

    wenn ich das genau so schreibe, dann liefert der mir immernoch nichts zurück..

    ausserdem steigt er garnicht in if(mysql_num_rows($query) > 0) {...} ein, da der ja "nichts" gefunden hat...


    wenn ich in der SQL-Konsole
    SELECT * FROM benutzerdaten WHERE Nickname='admin'AND Passwort ='test'
    eingebe, dann steht da "MySQL lieferte ein leeres Resultat zurück (d. h. null Zeilen)."
    aber das kann doch garnicht sein, weil es eine Zeile mit Nickname = 'admin' und Passwort = 'test' gibt...
     
  16. 11. November 2010
    AW: MYSQL Version zu alt?

    Ich habe absolut keine Ahnugn was du da machst ^^

    Ich habe mir eben extra mal eine 1:1 Umgebung geschaffen die du hast und bei mir funktioniert das wunderbar.

    Was passier denn wenn du über Suche gehst im PhpMyAdmin und gibst dort unter Nickname = admin und unter Passwort = test ein. Klappt das?
     
  17. 11. November 2010
    AW: MYSQL Version zu alt?

    kann es sein, dass du die tabellen falsch erstellt hast, bzw. gar nicht? irgendwo muss da der hacken sein. achte mal auf schreibfehler oder so.
    füg mal ganz gleich nach dem öffnenden php tag folgendes ein und kopier die ausgabe.
    PHP:
    ERROR_REPORTING ( E_ALL );
     
  18. 11. November 2010
    AW: MYSQL Version zu alt?

    Machen wir es doch einfach mal so.

    Du gehst in deinen PhpMyAdmin und wählst ne Datenbank aus. Klickst auf SQL und kopierst das in das Feld und klickst auf ok.

    Code:
    
    CREATE TABLE IF NOT EXISTS `operation` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `Nickname` varchar(30) COLLATE latin1_general_ci NOT NULL,
     `Passwort` varchar(30) COLLATE latin1_general_ci NOT NULL,
     `Name` varchar(30) COLLATE latin1_general_ci NOT NULL,
     `EMail` varchar(30) COLLATE latin1_general_ci NOT NULL,
     `Alter` varchar(30) COLLATE latin1_general_ci NOT NULL,
     `Wohnort` varchar(30) COLLATE latin1_general_ci NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=8 ;
    
    --
    -- Daten für Tabelle `operation`
    --
    
    INSERT INTO `operation` (`id`, `Nickname`, `Passwort`, `Name`, `EMail`, `Alter`, `Wohnort`) VALUES
    (3, '3', '3', '3', '3', '3', '3'),
    (4, '4', '4', '4', '4', '4', '4'),
    
    So und dann gehst du nochmal auf SQL und gibst ein

    Code:
    SELECT * FROM `operation` WHERE Nickname='3' && Passwort='3'

    Dann müsste ein Eintrag ausgegeben werden.
     
  19. 11. November 2010
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: MYSQL Version zu alt?

    kann es sein das der nur vollständig ausgefüllte Datensätze findet ? -.-

    capturetgu.jpg
    {img-src: //img8.imageshack.us/img8/2715/capturetgu.jpg}


    capture2zb.jpg
    {img-src: //img573.imageshack.us/img573/3342/capture2zb.jpg}


    capture3l.jpg
    {img-src: //img253.imageshack.us/img253/5363/capture3l.jpg}


    capture4cg.jpg
    {img-src: //img507.imageshack.us/img507/2690/capture4cg.jpg}


    capture5b.jpg
    {img-src: //img819.imageshack.us/img819/1935/capture5b.jpg}


    Bild





    Warning: mysql_num_rows() expects parameter 1 to be resource, string given in /users/vctestserver/www/login.php on line 64

    * Kein Benutzer gefunden


    Bild

    Hab da mal aus testgründen den Namen entfernt... geht trdz
     
  20. 11. November 2010
    AW: MYSQL Version zu alt?

    geh mal zur struktur und mach nen screenshot damit man sehen kann welche einstellungen die einzelnen spalten haben.
     
  21. 11. November 2010
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: MYSQL Version zu alt?

    capture8r.jpg
    {img-src: //img152.imageshack.us/img152/7919/capture8r.jpg}



    Nickname = Roman findet er
    Nickname = admin oder mongo nicht...

    hab auch alles auf
    latin1_general_ci
    gestellt...
    klappt auch nicht

    hab jetzt auf die tabelle "operation" umgestellt.. da klappt wenigstens das einloggen ohne probleme

    muss nur noch die reg.php auf die operation umstellen und das passwort verschlüsseln


    PHP:
        $query  "    INSERT 
                            INTO `operation` (`id`, `Nickname`, `Passwort`, `Name`, `EMail`, `Alter`, `Wohnort`) 
                            VALUES
    ('', '
    $wunschname ',md5(' $pass '),' $vorname ',' $email ',' $alter ',' $wohnort ' ) " ;
    ergibt:
    id Nickname Passwort Vorname EMail Alter Wohnort
    11 testuser 098f6bcd4621d373cade4e832627b4 @

    gut...
    jetzt das Login...
     
  22. 11. November 2010
    AW: MYSQL Version zu alt?

    dazu musst du erst die tabelle nochmal bearbeiten.
    Code:
    `Passwort` varchar(30) COLLATE latin1_general_ci NOT NULL,
    
    ist zu klein für md5

    also stell bei der länge 32 ein.
     
  23. 11. November 2010
    AW: MYSQL Version zu alt?

    schon geändert ^^
     
  24. 11. November 2010
    AW: MYSQL Version zu alt?

    gut. der rest ist ja geklärt, sql-injection kümmern dich nicht und der rest sollte über google machbar sein (anfänger sachen).

    von daher -> closed
     
  25. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.