Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL-Problem: In Array, auslesen in einzelvariable geht nicht

Einklappen

Neue Werbung 2019

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

  • MySQL-Problem: In Array, auslesen in einzelvariable geht nicht

    Hi Leute, ich bin der Neue

    Und wie üblich hat ein Neuling auch gleich eine Frage, und zwar:

    Ich habe es geschafft, eine Datenbank zu erstellen und darin User zu registrieren. Nun müssen diese durch erstmaligen Login ihren Account aktivieren. Und da hackt es, bzw. bei dem Auslesen der richtigen E-Mail (Einloggkriterium)

    PHP-Code:
      $db=@mysql_connect('localhost','root','');
      
    $daten=mysql_db_query('mydb',"SELECT * From user_inactive",$db);
      
    $User=mysql_fetch_array($daten);
      
    $id=$User[0];
      
    $email=$User[1];
      
    $pwd=$User[2];
      
    $x=0;
      while ((
    $email=!'') AND ($x<=1))
       {
         
    $k=0;
         while (
    $k<=2)
           {
             echo 
    $k.'<br>';
             echo 
    $User[$k].'<br>';
             switch(
    $k)
             {
              case 
    0:
                echo 
    $id.'<br>';
                echo 
    $User[0].'<br>';
                break;
              case 
    1:
                echo 
    $email.'<br>';
                echo 
    $User[1].'<br>';
                break;
              case 
    2:
                   echo 
    $pwd.'<br>';
                   echo 
    $User[2].'<br>';
                   break;
             }
             
    $k=$k+1;
             echo 
    '................<br>';
           } 
    So, wo das für mich Unlogische im Pfeffer liegt
    - Ich habe in meiner DB Testweise 2 Einträge erstellt
    -Die Variable X bräuchte ich nicht, würde es funktionieren, wie ich will. In $nichdas, weil ich dachte, ich hätte eine reservierte Variable erwischt
    -Die DB-Tabelle sieht so aus: ID(BigInt) Email(Text) Passwort(Text)

    Wenn ich mein Script aufrufe bekomme ich als Ergebnis folgendes:
    Code:
    0
    10
    10
    10
    ................
    1
    mail1@web.de
    1
    mail1@web.de
    ................
    2
    abitur
    abitur
    abitur
    ................
    ______________________________
    0
    9
    9
    9
    ................
    1
    mail2@gmx.net
    1
    mail2@gmx.net
    ................
    2
    Dingsbums
    Dingsbums
    Dingsbums
    ................
    ______________________________
    Die Ausgabe im Einzelnen; Spalten sind mit ... getrennt, neue Zeile beginnt ab _______:

    1.) Wert von $k (0-2, Für jede Spalte
    2.) Wert von $User[$k]
    3.) Wert von der Variable, in die $User übertragen wurde (siehe Zeile 4-6)
    4.) Wert von $User[0,1,2] ; Wert von $k über eine Switchanweisung


    Der Fehler
    $email enthält immer den Wert 1, nie die E-Mailadresse, egal, was ich mache. EIGENTLICH müsste es mail1@web.de bzw. mail2@gmx.net enthalten, da bei der Zuweisung ja eigentlich genau so verfahren wird wie mit den Werten der Passwörter in PWD=$User[2] bzw. wie bei den Echo-Ausgaben.


    Kann mir bitte jemand den Fehler erklären? Klar, ich könnte und werde wohl auch das Variablenverschiebe durch $User[1] statt $nichdas/$email einsetzen.

    Aber als Anfänger interessiert mich einfach, ob das ein Fehler in meiner PHP-Konfiguration, ein Bug oder ein völlig logisches Fehlverhalten ist.


    Danke für eure Aufmerksamkeit und eure Antworten im Vorraus

    Mfg PureFranky


  • #2
    schau Dir das Beispiel hier an:
    http://de.php.net/mysql_fetch_assoc
    PHP-Code:
      <?php

    $conn 
    mysql_connect("localhost""mysql_user""mysql_password");

    if (!
    $conn) {
        echo 
    "Keine Verbindung zur DB: " mysql_error();
        exit;
    }

    if (!
    mysql_select_db("mydbname")) {
        echo 
    "Kann  mydbname nicht auswählen: " mysql_error();
        exit;
    }

    $sql "SELECT id as userid, fullname, userstatus 
            FROM   sometable
            WHERE  userstatus = 1"
    ;

    $result mysql_query($sql);

    if (!
    $result) {
        echo 
    "Anfrage ($sql) konnte nicht ausgeführt werden : " mysql_error();
        exit;
    }

    if (
    mysql_num_rows($result) == 0) {
        echo 
    "Keine Zeilen gefunden, nichts auszugeben, daher Abbruch";
        exit;
    }

    // Solange eine Zeile mit Daten existiert, wird dies in dem assoziativen Array
    // $row abgelegt.
    // Anmerkung: Wenn Sie nur eine Zeile erwarten, brauchen Sie keine Schleife.
    // Anmerkung: Wenn Sie extract($row) innerhalb der folgenden Schleife
    //            verwenden, können Sie damit die Variablen
    //            $userid, $fullname und $userstatus erzeugen.

    while ($row mysql_fetch_assoc($result)) {
        echo 
    $row["userid"];
        echo 
    $row["fullname"];
        echo 
    $row["userstatus"];
    }

    mysql_free_result($result);

    ?>
    Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

    Kommentar


    • #3
      Öh, ja, das Beispiel ist super, weil es mir eine Möglichkeit der gesicherten Abfrage von Datenbanken gibt (mysql_num_rows() kannte ich noch nicht)

      Von daher schonmal schönen Dank


      Was dieses Beispiel mir jedoch nicht sagt ist, warum das Problem mit $email auftritt

      Irgendwer ne idee?

      Kommentar


      • #4
        Was dieses Beispiel mir jedoch nicht sagt ist, warum das Problem mit $email auftritt
        Weil $email=!'' nicht $email != '' ist! Was Du machst ist

        NOT (bool) {empty string}
        also
        NOT FALSE
        also
        TRUE
        in der Weiterverarbeitung also
        '1' bzw. 1
        an $email zuzuweisen.

        Die Schleife wird so auch unabhängig von der Email immer durchlaufen.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Achso, danke für die Antwort

          Ich programmier seid Jahren in nem Basic-Dialekt (PureBasic), da gibt es diese Zuweisungen in Wahrheitsabfragen nicht. Super, wieder was gelernt

          Kommentar


          • #6
            da gibt es diese Zuweisungen in Wahrheitsabfragen nicht.
            in PHP auch nicht !

            if($x = 2) wäre falsch (Zuweisung)
            if($x == 2) oder if($x === 2) ist richtig.

            Ein Vergleich ist letztendlich auch nur eine Rechenoperation,
            die ein Ergebnis liefert.
            Beschäftige Dich mal mit Assembler oder Mikroprozessoren,
            dann verstehst wieso das so ist.

            Auch das Prüfen eines Zustands wie if($var) ist z.B. eine Rechenoperation welche dann true oder false liefert.
            Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

            Kommentar


            • #7
              in PHP auch nicht !
              Stimmt nicht. Jeder Ausdruck in PHP liefert einen Rückgabewert, der von der Bedingung nach bool typisiert wird und dann verarbeitet werden kann.
              Typisches Beispiel:
              PHP-Code:
              while ($array mysql_fetch_assoc (...)) 
              eigentlich
              PHP-Code:
              if (false !== ($array mysql_fetch_assoc (...))) 
              Nach der Zuweisung an $array liefert der gesamte Zuweisungsausdruck das Array als Rückgabewert zurück. Zum Vergelich mit FALSE wird das Array nach BOOL konvertiert und hernach der Vergleich ausgeführt.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                ja - aber in if-Abfragen macht eine Zuweisung keinen Sinn
                (und daruas reusltieren auch viele Fehler)
                z.B: if($x = 0)
                Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                Kommentar


                • #9
                  Was ich eben im while geschrieben habe kannst Du auch für einen Datensatz in ein if () packen. Siehe Beispiel darunter. Das ist auch durchaus üblich. Bei Dateiverarbeitung gilt dasselbe. Oder DB Verbindungsaufbau. Schließlich und endlich kann bspw. sowas sinnvoll sein:
                  PHP-Code:
                  <?
                  $email = $_GET['email'] or die ('unerlaubter Aufruf.');
                  echo $email;
                  bzw.
                  PHP-Code:
                  <?
                  if (!$email = $_GET['email']) {
                    do_anything ();
                    die ('unerlaubter Aufruf.');
                    }
                  echo $email;

                  Die Aussage stimmt so also nicht. Mein Netbeans markiert solche stellen übrigens im Editor mit einem Achtung-Zeichen.

                  Ein Großteil der Fehler kann so vermieden werden:
                  PHP-Code:
                  if (== $x
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Zitat von Koala Beitrag anzeigen
                    ja - aber in if-Abfragen macht eine Zuweisung keinen Sinn
                    (und daruas reusltieren auch viele Fehler)
                    z.B: if($x = 0)
                    Das ist so nicht richtig.
                    Man muss sich nur im Klaren sein, dass es eine Zuweisung ist und kein Vergleich.

                    PHP-Code:
                    <?php
                    if ($Result func($para))
                    {
                    ... 
                    Mach was mit $Result oder auch nicht.
                    }
                    ?>
                    ist durchaus korrekt und sinnvoll.

                    Es ist sogar etwas kürzer als
                    PHP-Code:
                    <?php
                    $Result 
                    func($para);
                    if (
                    $Result)
                    {
                    ... 
                    Mach was mit $Result
                    }
                    ?>
                    Wobei das nicht wirklich relevant ist.
                    Allerdings wird es interessanter, wenn es um die Bedingung für eine Schleife geht.

                    Das sieht dann so aus:
                    PHP-Code:
                    <?php
                    $Result 
                    func($para);
                    while (
                    $Result)
                    {
                    ... 
                    Mach was mit $Result
                    $Result 
                    func($para);
                    }
                    ?>
                    Das birgt immer das Risiko, dass man bei einer Änderung des Funktionsaufrufs vergisst, den identischen zweiten Aufruf auch zu ändern.

                    Insofern ist das hier vorzuziehen.
                    PHP-Code:
                    <?php
                    while ($Result func($para))
                    {
                    ... 
                    Mach was mit $Result
                    }
                    ?>
                    Allerdings um hier etwas klugzuscheißen (und Dir recht zu geben) :
                    Sinn macht das natürlich trotzdem keinen, weil es in der deutschen Sprache einfach nicht möglich ist, dass etwas "einen Sinn macht". Es kann nur "einen Sinn haben" oder "einen Sinn ergeben" oder sonst was.
                    Aber ich glaube nicht, dass Du das aussagen wolltest.
                    **********************************
                    Nein, ich bin nicht die Signatur.
                    Ich putze hier nur.
                    **********************************

                    Kommentar


                    • #11
                      Sinn macht das natürlich trotzdem keinen, weil es in der deutschen Sprache einfach nicht möglich ist, dass etwas "einen Sinn macht". Es kann nur "einen Sinn haben" oder "einen Sinn ergeben" oder sonst was.
                      lol - das war umgangssprachlich ausgedrückt.
                      Normalerweise achte ich schon auf korrekte Sprache
                      und Schreibweise.
                      Solange ich keine "Standartfragen abhacke" ist aber alles
                      noch im grünen Bereich oder ?

                      Man muss sich nur im Klaren sein, dass es eine Zuweisung ist und kein Vergleich.
                      viele Anfänger vergessen schon mal die zweiten "=" und wundern sich dann daß
                      der Code nicht "funzt".
                      Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                      Kommentar

                      Lädt...
                      X