Как показать кредит пользователя на основе его сеанса

0

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


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

Но я пробовал вещи в соответствии с:

$result = mysql_query ( "
SELECT *
ОТ пользователей
INNER JOIN account
ON account.UserID = account.UserID
ORDER BY account.accountID ");

while ($ _ SESSION ['Username'] = $row ['Username']) { echo $row ['Username']; echo $row ['Credit']; }

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

Большое спасибо за то, что посмотрели - очень ценили.

  • 0
    Могу ли я порекомендовать вам не только хранить имя пользователя в качестве критерия для того, чтобы быть онлайн на вашем сайте? Я бы порекомендовал использовать либо соленую версию имени пользователя / идентификатора, либо зашифрованную версию пароля (она уже должна быть зашифрована в базе данных ради безопасности ваших пользователей), а затем сравнить ее (вместе с именем пользователя / идентификатором). ). Кто-то может легко создавать сеансы, используя, например, javascript с именем пользователя, который уже существует, для доступа к его учетной записи в противном случае. Просто маленький намек.
  • 0
    Глядя на ваш код, я не думаю, что вам следует обращаться с платежными системами, пока вы не станете более опытным в разработке надежных приложений, я советую вам нанять программиста на несколько дней работы.
Теги:
lamp

4 ответа

2
Лучший ответ

Хорошо, что в коде есть много ошибок, которые не могут быть исправлены вами, поскольку у вас явно нет знания 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 $row['Username'].$row['Credit'];.
Если вы хотите вставить промежуток между ними, соедините его с другой точкой: echo $row['Username']." ".$row['Credit'];.

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.
    }
}

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

$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
    Зачем вам использовать время, когда нужно получить только одну строку из таблицы?
  • 0
    Мой первый (php) код использует исходный запрос из вопроса (без WHERE ). По этой причине я предложил второе решение, которое берет одну строку из БД.
0

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

account.UserID=account.UserID

вместо:

account.UserID=user.ID

Кроме того, это неверно:

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

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню