PHP/MySQL Script wird nicht angezeigt

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

  • #16
    Habs eh schon... Trotzdem !

    Kommentar


    • #17
      Zitat von piratos Beitrag anzeigen
      Ich muss das anders ausdrücken

      PHP-Code:
      $row mysql_fetch_object($login_query); 
      Ohne Treffer ergibt das:
      Trotzdem gehört da das while() nicht hin. Wenn man nur einen Wert erwartet, sollte man keine Schleifen benutzen.

      Beispiel:
      PHP-Code:
      if ($row mysql_fetch_object($login_query)) {
          
      $userid $row->id;
      } else {
          
      $userid null;

      Kommentar


      • #18
        Zitat von PHP&&C++ Beitrag anzeigen
        Habs eh schon... Trotzdem !
        Dann bitte auch die Lösung für andere posten.

        Danke
        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #19
          Zitat von h3ll Beitrag anzeigen
          Trotzdem gehört da das while() nicht hin. Wenn man nur einen Wert erwartet, sollte man keine Schleifen benutzen.
          Wer lesen kann hat manchmal Vorteile:

          Jein
          Für Leute aus der anderen Region - das bedeutet man kann das eine wie das andere machen, wobei ich persönlich auch if bevorzugen würde, aber es gibt keinerlei Zwang bis auf die Meinung anderer.

          Und - mal am Rande - Performance:

          Jeweils das beste Ergebnis aus 10 Abfragen:

          while 4.6014785766602E-5

          if 5.1021575927734E-5

          Ist zwar für den Fall hier völlig uninteressant, zeigt aber das man nichts verliert.

          Kommentar


          • #20
            nur mal so zum Verständniss, vielleicht gibt es ja auch andere Lösungen, ich würde es zB. so machen.

            PHP-Code:
            $row mysql_fetch_object($login_query); 
            if(!empty(
            $row['user_id'])) {
            echo 
            'Hallo du .$row['user_id'];
            }
            else {
            echo '
            Zugangsdaten falsch!';

            wie willst du sonst überprüfen ob der Login erfolgreich war, wenn nicht mit einer IF Abfrage?

            ich muß auch gestehen das ich mysql_fetch_object nicht verwende.

            Kommentar


            • #21
              Zitat von piratos Beitrag anzeigen
              Wer lesen kann hat manchmal Vorteile:

              Für Leute aus der anderen Region - das bedeutet man kann das eine wie das andere machen, wobei ich persönlich auch if bevorzugen würde, aber es gibt keinerlei Zwang bis auf die Meinung anderer.

              Und - mal am Rande - Performance:

              Jeweils das beste Ergebnis aus 10 Abfragen:

              while 4.6014785766602E-5

              if 5.1021575927734E-5

              Ist zwar für den Fall hier völlig uninteressant, zeigt aber das man nichts verliert.
              Es geht weder um Performance noch um den persönlichen Geschmack, sondern es geht um den guten Programmierstil. Wenn man nicht mehrere Werte behandelt, sollte man auch keine Schleifen verwenden, sonst könnte ein anderer Programmierer etwas anderes vermuten.

              Natürlich kann man es machen und while verwenden. Man kann sogar sehr vieles machen, ohne dass es technisch gesehen "falsch" ist. Viele Wege führen nach Rom. Aber besser ist, wenn der Weg dreispurig, asphaltiert und vernünftig Beschildert ist. Man sollte niemanden auf den Schotterweg schicken, auch wenn er auch damit zum Ziel kommt.

              Kommentar


              • #22
                den guten Programmierstil
                Ich möchte dir nicht zu Nahe treten und auch nicht beleidigen, aber das geht mir langsam auf den Senkel.

                Schreibe deinen Stil wie es dir gefällt aber bitte trete nicht als selbst ernannter Stilayatollah auf und vor allem zwinge deinen Stil den anderen nicht auf bzw. versuche nicht andere diesbezüglich ständig zu bevormunden.

                Kommentar


                • #23
                  Zitat von piratos Beitrag anzeigen
                  Ich möchte dir nicht zu Nahe treten und auch nicht beleidigen, aber das geht mir langsam auf den Senkel.

                  Schreibe deinen Stil wie es dir gefällt aber bitte trete nicht als selbst ernannter Stilayatollah auf und vor allem zwinge deinen Stil den anderen nicht auf bzw. versuche nicht andere diesbezüglich ständig zu bevormunden.
                  Das ist nicht "mein" Stil. Wenn man in einem Team arbeitet, muss man so programmieren, dass sich auch derjenige sofort auskennt, der den Code zum ersten mal ansieht. Und wenn du for- oder while-Schleifen für Daten verwendest, die nur einmal vorkommen können, dann vermittelst du demjenigen eine falsche Absicht. Das kann im besten Fall den Programmierer nur ein paar Sekunden aufhalten, aber im blödesten Fall neue Fehler provozieren. So oder so ist das einfach eine schlechte Art und Weise.

                  Von mir aus kannst du in deinem stillen Kämmerlein so programmieren, wie du es für richtig haltest. Aber bring nicht andere dazu zu glauben, dass es "eh egal" ist, wie sie es machen. Das ist es nämlich nicht.

                  Und ich denke auch, dass mir hier viele Recht geben werden. Und denen hab ich bestimmt nicht "meinen" Stil aufgezwungen, sondern das sagt einem einfach der gesunde "Programmierverstand".
                  Zuletzt geändert von h3ll; 29.07.2009, 20:39.

                  Kommentar


                  • #24
                    Jawohl Ayatollah - blah blah und gut ist.

                    Kommentar


                    • #25
                      Jetzt ist hier Ruhe im Karton. Sonst hau ich dazwischen.

                      Peter
                      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                      Meine Seite

                      Kommentar


                      • #26
                        Okay also meine Lösung:
                        Code:
                        [COLOR=#000000][FONT=Courier New][COLOR=#0000cc]<?php[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#000000]$username [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]$_POST[/COLOR][COLOR=#006600][[/COLOR][COLOR=#cc0000]'username'[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]];[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#0000cc]$password [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]$_POST[/COLOR][COLOR=#006600][[/COLOR][COLOR=#cc0000]'password'[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]];[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#0000cc]$session [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]session_id[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]();[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#0000cc]$connection [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]mysql_connect[/COLOR][COLOR=#006600]([/COLOR][COLOR=#cc0000]'localhost'[/COLOR][COLOR=#006600],[/COLOR][COLOR=#cc0000]'user'[/COLOR][COLOR=#006600],[/COLOR][COLOR=#cc0000]'geheim'[/COLOR][COLOR=#006600]) or die([/COLOR][COLOR=#cc0000]"Keine Verbindung zum Server."[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]); [/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#0000cc]mysql_select_db[/COLOR][COLOR=#006600]([/COLOR][COLOR=#cc0000]'datenbank'[/COLOR][COLOR=#006600]) or die([/COLOR][COLOR=#cc0000]"Keine Verbindung zur Datenbank."[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]); [/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#0000cc]$pass [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]md5[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$password[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]);[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#0000cc]$user [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]$username[/COLOR][/FONT][FONT=Courier New][COLOR=#006600];[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#0000cc]$login [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#cc0000]'SELECT id FROM members WHERE name="'[/COLOR][COLOR=#006600].[/COLOR][COLOR=#0000cc]$user[/COLOR][COLOR=#006600].[/COLOR][COLOR=#cc0000]'" AND pass="'[/COLOR][COLOR=#006600].[/COLOR][COLOR=#0000cc]$pass[/COLOR][COLOR=#006600].[/COLOR][COLOR=#cc0000]'" LIMIT 1';[/COLOR][/FONT][/COLOR]
                        [COLOR=#000000][FONT=Courier New][COLOR=#0000cc]$login_query [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]mysql_query[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$login[/COLOR][COLOR=#006600]);[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#006600]while([/COLOR][COLOR=#0000cc]$row [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]mysql_fetch_object[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$login_query[/COLOR][COLOR=#006600]))[/COLOR][/FONT][FONT=Courier New][COLOR=#006600] {[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#0000cc]$userid [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]$row[/COLOR][COLOR=#006600]->[/COLOR][COLOR=#0000cc]id[/COLOR][/FONT][FONT=Courier New][COLOR=#006600];[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#006600]}[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#006600]echo [/COLOR][COLOR=#cc0000]'Willkommen User-Nummer '[/COLOR][/FONT][FONT=Courier New][COLOR=#006600];[/COLOR][/FONT]
                        [FONT=Courier New][COLOR=#006600]echo [/COLOR][COLOR=#0000cc]$userid[/COLOR][/FONT][COLOR=#006600][FONT=Courier New];[/FONT][/COLOR]
                        [FONT=Courier New][COLOR=#0000cc]?>[/COLOR][/FONT]
                        [FONT=Courier New]<form action="login.php" method="post">[/FONT]
                        [FONT=Courier New]                           Benutzername: <input type="text" name="username" /><br />[/FONT]
                        [FONT=Courier New]                           Passwort: <input type="password" name="password" /><br />[/FONT]
                        [FONT=Courier New]                           <input type="submit" name="submit" value="Einloggen" />[/FONT]
                        [FONT=Courier New]                           </form>[/FONT][/COLOR]

                        Kommentar


                        • #27
                          Dein Script ist anfällig für SQL-Injections. Außerdem ist die While-Schleife sinnlos.

                          Kommentar


                          • #28
                            Zitat von piratos Beitrag anzeigen
                            Ich muss das anders ausdrücken

                            PHP-Code:
                            $row mysql_fetch_object($login_query); 
                            Ohne Treffer ergibt das:
                            Notice: Trying to get property of non-object
                            Auch nicht so ganz korrekt.

                            Die While-Schleife macht ja genau das gleiche - sie wendet mysql_fetch_XY so lange an, bis der Rückgabewert false lautet.
                            Wenn es kein Ergebnis gibt, dann wird der Anweisungsblock der While-Schleife auch nicht durchlaufen.

                            Die von dir genannte Meldung bekommt man erst im nächsten Schritt, wenn man versuchen würde, auf Eigenschaften von $row zuzugreifen, obwohl $row eben nicht das erwartete Objekt, sondern auch wieder nur false enthält.

                            Und die While-Schleife "rettet" im eingangs geposteten Script auch nicht - wenn die nicht durchlaufen wird, dann hat halt $userid keinen Wert, und ist beim anschliessenden Versuch, es auszugeben, nicht vorhanden und wirft dann an der Stelle eine entsprechende Meldung.

                            Die While-Schleife finde ich jedenfalls auch fehl am Platze, wenn lediglich ein Datensatz erwartet wird. Da nutze ich mysql_num_rows, und entscheide an Hand dessen, ob ich mir einen Wert aus diesem einen Datensatz zur Ausgabe hole, oder melde dass gar nichts gefunden wurde.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #29
                              Es kann hier nie um die letzte Ausarbeitung eines geposteten Fragescripte gehen, das wäre völlig unsinnig, da kommt man wegen kleinster Fragestellung ins Geschwafel ohne Ende und genau das hilft dem Fragenden kein Stück weiter, ja macht sogar das Forum selbst zunehmend uninteressanter.

                              Ich z.B. würde immer eine DB Klasse (nämlich meine) verwenden, da dort alles abgehandelt ist.

                              So eine normale Abfrage sieht da z.B. technisch so aus (Auszug):
                              PHP-Code:
                              $result mysqli_query($this->db,$sql);
                              if (
                              preg_match("/^(select|explain|show|describe)\s+/i"$sql) )
                              {
                                
                              $this->num_rows mysqli_num_rows($result);
                              }
                              elseif (
                              preg_match("/^(insert|delete|update|replace)\s+/i"$sql) )
                              {
                                
                              $this->rows_affected mysqli_affected_rows($this->db);

                              und man kann feststellen, das wir, wenn man es selbst macht, eigentlich identisch abarbeiten.

                              Man muss auch klar sehen, das hier in der Regel Leute Fragen die nicht so gewaltige Kenntnisse haben.

                              Ein solches Ausschweifen würde diesen nichts bringen und nur höchst verunsichern.

                              So auch das ewige Stilgeschwafel - das macht einen Anfänger bestimmt nicht schlauer.

                              Wer einen tollen Stil hat oder sich stur an eine interne Arbeitsanweisung seiner Firma hält und meint das wäre Gott und die Welt - ok - seine Sache, der soll das doch hier in ein Tutorial verkünden, das können dann alle lesen und sich dran halten oder nicht und nicht immer dann die Wundertüte öffnen, wenn einem nichts anderes mehr einfällt.

                              So etwas als tollen Stil zu bezeichnen kann ja wohl nicht das richtige sein.

                              PHP-Code:
                              if ($row mysql_fetch_object($login_query)) {
                                  
                              $userid $row->id;
                              } else {
                                  
                              $userid null;

                              dann würde das besser aussehen.
                              PHP-Code:
                              // var deklarieren und initalisieren
                              $userid null;
                              if (
                              $row mysql_fetch_object($login_query)) 
                                  
                              $userid $row->id

                              Kommentar

                              Lädt...
                              X