Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.03.2020
Сообщений: 6
1

Хранение полученной переменной для дальнейшего использования

01.07.2020, 13:44. Просмотров 860. Ответов 7

Здравствуйте, я новичок в PHP и хотел бы узнать. У меня есть определенный код, который выводит на страницу столбец SID из одной таблицы
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
        require_once __DIR__ . '/scripts/connect.php';
  // соединяемся с сервером базы данных
  $connect = mysql_connect($host, $user, $pass)
  or die("Невозможно соединиться с: " . mysql_error());
  // подключаемся к базе данных
  mysql_select_db($name, $connect)
  or die("Нет такой базы данных: " . mysql_error());
  // выбираем все значения из таблицы
  $result = mysql_set_charset("utf8");
  $result = mysql_query("SELECT * FROM `ma_players` WHERE nick='{$steamprofile['personaname']}'")
  or die(mysql_error());
  //выводим из базы
  while($data = mysql_fetch_array($result)){
  ?>
<div class="parent">
                <div class="child">
        <h2 style='margin-bottom: 3px; float:left;'>Привет, <b><?=$steamprofile['personaname']?></b>, рады тебя видеть!</h2>
        <br>
        <br>
                    <div style='float:left;'>
            <!--<a href='#warnings'>
                <button class='btn btn-success' style='margin: 2px 3px;' type='button'>Нарушения</button>
            </a>-->
            <a href='#monitor'>
                <button class='btn btn-success' style='margin: 2px 3px;' type='button'>Мониторинг</button>
            </a>
            <span style='float:left;'><?php logoutbutton(); ?></span>
        </div>
        <br>
        <br>
        <table class='table table-striped'>
            <tr>
                <td><img src='<?=$steamprofile['avatarfull']?>'></td>
            </tr>
            <tr>
                <td><h5>Ссылка на профиль</h5></td>
                <td><h5><?=$steamprofile['profileurl']?></h5></td>
            </tr>
            <tr>
                <td><h5>SteamID</h5></td>
                <td><h5><? echo $data['SID'];?></h5></td>
            </tr>
            <tr>
                <td><h5>Должность</h5></td>
                <td><h5><?  echo $data['group'];}?></h5></td>
            </tr>
        </table>
Вот у меня из базы выводится значение $data['SID'] и потом мне это значение нужно использовать при выводе результата уже из другой таблицы
PHP/HTML
1
2
3
4
5
6
7
8
<td><h5>Дата</h5></td>
                <td><h5><? $result = mysql_set_charset("utf8");
  $result = mysql_query("SELECT * FROM `ma_violations` WHERE SID='{$data['SID']}'")
  or die(mysql_error());
  //выводим из базы
  while($data = mysql_fetch_array($result)){
    echo $data['date'];}
  ?></h5></td>
Вот здесь я не могу понять почему он отказывается выводить значение из таблицы. Я склоняюсь к мнению что при выборке результата из следующей таблицы $data['SID'] просто теряется. Вопрос такой. Можно ли как то решить эту проблему? Спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2020, 13:44
Ответы с готовыми решениями:

Преобразовать массив в строку для дальнейшего использования в качестве параметра
Есть параметр, который принимает числовые значения через запятую. Выглядит он так: 'post_category'...

Вытащить значение переменной для дальнейшего использования
Всем привет, хочу вытянуть значение переменной Вот как это место(где я ее хочу получить)...

