Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2019, 18:27   #1
reanimatik
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 27
По умолчанию Вывод данных из БД в таблицу

Не работает фрагмент кода:

Код:

 $table="<table border=1 width='600px' align=center>";
                $table .= "<tr >";
                  $table .= "<td >".email."</td>";
                  $table .= "<td >".Статус."</td>";
                  $table .= "<td >".Удалить."</td>";
                  $table .= "<td >".Забанить."</td>";
                  $table .= "<td >".Редактировать."</td>";
                  $table .= "</tr>";

                while($row = $result->fetch_assoc()) {
                  $table .= "<tr >";
                  $table .= "<td >".$row['email']."</td>";
                  $table .= "<td >". if($row['status']===1){ echo "Пользователь"; } 
                                    elseif($row['status']===10){ echo "Администратор"; } 
                                    elseif($row['banned']===1){ echo "Забанен"; } ."</td>";
                  $table .= "<td >".?> <button class="delete">Удалить</button> <?."</td>";
                  $table .= "<td >".?> <button class="ban">Забанить</button> <?."</td>";
                  $table .= "<td >".?> <button class="red">Редактировать</button> <?."</td>";
                  $table .= "</tr>";
                }

                $table .= "</table>";
                echo $table;

Ругается на строку:

Код:
$table .= "<td >". if($row['status']===1){ echo "Пользователь"; } 
                                    elseif($row['status']===10){ echo "Администратор"; } 
                                    elseif($row['banned']===1){ echo "Забанен"; } ."</td>";
Ошибка: Parse error: syntax error, unexpected 'if' (T_IF)


Я пытался и без конкатенации, и открыть "<? ?>", так же ставить двойное и одиночное ровно, ничего не помогает.
reanimatik вне форума Ответить с цитированием
Старый 25.03.2019, 20:05   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

так вы пытаетесь склеить строку и оператор.. так нельзя
сделайте так
Код:
  if($row['status']===1){ $user = "Пользователь"; } 
                                    elseif($row['status']===10){ $user = "Администратор"; } 
                                    elseif($row['banned']===1){ $user = "Забанен"; } 
   $table .= "<td >$user</td>";
ADSoft вне форума Ответить с цитированием
Старый 26.03.2019, 08:57   #3
reanimatik
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 27
По умолчанию

Не помогло
Сделал условие не в склейке и все заработало

Код:
while($row = $res->fetch_assoc()) {
                  $table .= "<tr >";
                      $table .= "<td >".$row['email']."</td>";
                      $table .= "<td >";

                          if($row['status']===1){ echo "Пользователь"; } 
                            elseif($row['status']===10){ echo "Администратор"; } 
                            elseif($row['banned']===1){ echo "Забанен"; } ;

                      $table.="</td>";
                      $table .= "<td >";
                          ?> 
                          <button class="delete">Удалить</button> 
                          <? 
                      $table .="</td>";
                      $table .= "<td >";
                          ?> 
                          <button class="ban">Забанить</button> 
                          <? 
                      $table .="</td>";
                      $table .= "<td >";
                          ?> 
                          <button class="red">Р*едактировать</button> 
                          <? 
                      $table .="</td>";
                  $table .= "</tr>";
                }
reanimatik вне форума Ответить с цитированием
Старый 26.03.2019, 09:47   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от reanimatik Посмотреть сообщение
Не помогло
покажите полностью, как Вы сделали, что не помогло.


Цитата:
Сообщение от reanimatik Посмотреть сообщение
Сделал условие не в склейке и все заработало
Да ладно. Приведённый Вами код - не работоспособен.
во-первых, нет echo $table
а во-вторых, эти ваши echo "Пользователь"; echo "Администратор"; ... внутри склейки строки с $table приведут к тому, что надписи будут не в таблице (как, видимо, планировалось), а перед таблицей.

