2011-01-16 7 views
0

Ich entwickle eine einfache LAMP-App, in der Benutzer ihr Konto mit Paypal gutschreiben können. Ich vermute, dass dies eine einfache Frage, aber habe schon eine ganze Weile verbracht ohne Erfolg zu experimentieren und alle Gedanken schätzen würde:Wie zeige ich das Guthaben eines Benutzers basierend auf seiner Sitzung an?


-System ein Benutzermanagementsystem verfügt, Arbeitssitzungen fein, aber ich kann nicht bekommen zu Zeigt das aktuelle Benutzerguthaben an.

Aber ich habe die Dinge entlang der Linien zu versuchen:

$ result = mysql_query (“
SELECT *
FROM users
INNER JOIN Konto
ON account.UserID = Konto. UserID
ORDER BY account.accountID ");

while ($ _ SESSION [ 'username'] = $ row [ 'username']) { echo $ row [ 'username']; echo $ row ['Kredit']; }

Ich vermute, die während Anweisung ungültig ist, aber ich will es Benutzername und Kredit Echo wo die aktuelle Sitzung username = der Benutzername in der Datenbank gespeichert.

Vielen Dank für einen Blick - sehr geschätzt.

+0

Darf ich Ihnen empfehlen, nicht nur den Benutzernamen als Kriterium für die Online-Präsenz auf Ihrer Website zu speichern? Ich würde empfehlen, entweder eine gesalzene Version des Benutzernamens/ID oder eine verschlüsselte Version des Passworts (es sollte bereits in der Datenbank für die Sicherheit Ihrer Benutzer verschlüsselt sein) zu verwenden und dann vergleichen Sie das auch (zusammen mit dem Benutzernamen/ID). Jemand könnte leicht Sitzungen unter Verwendung z.B. Javascript mit dem Benutzernamen eines Benutzers, der bereits existiert, um anderweitig auf sein Konto zuzugreifen. Nur ein kleiner Hinweis. – eklundchristopher

+0

Mit Blick auf Ihren Code denke ich nicht, dass Sie Zahlungssysteme bis Ihre erfahrenen in soliden Anwendungen erfahren sollten, rate ich Ihnen, einen Programmierer für ein paar Tage Arbeit zu mieten. – RobertPitt

Antwort

2

Okay, es ist wirklich viel falsch mit Ihrem Code, der nicht von Ihnen behoben werden kann, da Sie offensichtlich überhaupt keine Kenntnis von PHP haben.
Aber lassen Sie mich das erklären, damit Sie ein gutes Verständnis davon bekommen, was Sie falsch gemacht haben:

Zuerst ist Ihre mysql Aussage einfach falsch. Warum schließen Sie sich einem Feld an? Sie erhalten nicht die entsprechenden Benutzer < -> account rows, weil Benutzer nie tatsächlich verbunden ist.
Zusätzlich, wenn Sie eine einzelne Zeile holen wollen (Sie wollen nur eine, weil Sie nur die Daten eines Benutzers echoen wollen, das Holen von mehr ist nur in Ressourcen schwerer), sagen Sie mysql, das zu tun. Ein einfaches Beispiel wäre "WHERE a =" b "LIMIT 1 (wählen Sie nur Zeile, wo a gleich" b "ist, zurück nach dem ersten)

Jetzt müssen Sie etwas von Ihrer Abfrage lesen holen die entsprechenden Daten
Sie können tun, dass mysql_fetch_assoc/mysql_fetch_array/mysql_fetch_object unter Verwendung Das ist etwas würde wie folgt aussehen:... $data = mysql_fetch_array($query); In diesem Fall brauchen Sie keine while() Schleife zu verwenden, da Sie nur eine Zeile haben Eine While-Schleife ist nur notwendig, wenn Sie mit mehr als einer Zeile arbeiten möchten

Der Rest Ihres Codes wäre korrekt, obwohl Sie Echo nicht zweimal aufrufen müssen nnect beide Variablen mit einem ".": echo $row['Username'].$row['Credit'];. Wenn Sie ein Leerzeichen einfügen möchten, verbinden Sie es mit einem anderen Punkt: echo $row['Username']." ".$row['Credit'];.

0

Sie nur eine MySQL-Ergebnis haben, jetzt können Sie diese Informationen als assoziatives Array zurück (oder Objekt)

while ($row = mysql_fetch_assoc($result)) { 
    if ($_SESSION['username'] == $row['Username']) { 
     echo $row['Username']; 
     echo $row['Credit']; 
    } 
} 

Es scheint, als ob Sie $ _SESSION [ ‚username‘] als eine Möglichkeit, mit Um die Benutzerauthentifizierung auf der Website zu überprüfen, ist es besser, eine gesalzene + Hashed-Version des Benutzernamens und möglicherweise die Login-Zeit zu verwenden (niemals das Passwort).

1
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
    if ($row['Username'] == $_SESSION['Username']) 
    { 
     echo $row['Username']; 
     echo $row['Credit']; 
     break; // I believe username is unuque. 
    } 
} 

Aber es ist viel besser, nur 1 Zeile aus der Tabelle zu erhalten:

$result = mysql_query(" 
SELECT * 
FROM users 
INNER JOIN account 
ON account.UserID=users.UserID 
WHERE Username ='".mysql_real_escape_string($_SESSION['Username'])."'"); 
if ($result && $row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
    echo ..... 
} 
+1

Warum sollten Sie verwenden, wenn Sie nur eine Zeile vom Tisch bekommen müssen? – Robin

+0

Mein erster (PHP) Code verwendet die ursprüngliche Abfrage aus der Frage (ohne 'WHERE'). Dies ist der Grund, warum ich die zweite Lösung vorgeschlagen habe, die eine Zeile von der DB ergreift. – a1ex07

0

Eine Sache, die ich herausspringt, ist, dass Ihre Abfrage beitritt:

account.UserID=account.UserID 

statt von:

account.UserID=user.ID 

Auch th ist nicht richtig:

while($_SESSION['Username'] = $row['Username']) 

Die = Zeichen für die Zuordnung ist, nicht Vergleich, so sind Sie tatsächlich der Wert von $_SESSION['Username']-$row['Username'] Einstellung. Dann wird der Ausdruck als boolesch bewertet (da er innerhalb einer while-Bedingung liegt), und wenn er einmal wahr ist, wird er für immer wahr sein. Endlosschleife Stadt.