Mehrere Datenbanken

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

  • Mehrere Datenbanken

    Hallo liebe PHP Gemeinde,

    kurz Vorab: Ich arbeite mich zur Zeit noch in PHP ein, habe aber schon die Suchfunktion genutzt.

    Ich erkläre euch mal was ich gerade bastel und wo mein Problem liegt:

    Ich habe zwei Datenbanken laufen. In der einen sind Kundendaten gespeichert, in der anderen die Waren für die Kunden. Diese beiden sind verknüpft. Ich kann auf einen Administrationsbereich zugreifen um dort einen "Code" erstellen zu lassen. Dieser Code ist für eine andere Firma.

    Der Code wird dargestellt in einem Textarea und kann von dort aus per Knopfdruck in eine Textdatei importiert werden.

    In DB1 werden also Kundendaten gespeichert und hinterher als Kopfzeile ausgegeben.
    In DB2 werden also Warendaten gespeichert und hinterher als Positionszeile ausgegeben.

    Mein Problem ist folgendes:

    Ich kann per Checkboxes wählen, welche Codes generiert werden sollen. Das klappt auch, allerdings entstehen Fehler wenn ich mehrere gleichzeitig generieren lassen möchte.

    Wenn ich nur eine Person anwähle, bekomme einen Code angezeigt, hier mal ein kleines Beispiel:

    K|Daten|Daten|Daten usw usw|||
    P|Warendaten1
    P|Warendaten2
    P|Warendaten3

    So in der Art wird dieser Code mir angezeigt. Wenn ich nun mehrere Kunden anwähle, dann passiert folgendes:

    K|KUNDE2|Daten|Daten usw usw|||
    P|Warendaten1
    P|Warendaten2
    P|Warendaten3

    P|Warendaten1
    P|Warendaten2
    P|Warendaten3


    K|KUNDE1|Daten|Daten usw usw|||
    P|Warendaten1
    P|Warendaten2
    P|Warendaten3

    _______________________________

    Das bedeutet: 1 Kunde bekommt sein Code richtig generiert. Jeder weitere Kunden, bekommt nochmal alle Daten des vorangegangenen.

    Versteht ihr die Problematik?

    Ich erspare euch mal hier irgendwelche Großen Codes zu posten...ich habe aber folgende Bedingung:

    PHP-Code:
    "WHERE (post_id IN (".$l.")) "); 
    So sieht das im Where aus. Zusätzlich wollte ich jetzt noch folgendes machen:

    PHP-Code:
    "WHERE (lg.post_id IN (".$l.") && lgw.l_id IN (".$l."))" 
    D.h. ich wollte einfach noch eine zweite Bedingung stellen. Aber das ganze funktioniert leider nicht so wie es sollte. Alle ID's stimmen, dass habe ich bereits mit Testausgaben getestet.

    Könntet ihr mir vielleicht einen Ansatz geben, wie ihr zwei Datenbanken gleichzeitig anzapfen würdet und das diese dann noch richtig angezeigt werden?

    mfg

  • #2
    Re: Mehrere Datenbanken

    Original geschrieben von Gramthug
    Das bedeutet: 1 Kunde bekommt sein Code richtig generiert. Jeder weitere Kunden, bekommt nochmal alle Daten des vorangegangenen.
    Das scheint mir doch aber eher ein Problem bei der Ausgabe dieser Daten zu sein?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hallo,

      ja richtig genau, das Problem liegt bei der Ausgabe. Ich habe es eben versucht wie folgt zu Lösen:

      PHP-Code:
      $result['posts'] = $db->sql_query("SELECT np.*, nc.* " .
                          
      "FROM {$basic->dt['logistik']} AS np, {$basic->dt['logistik_w']} AS nc " .
                          
      "WHERE (np.post_id IN (".$l.") && nc.l_id IN (".$l.") "  .
                          
      "ORDER BY np.p_time "); 
      Aber leider funktioniert das nicht so wirklich, ich bekomme folgende Fehlermeldung:

      Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in...

      Ich habe nochmal eine Testausgabe gemacht ob auch die ID übermittelt wird; sie wird übermittelt.

      Wo könnte das Problem liegen?

      mfg

      Kommentar


      • #4
        Original geschrieben von Gramthug
        ja richtig genau, das Problem liegt bei der Ausgabe. Ich habe es eben versucht wie folgt zu Lösen:
        Das ist doch nicht die Ausgabe - das ist das Auslesen der Daten aus der Datenbank.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Hallo,

          sofern da kein Einwand kommt, gehe ich davon aus das dieser Teil des Codes richtig ist

          Ich gebe alles mit While aus. Wie kann es denn sein, dass er vorangegangene Ausgaben erneut reinnimmt? Ist das ein Problem bei der Reihung des Codes?

          So sieht das ganze komplett aus:

          PHP-Code:
          $l implode(","$_POST['list']);
              
              echo 
          $l;
              
              
          // output of every available post
                  
          $result['posts'] = $db->sql_query("SELECT np.*, nc.* " .
                                                      
          "FROM {$basic->dt['logistik']} AS np, {$basic->dt['logistik_w']} AS nc " .
                                                      
          "WHERE (np.post_id IN (".$l.") && nc.l_id IN (".$l.") ");


                  
                  
          // output post(s)
                  
          while ($row['posts'] = $db->sql_fetch_object($result['posts'])){
                      foreach(
          $row['posts'] as $key => $value){
                          
          $row['posts']->$key stripslashes($value); 
          Ich sollte vielleicht erwähnen, dass dieser Code nicht von mir ist. Ich habe das alles von meinem Vorgänger bekommen und versuche mich dort nun reinzuarbeiten.

          mfg

          Kommentar


          • #6
            Ersetz mal dies
            PHP-Code:
            $result['posts'] = $db->sql_query("SELECT np.*, nc.* " .
                                                        
            "FROM {$basic->dt['logistik']} AS np, {$basic->dt['logistik_w']} AS nc " .
                                                        
            "WHERE (np.post_id IN (".$l.") && nc.l_id IN (".$l.") "); 
            Mit
            PHP-Code:
            $sql "SELECT np.*, nc.* " .
                  
            "FROM {$basic->dt['logistik']} AS np, {$basic->dt['logistik_w']} AS nc " .
                  
            "WHERE (np.post_id IN (".$l.") && nc.l_id IN (".$l.") ";

            echo(
            $sql "<br /><br />");

            $result['posts'] = $db->sql_query($sql) or die(mysql_error()); 
            ich glaube

            Kommentar


            • #7
              Ok, habe das gemacht und bekomme folgendes ausgegeben:

              SELECT np.*, nc.* FROM logistik AS np, logistik_w AS nc WHERE (np.post_id IN (1) && nc.l_id IN (1)

              You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

              mfg

              Kommentar


              • #8
                WHERE (np.post_id IN (1) && nc.l_id IN (1)
                Was fällt auf? Genau hingucken?
                ich glaube

                Kommentar


                • #9
                  Hallo,

                  ich habe eben mal die Klammern entfernt...war es das was du meintest? Wenn nicht, tut es mir leid. Wie gesagt arbeite mich da rein und bin noch am Referenzen lernen

                  Aber die Fehlermeldung hat sich dadurch reduziert:

                  Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in

                  mfg

                  Kommentar


                  • #10
                    Hm, was für Klammern hast du wie entfernt? Hast du das mit mysql_error dringelassen?

                    Wenn ja, dann ist das jetzt eine neue Stelle. Bitte zeigen.

                    (Wie übrigens in unseren Regeln beschrieben ist, verlangt dieser "supplied argument is not a valid MySQL result resource..." - Fehler dringend nach mysql_error, und das Ausgeben der Query ist auch nie verkehrt... )
                    ich glaube

                    Kommentar


                    • #11
                      Hallo,

                      so habe ich das verändert:

                      PHP-Code:
                      $sql "SELECT np.*, nc.* " .
                            
                      "FROM {$basic->dt['logistik']} AS np, {$basic->dt['logistik_w']} AS nc " .
                            
                      "WHERE (np.post_id IN $l && nc.l_id IN $l ";

                      echo(
                      $sql "<br /><br />");

                      $result['posts'] = $db->sql_query($sql) or die(mysql_error()); 
                      mfg

                      Kommentar


                      • #12
                        Das ist nicht richtig. "IN" braucht eine "Liste", und die muss in Klammern stehen.

                        Und selbst wenn die da wären ist das noch falsch.
                        WHERE (np.post_id IN (1) && nc.l_id IN (1)
                        Guck das nochmal genau an. Nicht irgendwas machen, sondern nachdenken.
                        ich glaube

                        Kommentar


                        • #13
                          Hallo,

                          ja jetzt verstehe ich. IN braucht eine List, habe die vorhin nicht angegeben. Sorry. Aber hier die Liste exestiert:

                          PHP-Code:
                          $l implode(","$_POST['list']); 
                          Und die Liste kommt hier her:

                          PHP-Code:
                          echo "<TD><input type=\"checkbox\" name=\"list[]\" value=\"{$row['posts']->post_id}\">{$row['posts']->post_id}</TD>\n"
                          mfg

                          Kommentar


                          • #14
                            Ne, das is schon richtig. Ne Liste is es auch, wenn es nur eine Zahl ist.

                            WHERE (np.post_id IN (1) && nc.l_id IN (1)
                            die Listen sind (1). Was anderes ist falsch - Brille aufsetzen und angucken! Where, Klammer auf, ... usw. Da fehlt was.
                            ich glaube

                            Kommentar


                            • #15
                              Hallo,

                              ich weis es leider nicht. Wie gesagt, ich arbeite mich da rein und habe nur das von meinem Vorgänger.

                              Ich habe aber eben etwas interessantes gelesen, wegen dem IN. Es hieß, dass man je nach Feldtyp immer anders auslesen müsste. D.h. mal mit ' und mal ohne...

                              Wenn das doch stimmen würde, könnte es ja niemals bei mir funktionieren, weil ich unterschiedliche Felder bei mir habe...

                              Kannst du mir das vielleicht kurz erklären?

                              mfg

                              Kommentar

                              Lädt...
                              X