Очистить значение переменной для дальнейшего использования
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { setlocale(LC_ALL,...

Передача пераметров объекта для дальнейшего использования
Здравствуйте! Пытаюсь написать простенький код на С++ с использованием классов. Не получается...

7
458 / 344 / 143
Регистрация: 31.08.2019
Сообщений: 935
01.07.2020, 14:14 2

Не по теме:

Цитата Сообщение от artemmetrofan Посмотреть сообщение
новичок в PHP
Новичкам лучше сразу вместо устаревшего расширения php_mysql использовать например неустаревшее php_mysqli
, .... или PDO



Цитата Сообщение от artemmetrofan Посмотреть сообщение
while($data = mysql_fetch_array($result)){
Вроде с условием WHERE nick='{$steamprofile['personaname']}' должно вернуть только один ряд запроса,
т.е. тело while выполнится один раз,
но $data переопределится при второй попытке выполнить mysql_fetch_array($result)
что второй раз вернёт FALSE, что не позволит телу циклу выполниться второй раз
mysql_fetch_array
...Возвращает массив строк, соответствующих обработанному ряду результата запроса, или FALSE, если рядов больше нет.
0
0 / 0 / 0
Регистрация: 03.03.2020
Сообщений: 6
01.07.2020, 16:49  [ТС] 3
Тогда, как мне лучше сделать, чтобы я вытащил из базы данных значение и сохранил его в перемнную, чтобы дальше использовать?
0
458 / 344 / 143
Регистрация: 31.08.2019
Сообщений: 935
01.07.2020, 20:37 4

Не по теме:

извиняюсь, чисто случайно могу пролистывать или не пролистывать по форуму эпизодически :)


Цитата Сообщение от artemmetrofan Посмотреть сообщение
как мне лучше сделать,
Лучше , как я говорил , всё переписать ,) в php-7 уже нет этих mysql_***()

Сохранить в переменной, легко ... просто не известно что можете получать с этим WHERE nick='{$steamprofile['personaname']}'
и где заканчивается первый while...
например просто можно сохранить всё полученное в массив типа
PHP
1
2
3
4
$UserData=array();
if (mysqli_num_rows($result)) {
   $UserData = mysqli_fetch_assoc($result);
   // ... дальше всё то, что было в while
если я угадал, что ожидается только один ряд, и если переделывать на mysqli
Там в mysqli кроме имён функций порядок аргументов изменён
и дескриптоор соединения для многих передавать обязательно.
ничего сложного https://www.php.net/manual/ru/mysqli.query.php


... Вариантов куча, начиная с того что из двух запросов можно сделать один.
И можно использовать часть кода не только для этого одного случая,
например хоть для одного юзера, хоть для постранично нескольких,
хоть для выборки по personaname, хоть по id

Не по теме:

Непонятно так-же откуда берётся $steamprofile['personaname']
неверное из __DIR__ . '/scripts/connect.php'
как и $host, $user, $pass, $name



Добавлено через 4 минуты
Цитата Сообщение от x_lab Посмотреть сообщение
$UserData
наверно $data , но возможно захотите использовать два разных имени
0
0 / 0 / 0
Регистрация: 03.03.2020
Сообщений: 6
02.07.2020, 00:11  [ТС] 5
Ну вообще я вам привел кусок кода, это некий фрэймворк который авторизует пользователя через стим, возвращает на страницу, выводит его ник. Эта переменная хранится в фреймворке.

А за ответ спасибо! Буду пробовать

Добавлено через 36 минут
Вроде все сделал правильно
PHP
1
2
3
4
5
6
7
8
9
10
11
 <?php
$link = mysqli_connect('localhost','u108****','********','u108***************');
if (!$link) {
   printf("Невозможно подключиться к базе данных\n", mysqli_connect_error());
   exit;
}
if ($result = mysqli_query($link, "SELECT * FROM ma_players WHERE nick='{$steamprofile['personaname']}'")){
  $steamid=array();
if (mysqli_num_rows($result)) {
   $steamid = mysqli_fetch_assoc($result);
?>
PHP
1
<? echo($steamid['SID']);}} ?>
На данном этапе пока сложностей нет у меня все выводится корректно
Дальше опять пытаюсь при выборке из другой таблицы сравнить SID с тем, что записано в массиве (по идее) и при попытке вывести то, что соответсвует этому условию- опять пусто
PHP
1
2
3
4
5
<? if ($result3 = mysqli_query($link, "SELECT * FROM ma_violations WHERE SID='{$steamid}'")){
if (mysqli_num_rows($result3)) {
   $row = mysqli_fetch_assoc($result3);
   echo($row['date']);}}
?>
Поясни пожалуйста, что я не так делаю
0
1651 / 1324 / 611
Регистрация: 17.11.2012
Сообщений: 5,878
02.07.2020, 11:17 6
Цитата Сообщение от artemmetrofan Посмотреть сообщение
SID='{$steamid}
PHP
1
SID='{$steamid['SID'l]}
1
0 / 0 / 0
Регистрация: 03.03.2020
Сообщений: 6
02.07.2020, 11:48  [ТС] 7
СПАСИБО БОЛЬШОЕ ВСЕМ. Все заработало
0
458 / 344 / 143
Регистрация: 31.08.2019
Сообщений: 935
02.07.2020, 12:03 8
Лучший ответ Сообщение было отмечено artemmetrofan как решение

Решение

Цитата Сообщение от artemmetrofan Посмотреть сообщение
$steamid = mysqli_fetch_assoc($result);
$steamid это массив, пустой если предидущий запрос выполнился, но не нашёл нужного ряда.
Или должен иметь содержимое типа array('nick'=>'....', 'SID'=>'.....'
т.е. второй запрос как-бы должен быть таким
PHP
1
"SELECT * FROM ma_violations WHERE SID='{$steamid['SID']}'"
не WHERE SID='{$steamid}'

Но непонятно как эти условные блоки между собой связаны...
заметил скобку } вообще где-то в неожиданном месте

Не по теме:


Иногда бывает удобно сделать без exit; как-то например с операторами break; внутри do{...}while(0);
, просто break; используется только в цикле, a try-catch как-то может быть избыточно
например , если не опечатался где-то... не проверял

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
    <div class="parent">
        <div class="child">
<?php
error_reporting(-1);
ini_set('display_errors', 1);
 
/*
Здесь откуда-то взялось $steamprofile['personaname'] возможно подключаете этот файл из другого
 
дальше ещё что-то включаете например с этими
*/
$server_db = "localhost";
$user_db = "xxx";
$pass_db = "xxx";
$database = "yyy";
 
$DEBUG = true; # Более подробные сообщения о ошибках.
$ERRORS = array(); # Массив для строк с ошибками
 
do {  # ... }while(0); Цикл, тело которого выполняется только один раз
    $link = mysqli_connect($server_db, $user_db, $pass_db, $database);
    if(!$link) {
        $ERRORS[] = 'Извините, невозможно подключиться к базе данных'
            . ($DEBUG )? "\n<br/>". mysqli_connect_error() :''; // иногда не стоит показывать всего
        break; // дальше ничего не выполнется
    }
    mysqli_set_charset($link, "utf8"); #например не хочется проверять как выполнилось, типа можно )
    
    $query = "SELECT * FROM ma_players WHERE nick='{$steamprofile['personaname']}'";
    $result = mysqli_query($link, $query);
    if (!$result) {
        $ERRORS[] = 'Извините, не удалось выполнить запрос'
         .  (($DEBUG )? "\n<br/>". mysqli_error($link) ."\n<br/>Запрос: \"$query\"": '');
        break; // ...
    }
    if (!mysqli_stmt_num_rows($result)) {
        $ERRORS[] = 'Запрос ничего не вернул';
        break; // ...
    }
    // дальше например всё выводится
    $steamid = mysqli_fetch_assoc($result);
?>
        <h2 style='margin-bottom: 3px; float:left;'>Привет, <b><?=$steamprofile['personaname']?></b>, рады тебя видеть!</h2>
        <br>
        <br>
                    <div style='float:left;'>
            <!--<a href='#warnings'>
                <button class='btn btn-success' style='margin: 2px 3px;' type='button'>Нарушения</button>
            </a>-->
            <a href='#monitor'>
                <button class='btn btn-success' style='margin: 2px 3px;' type='button'>Мониторинг</button>
            </a>
            <span style='float:left;'><?php logoutbutton(); ?></span>
        </div>
        <br>
        <br>
        <table class='table table-striped'>
            <tr>
                <td><img src='<?=$steamprofile['avatarfull']?>'></td>
            </tr>
            <tr>
                <td><h5>Ссылка на профиль</h5></td>
                <td><h5><?=$steamprofile['profileurl']?></h5></td>
            </tr>
            <tr>
                <td><h5>SteamID</h5></td>
                <td><h5><?= $steamid['SID'] ?></h5></td>
            </tr>
            <tr>
                <td><h5>Должность</h5></td>
                <td><h5><?= $steamid['group'] ?></h5></td>
            </tr>
        </table>
<?php
    $query = "SELECT * FROM ma_violations WHERE SID='{$steamid['SID']}'";
    $result = mysqli_query($link, $query);
    if (!$result) {
        $ERRORS[] = 'Извините, не удалось выполнить запрос'
         .  (($DEBUG )? "\n<br/>". mysqli_error($link) ."\n<br/>Запрос: \"$query\"": '');
        break; // ...
    }
    if (mysqli_stmt_num_rows($result)) {
        echo "      <table>\n";
        while($data = mysqli_fetch_assoc($result)) {
            echo '          <tr><td><h5>Дата</h5></td><td>', $data['date'] , "</td></tr>\n";
        }
        echo "      </table>\n";
    }
 
} while (0);
 
if ($ERRORS) { # были ошибки и как минимум не всё тело do{} выполнено
    echo '          <h5>Произошли ошибки</h5><ul><li>',
            implode('</li><li>', $ERRORS),
            "</li></ul>\n";
}
    
?>
        </div>
    </div>



Добавлено через 3 минуты
с $DEBUG наверно избыточно... но информативно без него оптимальнее
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2020, 12:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Временное хранилище для дальнейшего использования данных
Здравствуйте! Я только начинаю изучать C#.Net. У меня есть маленькая программка, для нее нужно...

Как считать число из stdin для дальнейшего использования
Использую NASM под OCUNIX

Преобразовать формулу для дальнейшего использования в программном коде
Помогите преобразовать данную формулу для дальнейшего их использования в программном коде C Sharp...

Как распознавать данные в String для дальнейшего использования?
Решил написать программу, которая будет решать, заранее заданные пользователем, математические...

Получить выбранное значение DBLookupComboBox для дальнейшего использования
Добрый день, уважаемые! Вопрос следующего характера (не пинайте, вопрос вроде поднимался, но...

Сохранить отрисованный объект в ОЗУ для дальнейшего использования
Рисую в окне график. Есть функция которая вычисляет и выводит его размер и расположение линий....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.