Kleines Datenbankproblem - wer kann helfen

soundi1972

Grünschnabel
Hallo alle zusammen ,

Ich habe da ein kleines aber sehr nervendes Problem.
Ich habe eine Datenbank (vorgegeben von einem Script) und möchte folgendes machen :

Eine Kontoübersicht erstellen, in der Name des (1) Geldsenders sowie Name des (2) Geldempfängers und auch der (3) Betrag dargestellt werden sollen in einer Tabelle.

Mein Problem ist nun dass die ID von (1) und (2) in einer Tabelle namens Transactions gespeichert sind und die eigendlichen namen in einer Tabelle namens UserAccounts.

Die UserID des Benutzers steht in der Session und wird korrekt angezeigt , also nehme ich mir die UserID = PrincipalID und lese alle daten aus der Transactions Tabelle die bei Receiver diese UserID haben und lese dann die Sender ID aus .

nun nehme ich mir ja diese Sender ID und suche diese in UserAccounts mit einer neuen Select Abfrage um alle daten anzeigen zu lassen die über die Nutzer ID gelaufen sind.

Hier mal der grundcode :

PHP:
<h2>Deine Kontoaktivitäten! </h2></br>
<h2>Empfangen <img src="templates/coins1.png" width="28" height="26" alt=""/></h2>
<table width="509" class="">
<tr>
   <th width="46">#</th>
   <th width="213">Gesendet von</th>
   <th width="135">Empfänger</th>
   <th width="95">Betrag</th>
</tr>
<?php


// abfrage sender
$statement = $pdo->prepare("SELECT * FROM transactions WHERE receiver = '$Userid1'");
   $result = $statement->execute(array('receiver' => $Userid1));
   $user12 = $statement->fetch();
   $userid2 = $user12['sender'];
   $userid3 = $user12['receiver'];
   $amount1 = $user12['amount'];
   $statement5 = $pdo->prepare("SELECT * FROM UserAccounts WHERE PrincipalID = '$userid2'");
   $statement1 = $pdo->prepare("SELECT * FROM UserAccounts WHERE PrincipalID = '$userid3'");

   
   

   
   
   // abfrage receiver

   $result5 = $statement5->execute(array('PrincipalID' => $userid2));
   $user5 = $statement5->fetch();
   $userid5 = $user5['FirstName'];
   $userid6 = $user5['LastName'];


   
   
// abfrage Sender

   $result1 = $statement1->execute(array('PrincipalID' => $userid3));
   $user2 = $statement1->fetch();
   $uname = $user2['FirstName'];
   $uname1 = $user2['LastName'];
   

   
$count = 1;

   

   
   echo "<tr>";
   echo "<td>".$count++."</td>";
   echo "<td>".$userid5. " " .$userid6."</td>";
   echo "<td>".$uname. " " .$uname1."</td>";
   echo "<td>".$user12['amount']. " COINS"."</td>";
   echo "</tr>";
while($user12 = $statement->fetch()) {
   echo "<tr>";
   echo "<td>".$count++."</td>";
   echo "<td>".$userid5. " " .$userid6."</td>";
   echo "<td>".$uname. " " .$uname1."</td>";
   echo "<td>".$user12['amount']. " COINS"."</td>";
   echo "</tr>";
}

?>
</table>
 
Hi

es wäre hilfreich, wenn
  • du uns eine Übersicht der beteiligten Tabellen und deren Spalten aufschreibst
  • und uns dann auch noch sagst, wo Hilfe gebraucht wird...

Btw., es ist zwar schon mal gut, dass du PDO verwendest (statt den nicht mehr existierenden mysql_ - Funktionen, von denen sich viele Leute nicht trennen wollen), aber dein Code ist anfällig für SQL-Injections. PHP-Variablen mit $ bindet man nicht in SQL-Abfragen ein. PDO mit prepare bietet die Möglichkeit, da Platzhalter mit : zu verwenden und dann die Werte mit verschiedenen "bind"-Funktionen zuzuweisen.
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort ,

Hier erstmal bilder von den Tabellen :

transactions.jpg useraccounts.jpg
So da die Tabellen einmal die UserAccounts und einmal die Transactions tabelle.

Ich möchte z. B. alle Umsätze anzeigen lassen die der eingeloggte User hat also brauche ich die eigene ID und die des senders die bekomme ich (empfänger = receiver und sender = sender) .

würde dann so aussehen denke ich mal "SELECT FROM Transactions WHERE receiver = 'USERID'" . USERID ist die von der SESSION übergebene eigene UserID.

dann muss ich mit dem ergebniss die einzelnen Usernamen aus der UserAccounts Tabelle auslesen um dann amount also betrag und usernamen des senders und den eigenen in einer tabelle darzustellen was dann am ende so aussehen soll.

umsätze.jpg

ich verzweifle bald hier die coins werden optimal angezeigt aber der erste name also Gesendet von steht immer der gleiche.
 
Warum packst Du nicht alles in eine Abfrage? :)

Beispielsweise:
SQL:
SELECT t.*, ua.* FROM Transactions t LEFT JOIN UserAccount ua ON(t.UUID = ua.PrincipalID) WHERE t.UUID = DeineUserIDAusDerSession

Da Ich nicht genau weiß wie, deine UUID, PrincipalID und Session genau aussehen, ist es nicht so einfach. :)

Zumal deine Tabellen ansicht nicht aussagekräftig sind, welche Daten gegenüber der anderen Tabelle kompatible sind.
In der Transactions mit UUID ist zum Verhältnis der UserAccounts was gleich?

Wie erstellst Du deine SessionID? Da nicht plausible ist wie die Stringfolge: 00000-0000-0000-0000000 erstellt wird. :)
 
Die session ist da eigendlich unerheblich weil dass funzt ja alles top , die UUID in der Transactions tabelle ist gleichzusetzen mit der PrincipalID in der UserAccount tabelle .
Das heist ich muss ihm 1.) sagen hol dir alle UUID's aus der Tabelle wo der receiver ich bin und 2.) muss ich dann mit der ausgelesenen also den ausgelesenen sender ID's=PrincipalID's in der UserAccount Tabelle alle namen der User über die ausgelesene sender ID von der Transactions Tabelle auslesen.

Alle angaben in der Transactions Tabelle also sender,receiver sind in der UserAccount Tabelle PrincipalID's und amount ist klar ist der Betrag sowie die UUID die Transaktions ID ist.

Gruß soundi
 

Neue Beiträge

Zurück