php erkennt leeres feld nicht?

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

  • #16
    Lass dir endlich die Queries ausgeben!
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #17
      Die erste Zeile zieht einen Datensatz mit gewünschtem Firmenschalter-Wert aus der DB. Gibt es keinen solchen Datensatz, gibt queryRow() dennoch etwas zurück. Wahrscheinlich ist das NULL, könnte aber auch FALSE oder ein leeres Array sein.
      Du kannst das herausfinden, indem du im WHERE mal 1 = 0 einbaust und dann ein var_dump($mandant) machst.

      Um herauszufinden ob die If-Bedingung in diesem Fall wahr wird, kannst du im If-Block ein die('im IF') einsetzen.

      Noch etwas: Die Logik dieses Codeschnipsels ist sehr fragwürdig. Wenn der Firmenschalter passt, wird die ID des Mandanten zurückgegeben. Wenn sie nicht passt, wird anhand eines anderen Kriteriums ein Mandant bestimmt. Aber was dann? Sollte dann nicht auch dessen ID zurückgegeben werden?
      Zuletzt geändert von onemorenerd; 08.07.2009, 19:05.

      Kommentar


      • #18
        @ unset, muss dich leider enttäuschen, aber ich hab 0 Ahnung von php, ausserdem hab ich den code zu hause eh nicht testen.

        danke onemorenerd, auf die bestätigung habe ich gewartet.
        d.h. also wenn das datenbankfeld leer ist, gibt queryrow doch irgendeinen wert mit...somit kommt die if abfrage erst garnicht zum zug, wenn ich das richtig verstanden habe.

        danke schonmal, ich werde das morgen am telefon mit meinem Kollegen klären.

        Kommentar


        • #19
          Zitat von j4n Beitrag anzeigen
          @ unset, muss dich leider enttäuschen, aber ich hab 0 Ahnung von php, ausserdem hab ich den code zu hause eh nicht testen.
          Du wirst ja wohl in der Lage sein, dich in einem Handbuch schlau zu machen (auch wenn ich dir die entsprechenden Befehle schon Eingangs genannt habe)? Ansonsten: Wenn du dazu _nicht_ in der Lage bist, solltest du dir evtl. einen anderen Job suchen. PHP ist nicht VB, aber das sind Basics!

          Ohne zu wissen, was in deinen Queries steht und was deine Klassen zurückgeben, ist das hier ein Ratespiel.
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #20
            Zitat von j4n Beitrag anzeigen
            d.h. also wenn das datenbankfeld leer ist, gibt queryrow doch irgendeinen wert mit...somit kommt die if abfrage erst garnicht zum zug
            Das ist so nicht korrekt. Die If-Bedingung wird auf jeden Fall evaluiert.
            Ob sie wahr wird und deshalb der If-Block betreten wird, hängt davon ab was $mandant enthält und wie PHP das automatisch zu einem Boolean castet.

            Kommentar


            • #21
              @ unset, ich progarmmiere auch erst seit bischen mehr als 2 monaten vb, komme da auch gut voran. dass es nicht nur bei vb bleiben wird ist klar, aber für den anfang kann ich auch nicht 5 programmiersprachen gleichzeitig lernen.

              und das man förmlich bleiben und man mir trotz dem helfen kann zeigen hier andere

              danke onemorenerd..ich werde das morgen abklären, kannst du mir als abschluss in etwa sagen, was drin stehen darf und was nicht?

              Bedanke mich an der Stelle an alle hilfbereiten und wünsch allen noch einen schönen Abend.

              Gruß Jan.

              Kommentar


              • #22
                Zitat von j4n Beitrag anzeigen
                @ unset, ich progarmmiere auch erst seit bischen mehr als 2 monaten vb, komme da auch gut voran. dass es nicht nur bei vb bleiben wird ist klar, aber für den anfang kann ich auch nicht 5 programmiersprachen gleichzeitig lernen.
                Dann kommst du nicht aus der VB Ecke sondern kannst nichts. Das ist nicht bös' gemeint, aber wichtig für helfende zu wissen.

                Gerne etwas ausführlicher:

                Lass dir den entscheidenen Query ausgeben. Lass dir das Ergebnis ausgeben:

                PHP-Code:
                $query 'SELECT * FROM kundenlizenzen WHERE Firmenschalter = \''$this->get['f'] .'\'';
                var_dump($query);
                $mandant $db->queryRow($query);
                var_dump($mandant);
                        
                        if(!
                $mandant) {
                            
                $mandant $db->queryRow('SELECT * FROM kundenlizenzen WHERE FB1 = \''$this->get['fb1'] .'\'');
                        } else {
                            return 
                $mandant['ID']; 
                Was auf true/false gecastet wird, wird hier erklärt: PHP: PHP type comparison tables - Manual

                Damit sollte dir genügend Hilfe zur Selbsthilfe gegeben worden sein.
                [FONT="Helvetica"]twitter.com/unset[/FONT]

                Shitstorm Podcast – Wöchentliches Auskotzen

                Kommentar


                • #23
                  Okay, dass noch dabei bin und NOCH ( =D ) nicht in die "vb ecke" gehoere muss ich wohl eingestehen.

                  und danke unset, werd mich dran machen.

                  Kommentar


                  • #24
                    Zitat von onemorenerd Beitrag anzeigen

                    Noch etwas: Die Logik dieses Codeschnipsels ist sehr fragwürdig. Wenn der Firmenschalter passt, wird die ID des Mandanten zurückgegeben. Wenn sie nicht passt, wird anhand eines anderen Kriteriums ein Mandant bestimmt. Aber was dann? Sollte dann nicht auch dessen ID zurückgegeben werden?

                    PHP-Code:
                    function check_mandant()
                        {
                            
                    $db = &singleton('database');
                            
                            
                    // Mandant anhand des Firmenschalter suchen
                            
                    $mandant $db->queryRow('SELECT * FROM kundenlizenzen WHERE Firmenschalter = \''$this->get['f'] .'\'');
                            
                            if(!
                    $mandant) {
                                
                    $mandant $db->queryRow('SELECT * FROM kundenlizenzen WHERE FB1 = \''$this->get['fb1'] .'\'');
                            } else {
                                return 
                    $mandant['ID'];
                            }

                            if(!
                    $mandant) {
                                
                    $ssql 'INSERT INTO kundenlizenzen (FB1, FB2, PLZ, Firmenschalter, AngelegtAm) '.
                                        
                    'VALUES (\''.$this->get['fb1'].'\', \''.$this->get['fb2'].'\', \''.$this->get['p'].'\', \''.$this->get['f'].'\', NOW())';
                                
                                
                    $db->query($ssql);
                                
                                
                    $id $db->insertId();
                                
                    $this->log($this->user_idsprintf($this->config['msg_mandant_not_found'], $this->get['fb1'], $id));
                                
                                return 
                    $id;
                            } else {
                                return 
                    $mandant['ID'];
                            }
                        } 

                    Kommentar


                    • #25
                      Vertausche mal if- und else-Zweig und negiere dementsprechend die if-Bedingung. Dann brauchst du auf einmal das else gar nicht mehr ...
                      PHP-Code:
                      // Auswahl nach Firmenschalter
                      $mandant = ...;
                      if (
                      $mandant) {
                          
                      // hat geklappt, wir sind fertig
                          
                      return $mandant['id'];
                      }

                      // Auswahl nach FB1
                      $mandant = ...;
                      if (
                      $mandant) {
                          
                      // hat geklappt, wir sind fertig
                          
                      return $mandant['id'];
                      }

                      // neu anlegen
                      ...
                      return 
                      $id
                      Das nennt sich early return. Sehr übersichtlich, sehr flach.
                      Eine andere Variante wäre verschachteltes if-else.
                      PHP-Code:
                      // Auswahl nach Firmenschalter
                      $mandant = ...;
                      if (!
                      $mandant) {
                          
                      // hat nicht geklappt, versuche Auswahl nach FB1
                          
                      $mandant = ...;
                          if (!
                      $mandant) {
                               
                      // hat nicht geklappt, neu anlegen
                              
                      ...
                              return 
                      $id;
                          }
                      }
                       
                      return 
                      $mandant['id']; 
                      Early return ist was für Funktionen, die nur etwas "besorgen" und zurückgeben, verschachteltes if-else hat dagegen den Vorteil, dass man vor dem return noch irgend etwas mit den Daten anstellen kann.
                      Zuletzt geändert von onemorenerd; 08.07.2009, 23:00.

                      Kommentar


                      • #26
                        PHP-Code:
                         function check_mandant()
                            {
                                
                        $db = &singleton('database');

                                
                        // Mandant anhand des Firmenschalter suchen

                                 
                        $fschalter str_replace(" """$this->get['f']);

                                if(!empty (
                        $fschalter) && strlen($fschalter) > 0){
                                    
                        $mandant $db->queryRow('SELECT * FROM kundenlizenzen WHERE Firmenschalter = \''.$fschalter.'\' ');
                                }else{
                                    
                        $mandant false;
                                }

                                if(!
                        $mandant) {
                                    if(!empty(
                        $this->get['fb1'])){
                                        
                        $mandant $db->queryRow('SELECT * FROM kundenlizenzen WHERE FB1 = \''$this->get['fb1'] .'\'');
                                }
                                } else {
                                    return 
                        $mandant['ID'];
                                }

                                if(!
                        $mandant) {
                                    
                        $ssql 'INSERT INTO kundenlizenzen (FB1, FB2, PLZ, Firmenschalter, AngelegtAm) '.
                                    
                        'VALUES (\''.$this->get['fb1'].'\', \''.$this->get['fb2'].'\', \''.$this->get['p'].'\', \''.$this->get['f'].'\', NOW())';

                                    
                        $db->query($ssql);

                                    
                        $id $db->insertId();
                                    
                        $this->log($this->user_idsprintf($this->config['msg_mandant_not_found'], $this->get['fb1'], $id));

                                    return 
                        $id;
                                } else {
                                    return 
                        $mandant['ID'];
                                }
                            } 


                        ...habs gelöst!

                        in der Datenbank wurde tasächlich immer ein leerzeichen mitgegeben, warum auch immer.

                        Danke an alle für eure Mithilfe.


                        Grüße Jan

                        Kommentar

                        Lädt...
                        X