Ошибка в оптимизации страницы

Тема в разделе "PHP", создана пользователем barabula, 17 авг 2011.

Модераторы: latteo
  1. barabula

    barabula Нарушитель

    Регистр.:
    21 май 2009
    Сообщения:
    470
    Симпатии:
    77
    Доброе время суток, помогите новичку, если не трудно. Вообщем есть сайт по добавлению статей, я решил его модернизировать.
    Вот начальная страница, с которой всё работает отлично.
    PHP:
    <?php 
    include("blocks/bd.php");
    include(
    "lock.php");

    if (isset(
    $_POST['title']))       {$title $_POST['title'];             if ($title=='')  {unset ($title);}}
    if (isset(
    $_POST['meta_d']))      {$meta_d =$_POST['meta_d'];             if ($meta_d=='') {unset($meta_d);}}
    if (isset(
    $_POST['meta_k']))      {$meta_k $_POST['meta_k'];           if ($meta_k=='') {unset($meta_k);}}
    if (isset(
    $_POST['date']))        {$date =$_POST['date'];                if ($date=='')   {unset($date);}}
    if (isset(
    $_POST['description'])) {$description $_POST['description']; if ($description=='') {unset($description);}}  
    if (isset(
    $_POST['text']))        {$text=$_POST['text'];                 if ($text=='') {unset($text);}}
    if (isset(
    $_POST['author']))      {$author $_POST['author'];           if ($author=='')   {unset($author);}}
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Обработчик</title>
    <link href="style.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <table width="690" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border">
      <?php include("blocks/header.php");?>
      <tr>
        <td><table width="690" border="0" cellspacing="0"  cellpadding="0">
          <tr>
            <?php include("blocks/lefttd.php");?>
            <td valign="top">
            <?php         
            
    if (isset($title) && isset($meta_d) && isset($meta_k) && isset($date) && isset($description) && isset($text) && isset($author))
    {
    $result mysql_query("
    INSERT INTO `articles` (
    `title` ,
    `meta_d` ,
    `meta_k` ,
    `date` ,
    `descriptions` ,
    `text` ,
    `author` )
    VALUES (
    '
    $title', '$meta_d', '$meta_k', '$date', '$description', '$text', '$author'
    )"
    );         
    if (
    $result == 'true')
    {
    echo 
    "Информация занесена в базу";
    }
    else 
    {
    echo
    "результ не есть истина";
    }
    }
    else
    {
    echo 
    "Не все поля заполнены ('$title','$meta_d','$meta_k','$date','$description','$text','$author'";
    }
            
            
    ?>
            
            
             </td>
          </tr>
        </table></td>
      
      <?php include("blocks/footer.php");?>
    </table>
    </body>
    </html>
    А вот переписанный код, Дримвивер синтаксических ошибок не выдал, во время обработки, ошибки с указанием на строки и т.п. тоже не выскакивают. Просто пишет: Ваша статья не добавлена!
    PHP:
    <?php
    include ('./lock.php');
    include (
    './blocks/bd.php');

        if (isset(
    $_POST['title']) && $_POST['title'] != '')       
        {
            
    $title $_POST['title']; 
        }

        if (isset(
    $_POST['description']) && $_POST['description'] != ''$description $_POST['description']; 
        if (isset(
    $_POST['meta_d']) && $_POST['meta_d'] != ''$meta_d $_POST['meta_d']; 
        if (isset(
    $_POST['meta_k']) && $_POST['meta_k'] != ''$meta_k $_POST['meta_k']; 
        if (isset(
    $_POST['author']) && $_POST['author'] != ''$author $_POST['author'];  
        if (isset(
    $_POST['date'])   && $_POST['date']   != ''$date   $_POST['date']; 
        if (isset(
    $_POST['text'])   && $_POST['text']   != ''$text   $_POST['text'];


    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Обработчик</title>
    <link href="style.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <table width="690" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border">
    <!--Подключаем шапку сайта-->
    <?php include './blocks/header.php';   ?> 
      <tr>
        <td><table width="690" border="0" cellspacing="0" cellpadding="0">
          <tr>
    <!--Подключаем левый блок сайта-->
    <?php include './blocks/lefttd.php';  ?>      
            <td valign="top">
          
    <?php 
        
    if (isset($title$meta_d$meta_k$date$description$text$author))
        {
    /* Здесь пишем что можно заносить информацию в базу */
            
    $result mysql_query ("INSERT INTO articles 
                                   (`title`, `meta_d`, `meta_k`, `date`, `description`, `text`, `author`)
                                    VALUES 
                                   ('"
    mysql_real_escape_string($title) ."',
                                    '"
    mysql_real_escape_string($meta_d) ."',
                                    '"
    mysql_real_escape_string($meta_k) ."',
                                    '"
    mysql_real_escape_string($date) ."',
                                    '"
    mysql_real_escape_string($description) ."',
                                    '"
    mysql_real_escape_string($text) ."',
                                    '"
    mysql_real_escape_string($author) ."'
                                    )"
                                  
    );
             if (
    mysql_affected_rows() > 0)
                 echo 
    "<p>Ваша статья успешно добалена!</p>";
            else 
                echo 
    "<p>Ваша статья  не добалена!</p>";


        }         
        else 
        {
            echo 
    "<p>Вы ввели не всю информацию, поэтому статья не может быть добавлена в базу.</p>";
        }
         
    ?>
         </td>
          </tr>
        </table></td>
      </tr>
    <!--Подключаем нижний графический элемент-->  
    <?php  include './blocks/footer.php'?>  
    </table>
    </body>
    </html> 
    Так же возникла проблема с выводом текста из БД.
    В саму БД текст идёт через админку( файлы приведён выше). Так вот я поставил для проверки защиту на доп. символы, чтобы защитить БД.
    Таким образом у меня получилось что-то вроде вот такого:
    PHP:
    <?php echo htmlspecialchars($myrow['text']); ?>
    И теперь у меня текст в том месте, где я поставил htmlspecialchars выводит вот так: <p>Текст</p>
    Как сделать так, чтобы не выводило <p></p>
     
  2. for-us

    for-us Создатель

    Регистр.:
    25 авг 2010
    Сообщения:
    21
    Симпатии:
    5
    Вы, видимо, в $_POST['text'] добавляете эти теги.. Попробуйте удалить их, и заменить
    Код:
    <?php echo htmlspecialchars($myrow['text']); ?>
    на
    Код:
    <?php echo "<p>".htmlspecialchars($myrow['text'])."</p>"; ?>
     
  3. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    а если у него теги будут в самом тексте что вы прикажете ему делать? какой смысл применять htmlspecialchars при выводе данных из базы? проверку надо производить при добавлении данных в базу. По поводу ошибки смотри в сторону ошибки при запросе insert.
     
  4. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    выведи на экран sql запрос и попробуй его выполнить вручную, ошибка в нем
     
  5. for-us

    for-us Создатель

    Регистр.:
    25 авг 2010
    Сообщения:
    21
    Симпатии:
    5
    так в первом посте упоминается лишь тег <p>, поэтому и предложил такой вариант
     
  6. barabula

    barabula Нарушитель

    Регистр.:
    21 май 2009
    Сообщения:
    470
    Симпатии:
    77
    for-us
    На самом деле в тексте полно тегов <p></p> , я просто для примера указал всего 1 строку.
    Я прочитал, что данного рода вывод инфы является уязвимостью для сайта XSS, знающие люди могут грамотно составить запрос, и нанести ущерб сайту.
     
  7. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    нельзя выводить html через htmlspecialchars она просто имеет обратную функцию преобразования htmlspecialchars
    PHP:
    <?php
    $new 
    htmlspecialchars("<a href='test'>Test</a>"ENT_QUOTES);
    echo 
    $new// &lt;a href='test'&gt;Test&lt;/a&gt;
    ?>
     
  8. for-us

    for-us Создатель

    Регистр.:
    25 авг 2010
    Сообщения:
    21
    Симпатии:
    5
    при добавлении в бд у вас есть проверка..хоть какая-то, так сказать)
    PHP:
                                   ('". mysql_real_escape_string($title) ."',
                                    
    '". mysql_real_escape_string($meta_d) ."',
                                    
    '". mysql_real_escape_string($meta_k) ."',
                                    
    '". mysql_real_escape_string($date) ."',
                                    
    '". mysql_real_escape_string($description) ."',
                                    
    '". mysql_real_escape_string($text) ."',
                                    
    '". mysql_real_escape_string($author) ."'
                                    
    )
    значит оставьте просто
    PHP:
    <?php echo $myrow['text']; ?> 
     
  9. barabula

    barabula Нарушитель

    Регистр.:
    21 май 2009
    Сообщения:
    470
    Симпатии:
    77
     
  10. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    for-us имел ввиду проверку mysql_real_escape_string и предложил вам выводить данные из базы
    как в основном все и делают :) а то что указали вы
    это проверка были изменения в таблице после выполнения запроса или нет