впрочем.
Хозяин - барин. Раз Вас результат устраивает, то и хорошо!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.03.2019, 12:50   #5
reanimatik
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
покажите полностью, как Вы сделали, что не помогло.
Уже прошел этот момент довольно далеко


Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Да ладно. Приведённый Вами код - не работоспособен.
во-первых, нет echo $table
а во-вторых, эти ваши echo "Пользователь"; echo "Администратор"; ... внутри склейки строки с $table приведут к тому, что надписи будут не в таблице (как, видимо, планировалось), а перед таблицей.

впрочем.
Хозяин - барин. Раз Вас результат устраивает, то и хорошо!
Да, вы правы, надписи статуса вообще отсутствовали, а баттоны были над таблицей. Но мне на тот момент был важен вывод хотя бы таблицы. Сейчас же я все исправил. Выводит все и корректно(скрин, к сожалению приложить не могу - пытался по-разному, но форум не дает), вот код

Код:
<?php
include 'bd.php';
function checkStatus($status) 
{
  if($status == 1){
    return "Пользователь";
  } elseif($status == 10) {
    return "Администратор";                         
}}

if(isset($_GET['email'])){

  $email= $_GET['email'];
  $sql="DELETE FROM users WHERE email = '$email'";
  $db->query($sql);

}

if(isset($_GET['emai']))
         
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>admin page</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://fonts.googleapis.com/css?family=Raleway:300,400,500,700|Open+Sans" rel="stylesheet">
    <link rel="stylesheet" href="css/styles-merged.css">
    <link rel="stylesheet" href="css/style.min.css">
    <link rel="stylesheet" href="css/custom.css">
    <link rel="stylesheet" href="css/go_style.css">
    <link rel="stylesheet" href="css/header_style.css">
</head>
<body>
    

        <section class="users">
                <h1>Господство над пользователями</h1>
                
                <? 
                
                $sql="SELECT id, email, status, banned FROM users";
                $res=$db->query($sql);
                ?>     
                <form action="<?=$_SERVER['PHP_SELF']?>" method="POST">
                <?
                $table="<table border=1 width='600px' align=center>";
                  $table .= "<tr >";
                      $table .= "<th >".email."</th>";
                      $table .= "<th >".Статус."</th>";
                      $table .= "<th >".Удалить."</th>";
                      $table .= "<th >".Забанить."</th>";
                      $table .= "<th >".Редактировать."</th>";
                  $table .= "</tr>";

                  while($row = $res->fetch_assoc()) {
                  $table .= "<tr >";
                      $table .= "<td >".$row['email']."</td>";

                      $table .= "<td>".checkStatus($row['status']);"</td>";
                      $table .= '<td ><a href="'.$_SERVER['PHP_SELF'].'?email='.$row['email'].'">Удалить</a> </td> ';
                     /* $table .= '<td ><input type="submit" class="delete" id="delete" name="delete" value="Удалить"> </td> ';*/
                      
                      $table .= '<td ><a href="'.$_SERVER['PHP_SELF'].'?email='.$row['email'].'" class="ban">Забанить</a> </td>';

                      $table .= '<td ><a href="'.$_SERVER['PHP_SELF'].'?email='.$row['email'].'">Редактировать</a> </td>';
                  $table .= "</tr>";
                }

                $table .= "</table>";  
                echo $table; 

                ?>
              </form>
        </section>
          
<script>
</script>
</body>
</html>
reanimatik вне форума Ответить с цитированием
Старый 26.03.2019, 13:21   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от reanimatik;1773951[CODE
]$table="<table border=1 width='600px' align=center>";
$table .= "<tr >";
$table .= "<th >".email."</th>";
$table .= "<th >".Статус."</th>";
$table .= "<th >".Удалить."</th>";
$table .= "<th >".Забанить."</th>";
$table .= "<th >".Редактировать."</th>";[/CODE]
ужас!!
Вы хоть бы в логи PHP сервера заглянули.
увидели бы там такое:
Цитата:
Код:
[26-Mar-2019 10:13:28 UTC] PHP Notice:  Use of undefined constant email - assumed 'email' in C:\Apache2\htdocs\test_table.php on line 5
[26-Mar-2019 10:13:28 UTC] PHP Notice:  Use of undefined constant Статус - assumed 'Статус' in C:\Apache2\htdocs\test_table.php on line 6
[26-Mar-2019 10:13:28 UTC] PHP Notice:  Use of undefined constant Удалить - assumed 'Удалить' in C:\Apache2\htdocs\test_table.php on line 7
[26-Mar-2019 10:13:28 UTC] PHP Notice:  Use of undefined constant Забанить - assumed 'Забанить' in C:\Apache2\htdocs\test_table.php on line 8
[26-Mar-2019 10:13:28 UTC] PHP Notice:  Use of undefined constant Редактировать - assumed 'Редактировать' in C:\Apache2\htdocs\test_table.php on line 9
тогда уже хотя бы так:
Код:
                  $table .= "<tr >";
                      $table .= "<th >Email</th>";
                      $table .= "<th >Статус</th>";
                      $table .= "<th >Удалить</th>";
                      $table .= "<th >Забанить</th>";
                      $table .= "<th >Редактировать</th>";
                  $table .= "</tr>";
или так:
Код:
                  $table .= "<tr >
                       <th >Email</th>
                       <th >Статус</th>
                       <th >Удалить</th>
                       <th >Забанить</th>
                       <th >Редактировать</th>
</tr>";
остальное нормально.
пойдёт.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.03.2019, 18:58   #7
reanimatik
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 27
По умолчанию

Спасибо
reanimatik вне форума Ответить с цитированием
Старый 27.03.2019, 08:36   #8
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

Цитата:
$email= $_GET['email'];
$sql="DELETE FROM users WHERE email = '$email'";
отличная возможность для sql иньекций

в адресной строке вводим ....index.php?email=aaaa'ssss и все крашится
а если поумнее строку составить - то можно удалить всех пользователей из бд...
ADSoft вне форума Ответить с цитированием
Старый 27.03.2019, 09:22   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
отличная возможность для sql иньекций

в адресной строке вводим ....index.php?email=aaaa'ssss и все крашится
а если поумнее строку составить - то можно удалить всех пользователей из бд...
точно Вы абсолютно правы!!
Dux1-gcXQAIdk.png
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.03.2019, 12:53   #10
reanimatik
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 27
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
отличная возможность для sql иньекций

в адресной строке вводим ....index.php?email=aaaa'ssss и все крашится
а если поумнее строку составить - то можно удалить всех пользователей из бд...
Да, но моих знаний недостаточно, что бы улучшить код. Готов впитать ваш опыт)))

А еще можете посоветовать, если не сложно, как мне сделать бан юзера и редактирование, если единственный индетификатор я использовал($_GET['email']) в строке:

Код:
$table .= '<td ><a href="'.$_SERVER['PHP_SELF'].'?email='.$row['email'].'">Удалить</a> </td> ';
Что бы реализовать бан и редактирование, мне так же нужно ссылаться либо на ID, либо на маил(который уже занят)

Пробовал через инпуты сделать, типа

Код:
<input type="submit" name="ban" value="Забанить">

if(isset($_POST['ban'])){
...
}
Но не работает, var_dump($email) показывает нулевой результат

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

Последний раз редактировалось reanimatik; 27.03.2019 в 13:36.
reanimatik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод данных с другого сайта в таблицу WonderDoggy JavaScript, Ajax 0 22.12.2017 15:15
Вывод данных их текстого файла в таблицу REztor WPF, UWP, WinRT, XAML 5 24.01.2016 20:48
вывод из базы данных в таблицу ... s88s PHP 9 11.12.2014 10:17
Вывод данных в таблицу(проблема) Heng Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 12.03.2014 17:22
Вывод данных из DBrida в уже существующую таблицу Excel ins813 БД в Delphi 0 02.10.2012 10:05