Problem mit MySQL Abfrage in PHP

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

  • Problem mit MySQL Abfrage in PHP

    Hi!
    Ich habe folgendes Problem:
    Ich bin grad dabei ein kleines Community System in PHP zu schreiben. Jetzt hänge ich leider bei der Funktion, die die Benutzerdaten ausgeben soll fest. Die Benutzerdaten sind in zwei Tabellen gespeichert. Eine mit Username, echter Name, Email, hash etc. und eine mit Daten für das Benutzerprofil.
    Wenn ich mir nun aus Tabelle 1 die User-ID zum jeweiligen User suchen will, um mit entsprechender ID die richtigen Daten aus Tabelle 2 zu bekommen, füllt er mir die Variable einfach mit "Resource ID #2". Erstens is das totaler Kappes, da ich ja eine Zahl benötige und zweitens weil es auch noch die falsche zahl ist (er gibt immer nur die 2 aus)!
    Was ist an dem Script verkehrt??? Sorry, falls dies eher in das MySQL-Forum gehören sollte!
    Ich habe die Tabellen und die Funktion in einer Textdatei unter http://www.hmoc.de/hilfe/hilfe.txt abgelegt!

    Danke im Voraus
    Grüße Tim

    P.S.: Falls es ein dummer Fehler ist bitte ich um Entschuldigung! Bin noch Anfänger!

  • #2
    Moin,

    so wie dein Code aussieht, hat deine Funktion gar keine DB-Connection. Entweder du übergibst die Variable mit dem Connect-Identifier an die Funktion oder machst das mit global, wie bei $feedback.

    Ansonsten, es geht eigentlich auch einfacher. Da du in beiden Tabellen einen eindeutigen und v.a. gleichen Eintrag hast, kannst du die Tabellen auch in einem Query verbinden:

    mysql_query("select * from user left join user_dat on user_id=id where user_id='$deine_wahl'");

    d.h. es werden alle Datensätze der Tabelle user mit einem passenden Datensatz aus user_dat verbunden (über "on user_id=id"). "left join" bedeutet sozusagen, daß die linke Tabelle (hier "user") vorrang hat und Datensätze, die in "user_dat" zuviel wären, bleiben unberücksichtigt.

    Wenn du gleiche Feldnamen hast, kannst du die über user.feldname und user_dat.feldname ansprechen.

    Ah, ich sehe gerade, daß deine user_dat auch ein autoincrement hat, dann wird wohl eher reg_id deine zur user_id passende Zelle sein?!

    Kommentar


    • #3
      ...Nachtrag...

      HI!

      Danke für die Antwort!
      Die DB-Connection wird in dem Script, in dem die Funktion aufgerufen wird gestartet! Die Funktion db_query() entspricht mysql_query(9 (is nur mit error reporting).
      Also mit der Verbindung habe ich keine Probleme. Nur wenn ich die user_id einlesen möchte kommt immer "Resource #2" bei raus, ganz gleich welchen user_name ich abfrage! Woran liegt das??? Ist der MySQL-Query falsch formuliert?

      Grüße Tim

      Kommentar


      • #4
        Sorry, das kommt davon, wenn man den Code nur überfliegt.

        Du hast da eine Stelle, die da lautet:

        $user_id=$result;

        das geht natürlich nicht.
        In $result hast du ja nur das Result des Querys also true oder false!!!
        Du mußt das hier angeben:

        $user_id=mysql_result($result,0,"user_id");

        dann hast du schon mal die UserID.

        Außerdem hängst du anschließend alle Ergebnisse aus user_dat jeweils mit einem <td> zusammen, d.h. <td>Name<td>blabla<td>usw. sieht vielleicht auch nicht richtig aus.

        Naja, egal, aber du brauchst oben schon die richtige result-abfrage.
        Oder macht das auch deine db_query-Funktion?

        Kommentar


        • #5
          Danke!!!

          Danke! Jetzt funktioniert's! :-)
          In meinem scheiß PHP Buch stand nicht drin, daß man das Ergebnis vor der Weiterverarbeitung erst mit mysql_result() bearbeiten muß!
          Ist das bei jeder Abfrage von Daten so? Oder wirft er nur bei den ID's son kram aus? Wenn ich die User-Namen abrufe, stehen die nämlich gleich korrekt in der Variablen! Oder ist das Zufall, daß es da passt?

          Grüße Tim

          Kommentar


          • #6
            Nein, das ist immer so, allerdings hast du mehrere Möglichkeit, ein Ergebnis der DB abzuverlangen:

            mysql_result($dbanfrage,$i,"feldname") -> greift auf Feldname im Resultset und da auf den $i-ten Datensatz zu. Bei großen Datenmengen eine Methode, die Zeit und Traffic kostet

            $daten=mysql_fetch_array($dbanfrage) ist ziemlich cool und liefert das Ergebnis als assoziatives Array in $daten -> da kannst du direkt dann mit $daten[feldname] zugreifen. (so machst du das ja auch in der while-schleife!)

            dann noch mysql_fetch_row, liefert auch ein Array vom gesamten Datensatz, aber nur als $daten[0], $daten[1]... anzusprechen. mysql_fetch_array ist auch nicht wesentlich langsamer, also ist das sehr zu empfehlen!!

            Kommentar

            Lädt...
            X