Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem bei der Abfrage 2er Tabellen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem bei der Abfrage 2er Tabellen

    Hallo liebe PHP-Freunde!

    Ich habe ein problem, ich möchte mir Werte aus 2 Tabellen ausgeben lassen. Jedoch werden mir nur die Spaltennamen der jeweiligen Tabellen ausgegeben! Ich weiß nicht weiter, für mich ist alles richtig, der Mysql Query stimmt auch und sucht auch die gewollten daten herraus wenn ich sie bei PHPmyAdmin eintippe..

    Wäre toll wen mir jemand helfen könnte

    PHP-Code:
    <table class="orderarchive">
    <tr>
        <td>Produkt</td>
        <td>Beschreibung</td>
        <td>Serial</td>
        <td>Inventar</td>
        <td>Kundenname</td>
    </tr>
    <?php 
    include ("mysql.php");
        
    $abfrage 'SELECT * FROM lager, kundendaten WHERE active = "off.png" AND kundendaten.kunde = lager.kunde';
    $ergebnis $db->query($abfrage);
        while (
    $row mysqli_fetch_object($ergebnis)){

            
    $produkt $row->lager.produkt;
            
    $name $row->lager.name;
            
    $serial $row->lager.serial;
            
    $inventar $row->lager.inventar;
            
    $kunde $row->kundendaten.vorname;
            
    $test $row->kundendaten.name;
                
            echo 
    "<tr>
                    <td>"
    .$produkt."</td>
                    <td>"
    .$name."</td>
                    <td>"
    .$serial."</td>
                    <td>"
    .$inventar."</td>
                    <td>"
    .$kunde." ".$test."</td>";
        };
    ?>
    </table>
    Vielen Dank!

  • #2
    Punktoperatoren sind zur Stringverkettung, der Zugriff auf die Eigenschaften wird so also nicht funktionieren. Vergib ein Alias für jede Spalte, oder Escape deinen Objektzugriff.

    Kommentar


    • #3
      http://php.net/manual/de/language.types.string.php

      Kommentar


      • #4
        hm.. ich würd ja erstmal anders abfragen, damit du klärst, was für Daten du überhaupt vorliegen hast


        PHP-Code:
         while ($row mysqli_fetch_object($ergebnis)){
           echo 
        '<pre>';
           
        var_dump($row);
           echo 
        '</pre>'
        denn in deinem Abfrage-Ergebnis liegen nur einfach Spaltennamen vor, keine zusammengesetzten aus Tabellenname + Spaltenname - wenn es dabei Kollisionen gibt, musst du in der Abfrage im SELECT-Teil mit Alias-Namen arbeiten

        Kommentar


        • #5
          Zitat von chorn Beitrag anzeigen
          Punktoperatoren sind zur Stringverkettung, der Zugriff auf die Eigenschaften wird so also nicht funktionieren. Vergib ein Alias für jede Spalte, oder Escape deinen Objektzugriff.
          Ich hab das zwar nicht ganz verstanden, aber ich habe den Tabellen auch schon ein alias gegeben (Kundendaten k, lager l usw..) Hat aber nichts daran geändert das die Spaltennamen ausgegeben werden..


          Der Link ist für mich auch ein Buch mit sieben Siegeln.. Muss ich was an meinem Echo ändern??


          -- Bin leider sehr unerfahren in php, habe nur das php-einfach tut gemacht und den rest bisher selbst zusamm geflickt...

          Danke für die schnelle antwort

          Kommentar


          • #6
            das Problem siehst du , wenn du mal meine 3 Befehle hinter deinem While aufführst - in $row gibt es keine Kombinationen aus Tabellenname und Spaltenname, sondern nur Spaltennamen ...

            also du kannst nicht damit rechnen, dass
            PHP-Code:
            $row->k.name oder 
            $row
            ->kundendaten.name 
            irgendwas bewirkt - die Bezeichner gibt es NICHT
            du musst die Aliase nicht auf die Tabellen setzen, sondern auf die einzelnen Spalten, die den gleichen Namen haben in beiden Tabellen

            Code:
            SELECT
               l.produkt as produkt,
               l.name as name, 
               l.serial as serial, 
               l.inventar as inventar, 
               k.vorname as kundenvorname, 
               k.name as kundenname 
            FROM 
               lager as l,
               kundendaten as k 
            WHERE 
               k.active = "off.png" AND 
               k.kunde = l.kunde

            Kommentar


            • #7
              PHP-Code:
              $produkt $row->lager.produkt
              Hier wird $row->lager mit der PHP-Konstante produkt verkettet ("a" . "b" == "ab"). Da $row->lager keinen Wert hat und die Konstante nicht existiert, wird einfach der Name der Konstante als String ausgegeben.
              AFAIK speichert mysqli die Werte tatsächlich in solchen eigentlich unmöglichen Attributen, es gibt aber eine Syntax um darauf zuzugreifen:
              PHP-Code:
              $produkt $row->{"lager.produkt"}; 
              Das würde ich eher als Workaround sehen, der Hinweis mit Spalten-Aliasen (nicht Tabellen-Aliasen!) wurde dir ja schon gegeben:
              Code:
              SELECT lager.produkt as lager_produkt, ....
              Edit: Vergiss es, $row->produkt ist natürlich richtig... das gibt allerdings Probleme sobald Spaltennamen mehrfach vorkommen. Ein Grund mehr, von "SELECT *" Abstand zu nehmen.

              Kommentar


              • #8
                Vielen Dank!

                Jetzt klappt es, habe den Spaltennamen ein alias gegeben und sie machen alles wie es soll! Das es immer solche kleinigkeiten sind... Naja!

                Danke für die schnellen antworten!

                Grüße

                Jackslash

                Kommentar

                Lädt...
                X