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

barabula

Гуру форума
Регистрация
21 Май 2009
Сообщения
474
Реакции
80
Доброе время суток, помогите новичку, если не трудно. Вообщем есть сайт по добавлению статей, я решил его модернизировать.
Вот начальная страница, с которой всё работает отлично.
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>
 
Вы, видимо, в $_POST['text'] добавляете эти теги.. Попробуйте удалить их, и заменить
Код:
<?php echo htmlspecialchars($myrow['text']); ?>
на
Код:
<?php echo "<p>".htmlspecialchars($myrow['text'])."</p>"; ?>
 
Вы, видимо, в $_POST['text'] добавляете эти теги.. Попробуйте удалить их, и заменить
Код:
<?php echo htmlspecialchars($myrow['text']); ?>
на
Код:
<?php echo "<p>".htmlspecialchars($myrow['text'])."</p>"; ?>
а если у него теги будут в самом тексте что вы прикажете ему делать? какой смысл применять htmlspecialchars при выводе данных из базы? проверку надо производить при добавлении данных в базу. По поводу ошибки смотри в сторону ошибки при запросе insert.
 
выведи на экран sql запрос и попробуй его выполнить вручную, ошибка в нем
 
а если у него теги будут в самом тексте что вы прикажете ему делать? какой смысл применять htmlspecialchars при выводе данных из базы? проверку надо производить при добавлении данных в базу. По поводу ошибки смотри в сторону ошибки при запросе insert.
так в первом посте упоминается лишь тег <p>, поэтому и предложил такой вариант
 
for-us
На самом деле в тексте полно тегов <p></p> , я просто для примера указал всего 1 строку.
какой смысл применять htmlspecialchars при выводе данных из базы?
Я прочитал, что данного рода вывод инфы является уязвимостью для сайта XSS, знающие люди могут грамотно составить запрос, и нанести ущерб сайту.
 
for-us
На самом деле в тексте полно тегов <p></p> , я просто для примера указал всего 1 строку.
Я прочитал, что данного рода вывод инфы является уязвимостью для сайта XSS, знающие люди могут грамотно составить запрос, и нанести ущерб сайту.
нельзя выводить html через htmlspecialchars она просто имеет обратную функцию преобразования
PHP:
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href='test'&gt;Test&lt;/a&gt;
?>
 
при добавлении в бд у вас есть проверка..хоть какая-то, так сказать)
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']; ?>
 
при добавлении в бд у вас есть проверка..хоть какая-то, так сказать)
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) ."'
                                )" 
[/QUOTE]
Ну да, вот она:
[PHP]if (mysql_affected_rows() > 0) 
             echo "<p>Ваша статья успешно добалена!</p>"; 
        else  
            echo "<p>Ваша статья  не добалена!</p>";
 
for-us имел ввиду проверку mysql_real_escape_string и предложил вам выводить данные из базы
значит оставьте просто
PHP код:
<?php echo $myrow['text']; ?>
как в основном все и делают :) а то что указали вы
Ну да, вот она:
PHP код:
if (mysql_affected_rows() > 0)
echo "<p>Ваша статья успешно добалена!</p>";
else
echo "<p>Ваша статья не добалена!</p>";
это проверка были изменения в таблице после выполнения запроса или нет
 
Назад
Сверху