За последние 24 часа нас посетили 17480 программистов и 1724 робота. Сейчас ищут 923 программиста ...

Тонкости в использовании php скобок

Тема в разделе "PHP для новичков", создана пользователем Drag, 5 фев 2012.

  1. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Здравствуйте.У меня возникла одна проблема,не приходит на мозг как её решить.Имеется структура кода,примерно такая:
    <? //Открытие 1 php скобки
    <??> //2
    <??> //3
    ?> //Закрытие 1 php скобки
    Как я понял из результата то, все что расположено в 2 и 3 читается как обычный HTML,так как он "шалееет" от этих скобок и не понимает что к какой отнести.Суть вопроса в том,можно ли как-то указать особенно php скобку,чтобы он ее как-то отличал от обычной?
     
  2. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    если ты в середине кода используешь открытие пхп скобки, то это читается не как html, а как ошибка
     
  3. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Ошибки он не пишет.А даже выводит все на экран как надо,только то что написано в php скобках выводит как обычным текстом
     
  4. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    а пхп сам точно работает?

    что выдаст код типа
    <?php
    print '1234567';
    ?>
     
  5. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Выдаст 1234567.Вот полный пример моего кривого кода:
    <html>
    <body>
    <?
    session_start();
    if (isset($_SESSION['user'])) {
    $auth = "Привет ".$_SESSION['user']."!<br />\n";
    $auth .= "<a href='logout.php'>Выйти !<br />\n</a>";
    $docum = '
    <html>
    <link rel="stylesheet" type="text/css" href="CSS/style.css">
    <title>База данных портала Drag.su</title>
    <body bgcolor=#fecd1a>

    <?
    $link=mysql_connect("mysqlserver","","") or die ("Could not connect");
    mysql_select_db("z174030_inventar",$link) or die ("Could not select database");
    $sql="select * from `user` ORDER BY BINARY FIO ";
    $res=mysql_query($sql) or die("could not query");
    $num=mysql_num_rows($res);
    ?>
    <table align=left border="1" width=40%>
    <tr bgcolor=#FF6633>
    <td>База</td>
    <td>Телефон</td>
    <td>ФИО</td>
    </tr>
    <?
    if ($num>0)
    {
    while ($row=mysql_fetch_array($res))
    {
    echo(<tr>
    <td>$row[1]</td>
    <td>$row[2]</td>
    <td><a href=user.php?id=$row[ID_User]>$row[FIO] </a></td>
    </tr> );
    }
    }
    ?>
    </table>

    <table align="left" border="0">
    <tr>
    <form name="form" method="post" action="forma.php">
    <td><input type="submit" name="Submit" value="Добавление пользователя"> </td>
    </form> </tr>
    <tr>
    <form name="form" method="post" action="formaD.php">
    <td><input type="submit" name="Delete" value="Удаление пользователя"> </td>
    </form> </tr>
    <tr>
    <form name="form" method="post" action="formaR.php">
    <td><input type="submit" name="Edit" value="Редактирование пользователя"> </td>
    </form> </tr>
    <tr><td><a href="index.php">Вернуться на главную страницу</a>
    </td></tr>
    </table>



    </body>
    </html>';

    }else {
    $auth = <<< AUTH

    AUTH;

    }
    ?>
    <?echo $auth; ?>
    <?echo $docum; ?>

    Суть этой ереси в том что это будут закрытые данные,и если пользователь не залогинен,то он ничего не увидит,таблица попросту пропадет.А тут массивы не работают,и выдаются текстом
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А для чего ты PHP код засунул в $docum?

    Поэтому он выводит его как HTML.
     
  7. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    так у тебя <? находятся внутри текстовой переменной

    конечно это не воспринимается как код :)
     
  8. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    У меня из базы выводятся данные с помощью php.А засунул чтобы незарегистрированные пользователи видели пустую страницу,вместо данных

    Добавлено спустя 1 минуту 29 секунд:
    Я просто только начинаю учить php.Если вы подскажите способ чтобы данные выводились зарегистрированным пользователям,а другим информация закрыта я буду рад попробовать ваши предложения
     
  9. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    зря :)
    если нужно чтоб незарегенные посетители видели пустую страницу - сделай просто проверку в самом начале.

    хранить код в базе - это зло :)

    http://www.php.ru/manual/function.eval.html в помощь :) но это зло :)
     
  10. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Та
    Можно поробывать,спс)
    А код я храню в виде хеша.Почитал вроде люди так делают,я же не профи и учусь на ошибках

    Добавлено спустя 2 минуты 39 секунд:
    А почему зло?Как надо вообще правильно делают?
     
  11. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    зло с точки зрения безопасности.
    логически проверить насколько безопасен код, который ты берёшь из строки, практически невозможно.
     
  12. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Понятно.Спасиб за ответы.Пойду переписывать свой "быдло" код.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не забудь про редактор с подсветкой типа бесплатного netbeans
     
  14. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Хочу вернуться к сути проблемы,просто не могу понять как скрыть данные. Но к примеру данные из таблицы он показывает что зареганным,что нет.Просто реально не врубаюсь почему.Проверки проходят,только как привязать это к коду не впихивая это в переменную $docum не пойму.Вот пример кода:Помоги решить эту проблемку.
    <?
    session_start();
    if (isset($_SESSION['user'])) {
    $auth = "Привет ".$_SESSION['user']."!<br />\n";
    $auth .= "<a href='logout.php'>Выйти</a>";
    $docum = "Эта информация только для зарегистрированных";
    }else {
    $auth = <<< AUTH

    AUTH;
    $docum = "Эта общая информация";
    }
    ?>
    <html>
    <link rel="stylesheet" type="text/css" href="CSS/style.css">
    <title>База данных портала Drag.su</title>
    <body bgcolor=#fecd1a>

    <?
    $link=mysql_connect("","","") or die ("Could not connect");
    mysql_select_db("z174030_inventar",$link) or die ("Could not select database");
    $sql="select * from `user` ORDER BY BINARY FIO ";
    $res=mysql_query($sql) or die("could not query");
    $num=mysql_num_rows($res);
    ?>
    <table align=left border="1" width=40%>
    <tr bgcolor=#FF6633>
    <td>База</td>
    <td>Телефон</td>
    <td>ФИО</td>
    </tr>
    <?
    if ($num>0)
    {
    while ($row=mysql_fetch_array($res))
    {
    echo("<tr>
    <td>$row[1]</td>
    <td>$row[2]</td>
    <td><a href=user.php?id=$row[ID_User]>$row[FIO] </a></td>
    </tr>" );
    }
    }
    ?>

    <? echo $auth; ?>
    <hr />
    <? echo $docum; ?>
    </body>
    </html>
     
  15. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    Проще всего разбить на 2 файла - в одном код для авторизированных юзеров, в другом - форма авторизации, или что еще тебе там надо.
    И в зависимости от значения isset($_SESSION['user']) инклюдить первый иди второй файл.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сессии спасут тебя
     
  17. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Оке пошел вникать в сессии, и в стратегии разделения файлов
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    файлы отдавай скриптом где проверяй права
     
  19. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Код нечитабелен , представим что таким образом написано в 5 раз больше строк кода и начнём путаться , новичек темболее.

    Для меня идеальной была бы реализация основанная на шаблонах , но автору и покатит простое всовывание хтмл в переменную (непомню как это называется)
    <?php
    $myvar = <<<HTML
    <html code>
    HTML;
    ?>
    Соотв можно использовать переменные полученные в пхп в данном коде
    <?php
    $myvar0="text";
    $myvar = <<<HTML
    <html code> $myvar0
    HTML;
    ?>
    Благодаря этому не прийдётся разрывать код , не будет каши и работа определённо ускорится , да и читать это попросту легче и даже можно всовывать весь код в переменную и выводить в конце обработки
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я люблю кавычки...
     
  21. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    а да , eval ? не , не слышал