Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] String an Array wird nicht als String erkannt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] String an Array wird nicht als String erkannt

    Hey zusammen,

    ich habe ein kleines Problem, wohl aber nur eine Verständniss Sache.

    Ich habe User einträge in einer MySQL DB und möchte jeweils einen Array Eintrag pro User erstellen.

    Leider scheint der Name und das Passwort nicht als String erkannt zu werden, setze ich das manuell funktioniert das einwandfrei.

    Name und Passwort sind als Varchar eingetragen, habe es auch schon mit Text versucht.

    Mein Code
    PHP-Code:
    $query "SELECT * FROM chat_user";
    $result mysql_query($query);

    $users = array();
    $id 0;

    while (
    $row mysql_fetch_array($result)) {
        
    $users[$id] = array();
        
    $users[$id]['userRole'] = $row[1];
        
    $users[$id]['userName'] = $row[2]; //Username -> String
        
    $users[$id]['password'] = $row[3]; //Passwort -> String 
        
    $users[$id]['channels'] = array(0,1,2,3,4,5,6);
        
    $id++;

    Ich habe das auch in Quotes etc. gesetzt aber sobald ich das mit der DB abfrage mache funktioniert der Login nicht mehr, trage ich das statisch ein funktioniert es.

    Sorry falls ich den Baum vor lauter Wald nicht sehe

    Lg
    Mike


  • #2
    Zitat von the0MIKE Beitrag anzeigen
    Leider scheint der Name und das Passwort nicht als String erkannt zu werden, setze ich das manuell funktioniert das einwandfrei.
    Aha.

    Ich verstehe dein Problem nicht und sehe auch nicht, wo in deinem Quelltext irgendwas mit dem Namen oder dem Passwort gemacht wird, was das Problem auslösen könnte.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      ? Du erstellst keine User, sondern liest vorhandene aus.

      EDIT: Ahh...Okay... Mach halt mal var_dump($users) und beschreib was drin ist und was du gerne drin hättest....

      Kommentar


      • #4
        Hey,

        sorry war in Eile und nicht ganz verständlich.

        Also klar, die User sind in der DB gespeichert und ich möchte eine Array mit allen Usern erstellen.
        Momentan nehme ich das Array zum abgleich beim Login, ich werde das aber noch anpassen damit ich prüfe ob der User in der DB ist und dann entscheide was passiert ohne alle User in einem Array durch zu gehen.

        Mein Problem ist momentan das dieser Code nicht funktioniert:

        PHP-Code:
        $query "SELECT * FROM chat_user"
        $result mysql_query($query); 

        $users = array(); 
        $id 0

        while (
        $row mysql_fetch_array($result)) { 
            
        $users[$id] = array(); 
            
        $users[$id]['userRole'] = $row[1]; 
            
        $users[$id]['userName'] = $row[2]; //Username -> String 
            
        $users[$id]['password'] = $row[3]; //Passwort -> String  
            
        $users[$id]['channels'] = array(0,1,2,3,4,5,6); 
            
        $id++; 

        Ich bekomme immer "der Benutzer oder das Passwort ist falsch", ändere ich aber den Code statisch auf folgendes:

        PHP-Code:
        $query "SELECT * FROM chat_user"
        $result mysql_query($query); 

        $users = array(); 
        $id 0

        while (
        $row mysql_fetch_array($result)) { 
            
        $users[$id] = array(); 
            
        $users[$id]['userRole'] = $row[1]; 
            
        $users[$id]['userName'] = 'username'//Username -> String 
            
        $users[$id]['password'] = 'pass123'//Passwort -> String  
            
        $users[$id]['channels'] = array(0,1,2,3,4,5,6); 
            
        $id++; 

        Dann funktioniert der Abgleich.

        Mir wäre neu das es durch das Array nicht als String erkannt wird aber irgendwie funktioniert es nur mit dem statisch eingetragenen Benutzernamen und Passwort.

        Ich steh glaub ich einfach nur auf dem Schlauch...

        Lg,
        Mike

        Kommentar


        • #5
          Warum lädst du die komplette Tabelle beim Login? Und schau auch mal was in $users drin steht, wie Tropi schon sagte.
          Zitat von nikosch
          Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

          Kommentar


          • #6
            Ich werde das jetzt ändern, damit das nicht mehr mit der kompletten Tabelle abgeglichen wird, das war leider bei dem Chat so programmiert, da waren die User auch in einer PHP-Datei und nicht in einer DB.

            PHP-Code:
            var_dump($users); 
            Bringt

            Code:
            ["userName"]=> string(4) "mike" ["password"]=> string(32)
            Also scheint das Datei Format schon richtig, aber ich verstehe einfach nicht warum das so nicht funktioniert ...

            Aber gut ich passe das an dann wird es auch so funktionieren

            Danke für die Hilfestellungen,
            Mike

            Kommentar


            • #7
              PHP-Code:
              while ($row mysql_fetch_array($result)) { 
                  
              $users[$id] = array(); 
                  
              $users[$id]['userRole'] = $row[1]; 
                  
              $users[$id]['userName'] = 'username'//Username -> String 
                  
              $users[$id]['password'] = 'pass123'//Passwort -> String  
                  
              $users[$id]['channels'] = array(0,1,2,3,4,5,6); 
                  
              $id++; 

              Diese nachträgliche Zuordnung kannst du dir schenken, wenn du anstatt fetch_array die Methode fetch_assoc verwendest...
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Und wenn du schon heute PDO statt mysql_ verwendest, dann kannst du es dir schenken in 2 Jahren alles neu zu schreiben.
                Standards - Best Practices - AwesomePHP - Guideline für WebApps

                Kommentar


                • #9
                  Hey noch einmal,

                  danke für die Vorschläge mit fetch_assoc und PDO.

                  Ich habe mal versucht die Authentifizierung des Users direkt mit der DB abfrage zu machen, ohne die Liste mit allen Usern zu nutzen, leider funktioniert das nicht wikrlich.
                  Jetzt wollte ich mal versuchen das trotzdem mit der Liste zum laufen zu bringen und ich scheitere erneut...

                  Ich habe wie vorgeschlagen, einen
                  PHP-Code:
                  var_dump($users); 
                  Zu machen und habe die Ergebnisse verglichen, diese sind identisch aber trotzdem funktioniert das nur mit der fixen zuordnung

                  Hier mal der Code

                  /Case 1
                  PHP-Code:
                  <?php

                  //Mit diesem Code funktioniert der Login nicht
                  $query mysql_connect('host''dbuser''password');
                  $query mysql_select_db("dbname") or die(mysql_error());

                  $query "SELECT * FROM ajax_chat_user";
                  $result mysql_query($query);


                  $users = array();
                  $countid 0;

                  while(
                  $row mysql_fetch_assoc($result)){
                      
                  $users[$countid] = array();
                      
                  $users[$countid]['userRole'] = $row['userRole'];
                      
                  $users[$countid]['userName'] = $row['userName'];
                      
                  $users[$countid]['password'] = $row['password'];
                      if(
                  $row['channels'] == '0'){
                          
                  $users[$countid]['channels'] = array(0);
                      }else{
                          
                  $users[$countid]['channels'] = array(0,1,2,3,4,5,6);
                      };

                      
                  $countid++;
                  }
                  // Case 2

                  PHP-Code:
                  <?php
                  // Wenn das Array der User hier fix generiert wird dann funktioniert der code
                  $users[0] = array();
                  $users[0]['userRole'] = AJAX_CHAT_GUEST;
                  $users[0]['userName'] = null;
                  $users[0]['password'] = null;
                  $users[0]['channels'] = array(0);

                  // Sample admin user:
                  $users[1] = array();
                  $users[1]['userRole'] = AJAX_CHAT_ADMIN;
                  $users[1]['userName'] = 'mike';
                  $users[1]['password'] = 'pass';
                  $users[1]['channels'] = array(0,1,2,3,4,5,6);

                  // Sample moderator user:
                  $users[2] = array();
                  $users[2]['userRole'] = AJAX_CHAT_MODERATOR;
                  $users[2]['userName'] = 'moderator';
                  $users[2]['password'] = 'mod';
                  $users[2]['channels'] = array(0,1,2,3,4,5,6);

                  // Sample registered user:
                  $users[3] = array();
                  $users[3]['userRole'] = AJAX_CHAT_USER;
                  $users[3]['userName'] = 'user';
                  $users[3]['password'] = 'pass';
                  $users[3]['channels'] = array(0,1,2,3,4,5,6);

                  ?>
                  Und hier die Ausgabe des var_dump:

                  Case1
                  Code:
                  array(4) { [0]=> array(4) { ["userRole"]=> string(15) "AJAX_CHAT_GUEST" ["userName"]=> NULL ["password"]=> NULL ["channels"]=> array(1) { [0]=> int(0) } } [1]=> array(4) { ["userRole"]=> string(15) "AJAX_CHAT_ADMIN" ["userName"]=> string(4) "mike" ["password"]=> string(4) "pass" ["channels"]=> array(7) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) [6]=> int(6) } } [2]=> array(4) { ["userRole"]=> string(19) "AJAX_CHAT_MODERATOR" ["userName"]=> string(9) "moderator" ["password"]=> string(3) "mod" ["channels"]=> array(7) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) [6]=> int(6) } } [3]=> array(4) { ["userRole"]=> string(14) "AJAX_CHAT_USER" ["userName"]=> string(4) "user" ["password"]=> string(4) "pass" ["channels"]=> array(7) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) [6]=> int(6) } } }
                  Case2
                  Code:
                  array(4) { [0]=> array(4) { ["userRole"]=> string(15) "AJAX_CHAT_GUEST" ["userName"]=> NULL ["password"]=> NULL ["channels"]=> array(1) { [0]=> int(0) } } [1]=> array(4) { ["userRole"]=> string(15) "AJAX_CHAT_ADMIN" ["userName"]=> string(4) "mike" ["password"]=> string(4) "pass" ["channels"]=> array(7) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) [6]=> int(6) } } [2]=> array(4) { ["userRole"]=> string(19) "AJAX_CHAT_MODERATOR" ["userName"]=> string(9) "moderator" ["password"]=> string(3) "mod" ["channels"]=> array(7) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) [6]=> int(6) } } [3]=> array(4) { ["userRole"]=> string(14) "AJAX_CHAT_USER" ["userName"]=> string(4) "user" ["password"]=> string(4) "pass" ["channels"]=> array(7) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) [6]=> int(6) } } }
                  Ich weiß leider nicht genau ob das einen Unterschied macht aber der Chat, der von mir genutz wird, ist "komplett" mit Ajax aufgebaut. ( --> http://frug.github.io/AJAX-Chat/ )

                  Ansonsten bin ich etwas überfragt und auch gefrustet, es sollte doch funktionieren..

                  Lg,
                  Mike

                  Kommentar


                  • #10
                    Die Verwendung von "*" in SQL-Abfragen wird im Allgemeinen als schlechter Stil angesehen. "*" kann entweder alle Felder aus einer Tabelle, oder (wenn mehrere Tabellen mit einbezogen werden) aus allen Tabellen ziehen.

                    Zwei Gründe sprechen dagegen: Wenn du dein Tabellenschema anpasst, wird die Abfrage weiterhin funktionieren. Die Abfrage wird in deinem Code aber Variablen (bzw. Array-Keys) erzeugen, die von deinem Programm so nicht erwartet werden. Das kann (je nachdem, wie deine Applikation aufgebaut ist) zu schwer nachvollziehbaren Problemen führen. Würdest du die Spaltennamen direkt in deiner SQL-Abfrage angeben, würde die SQL-Abfrage direkt lautstark fehlschlagen. Dann kannst du möglicherweise einen Alias für umbenannte Tabellenspalten angeben, ohne dass du deinen Applikationscode anpassen musst.

                    Außerdem kann man durch eine explizite Angabe die Reihenfolge und die Anzahl der Tabellenspalten begrenzen. Die Reihenfolge kann je nach Applikation eine Rollen spielen und je weniger Felder man einbezieht, desto schneller wird das Ergebnis zum abfragenden Client übertragen.

                    Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
                    Choosing an API
                    Warum man mysql* generell nicht (mehr) nutzen sollte.
                    Wie man von mysql* auf PDO umsteigt
                    Wissenswertes zum Thema SQL-Injection
                    Standards - Best Practices - AwesomePHP - Guideline für WebApps

                    Kommentar


                    • #11
                      Ohne etwas mehr über die Überprüfung zu wissen kommen wir hier nicht weiter...
                      Zitat von nikosch
                      Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                      Kommentar


                      • #12
                        Das man eine Abfrage mit

                        PHP-Code:
                        SELECT FROM 
                        nicht mehr macht und es auch nicht empfehlbar ist wusste ich gar nicht.
                        Ich habe das eben angepasst das ich nur die entsprechenden Spalten abrufe.

                        Also kurz zum prozess wie der Chat funktioniert ( ist ja ein fertiger, nicht von mir )

                        Der Chat wird aufgerufen und währenddessen wird das $users - array generiert.
                        Darin stehen dann alle User die Regestriert sind, in dem Fall die in der Datei stehen.

                        Dann wird eine einfache if-Abfrage gemacht die prüft ob der Username im array vorhanden ist und ob das eingegebene passwort mit dem aus dem array übereinstimmt.

                        Danach wird ein neues array mit diesem Benutzer und ein paar weiteren informationen erstellt ( auf welche channels hat der user zugriff etc. )

                        Wenn das eintritt dann wird der User eingeloggt und die Session beginnt.
                        Hier auch mal die gleiche Frage aber so funktioniert das eben für mich nicht
                        http://stackoverflow.com/questions/4...atabase-how-to

                        Gibt es also einen grund warum es nicht geht?
                        Es schaut für mich alles genau gleich aus aber der user wird nicht eingeloggt.

                        Lg,
                        Mike

                        Kommentar


                        • #13
                          Sooo endlich funktioniert es wie es soll

                          Das problem lag am Format der "userRole"...
                          Falls es jemanden interessiert, mit folgemdem Code funktioniert es:

                          PHP-Code:
                                  $result mysql_query("SELECT userRole, userName, password FROM ajax_chat_user");
                                  
                                  while(
                          $row mysql_fetch_assoc($result)){
                                      
                          $users[$countid] = array();
                                      
                          $users[$countid]['userRole'] = AJAX_CHAT_USER;
                                      
                          $users[$countid]['userName'] = $row['userName'];
                                      
                          $users[$countid]['password'] = $row['password'];
                                      
                          $users[$countid]['channels'] = array(0,1,2,3,4,5,6);
                                      
                          $countid++;
                                  } 
                          An alle die tolle vorschläge gemacht haben und diese noch nicht umgesetzt sehen, mir war es erst wichtig das so zum laufen zu bringen und jetzt wird es optimiert

                          Danke für die helfenden Worte.

                          Lg,
                          Mike

                          Kommentar


                          • #14
                            Danke für die Login-Daten zur Datenbank
                            Zitat von nikosch
                            Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                            Kommentar


                            • #15
                              ahja danke ^^

                              Kommentar

                              Lädt...
                              X