Как показать кредит пользователя на основе его сеанса - PullRequest
0 голосов
/ 16 января 2011

Я разрабатываю простое приложение LAMP, где пользователи могут пополнять свой счет с помощью Paypal. Я подозреваю, что это простая проблема, но потратил довольно много времени на эксперименты безрезультатно и буду признателен за любые мысли:

<ч />

Система имеет систему управления пользователями, работающую нормально с использованием сеансов, но я не могу заставить ее отображать кредит текущего пользователя.

Но я пробовал что-то вроде:

$ result = mysql_query ("
ВЫБЕРИТЕ *
ОТ пользователей
ВНУТРЕННЯЯ РЕГИСТРАЦИЯ
ON account.UserID = account.UserID
ORDER BY account.accountID ");

while ($ _ SESSION ['Username'] = $ row ['Username']) { echo $ row ['Имя пользователя']; echo $ row ['Credit']; } * +1010 *

Я подозреваю, что оператор while недопустим, но я хочу, чтобы он отображал имя пользователя и кредит, где текущее имя пользователя сеанса = имя пользователя, сохраненное в базе данных.

Большое спасибо за то, что взглянули - очень признательны.

Ответы [ 4 ]

2 голосов
/ 16 января 2011

Хорошо, на самом деле в вашем коде много ошибок, которые вы не можете исправить, поскольку вы, очевидно, совсем не знаете php.Но позвольте мне объяснить это, чтобы вы могли лучше понять, что вы сделали неправильно:

Прежде всего, ваше утверждение mysql просто неверно.Почему вы вступаете в поле на себя?Вы не получите соответствующих учетных записей пользователей <->, потому что пользователи фактически никогда не присоединяются.В дополнение к этому, если вы хотите извлечь одну строку (вы хотите только одну, потому что вы хотите отобразить данные только одного пользователя, а выборка большего требует ресурсов), скажите mysql сделать это.Простым примером будет "WHERE a =" b "LIMIT 1 (выберите только строку, где a равно" b ", верните после нахождения первого).

Теперь, чтобы прочитать что-то из вашего запроса, вынеобходимо получить соответствующие данные.Вы можете сделать это с помощью mysql_fetch_assoc / mysql_fetch_array / mysql_fetch_object.Это будет выглядеть примерно так: $data = mysql_fetch_array($query);.В этом случае вам не нужно использовать цикл while(), так как у вас есть только одна строка.Цикл while необходим, только если вы хотите работать с более чем одной строкой.

Остальная часть кода будет правильной, хотя вам не нужно дважды вызывать echo.Вы можете просто соединить обе переменные с помощью ".": echo $row['Username'].$row['Credit'];.Если вы хотите вставить пробел между ними, соедините их с другой точкой: echo $row['Username']." ".$row['Credit'];.

1 голос
/ 16 января 2011
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.
    }
}

Но гораздо лучше получить только одну строку из таблицы:

$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 .....
}
0 голосов
/ 16 января 2011

Одна вещь, которая бросается в глаза, это то, что ваш запрос присоединяется к:

account.UserID=account.UserID

вместо:

account.UserID=user.ID

Кроме того, это не правильно:

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

Знак = предназначен для назначения, а не сравнения, поэтому вы на самом деле устанавливаете значение от $_SESSION['Username'] до $row['Username']. Затем выражение оценивается как логическое значение (так как оно в течение некоторого времени является условным), и если оно будет истинно один раз, оно будет истинно всегда. Город бесконечной петли.

0 голосов
/ 16 января 2011

У вас есть только результат MySQL, теперь вы должны вернуть эту информацию в виде ассоциативного массива (или объекта)

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

Выглядит так, как будто вы используете $ _SESSION ['username'] какспособ проверки подлинности пользователя на сайте, гораздо лучше использовать соленую + хешированную версию имени пользователя и, возможно, время входа в систему (никогда не включайте пароль).

...