edit.php
<?php
include '../blocks/db.php';
if (isset($_GET['id'])) {$id=$_GET['id'];}
?>
<!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 rel="stylesheet" type="text/css" href="../style.css" />
<script language="javascript" type="text/javascript"
src="../tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
mode : "textareas",
theme : "advanced",
extended_valid_elements : "img[class=myclass|!src|border:0|alt|title|width|height]",
invalid_elements : "strong,b,em,i"
});
</script>
</script>
</head>
<body>
<div id="holder">
<?php include '../blocks/header.php'; ?>
<div id="undermenu"></div>
<div id="content">
<!-- Начало документа -->
<p class="text">
<?php
$result=mysql_query ("SELECT title,meta_d,meta_k,text,id FROM data WHERE id=".(int)$id );
$myrow=mysql_fetch_assoc ($result);
?>
<form name="form1" method="post" action="update.php">
<p>
<label>Введите название<br>
<input value="<?php
echo htmlspecialchars($myrow['title']) ?>" type="text" name="title" id="title">
</label>
</p>
<p>
<label>Введите краткое описание<br>
<input value="<?php
echo htmlspecialchars($myrow['meta_d']) ?>" type="text" name="meta_d" id="meta_d">
</label>
</p>
<p>
<label>Введите ключевые слова <br>
<input value="<?php
echo htmlspecialchars($myrow['meta_k']) ?>" type="text" name="meta_k" id="meta_k">
</label>
</p>
<p>
<label>Введите полный текст
<textarea name="text" id="text" cols="40" rows="20"><?php
echo htmlspecialchars($myrow['text']) ?></textarea>
</label>
</p>
<input name="id" type="hidden" value="<?php echo (int)$myrow['id'] ?>">
<p>
<label>
<input type="submit" name="submit" id="submit" value="Сохранить изменения">
</label>
</p>
</form>
</p>
<!-- Конец документа -->
</div>
</div>
</body>
</html>
update.php
<?php
include'../blocks/db.php';
if (!empty($_POST['title'])) $title = $_POST['title'];
if (!empty($_POST['meta_d'])) $meta_d = $_POST['meta_d'];
if (!empty($_POST['meta_k'])) $meta_k = $_POST['meta_k'];
if (!empty($_POST['text'])) $text = $_POST['text'];
if (!empty($_POST['id'])) $id = $_POST['id'];
?>
<!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 rel="stylesheet" type="text/css" href="../style.css" />
</head>
<body>
<div id="holder">
<?php include'../blocks/header.php'; ?>
<div id="menu"><?php
$sql = "SELECT id,title FROM `data`";
$result2 = mysql_query($sql) or die(mysql_error() .'<br/>'. $sql);
while ($row = mysql_fetch_assoc($result2))
{
print '<a href="edit.php?id='. (int)$row["id"] .'">'
. htmlspecialchars($row["title"]) .'</a>';
}
?><a href='../news/admin.php'>Редактировать новости</a></div>
<div id="undermenu"></div>
<div id="content">
<!-- Начало документа -->
<p class="text">
<?php
if (isset($title, $meta_d, $meta_k, $text, $id))
{
/*Проверка на заполнение форм и вывод разрешения на ввод информации в базу*/
$result = mysql_query ("UPDATE data
(`title`, `meta_d`, `meta_k`, `text`)
VALUES
('". mysql_real_escape_string($title) ."',
'". mysql_real_escape_string($meta_d) ."',
'". mysql_real_escape_string($meta_k) ."',
'". mysql_real_escape_string($text) ."'
) WHERE id=".(int)$id
);
if (mysql_affected_rows() > 0)
echo "<p>Изменения вступили в силу!</p>";
else
echo "<p>Изменения не вступили в силу!</p>";
}
else
{
echo "<p>Вы ввели не всю информацию, поэтому изменения не вступили в силу</p>";
}
?>
<p><a href='../index.php'>Вернутся на главную</a></p>
</p>
<!-- Конец документа -->
</div>
</div>
</body>
</html>
Ишибка такова - Изменения не вступили в силу!
Спустя 4 минуты, 58 секунд (8.09.2010 - 22:54) twin написал(а):
$result = mysql_query ("UPDATE dataтак что скажет?
(`title`, `meta_d`, `meta_k`, `text`)
VALUES
('". mysql_real_escape_string($title) ."',
'". mysql_real_escape_string($meta_d) ."',
'". mysql_real_escape_string($meta_k) ."',
'". mysql_real_escape_string($text) ."'
) WHERE id=".(int)$id
) or die(mysql_error());
Спустя 11 минут, 2 секунды (8.09.2010 - 23:05) Thief8925 написал(а):
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(`title`, `meta_d`, `meta_k`, `text`) VALUES ' at line 2
Спустя 45 минут, 14 секунд (8.09.2010 - 23:51) twin написал(а):
Ох ох ох... Поповщину из головы трудно выбить.
Ну а почитать мануал, разобраться, почему такая ошибка?
Или справочники придумали для лохов?
На вот, не мучайся.
Ну а почитать мануал, разобраться, почему такая ошибка?
Или справочники придумали для лохов?
На вот, не мучайся.
$result = mysql_query ("UPDATE `data` SET
`title` = '". mysql_real_escape_string($title) ."',
`meta_d` = '". mysql_real_escape_string($meta_d) ."',
`meta_k` = '". mysql_real_escape_string($meta_k) ."',
`text` = '". mysql_real_escape_string($text) ."'
WHERE id=".(int)$id
);
Спустя 1 час, 43 минуты, 36 секунд (9.09.2010 - 01:34) Thief8925 написал(а):
Смешно но у попова было почти так же кроме защиты от иньекции
Спасибо за помощь!
ааа гон оно и так не работает та же ошибка - Изменения не вступили в силу!
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') WHERE id=1' at line 5
оооо гон я сам нашол в чем ошибка - лишняя скобка ) после `text` = '". mysql_real_escape_string($text) ."'
$result = mysql_query ("UPDATE categories SET title='$title', meta_d='$meta_d', meta_k='$meta_k',text='$text', sort='$sort' WHERE id='$id' ");
Спасибо за помощь!
ааа гон оно и так не работает та же ошибка - Изменения не вступили в силу!
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') WHERE id=1' at line 5
оооо гон я сам нашол в чем ошибка - лишняя скобка ) после `text` = '". mysql_real_escape_string($text) ."'

Спустя 1 минута, 28 секунд (9.09.2010 - 01:36) Thief8925 написал(а):
ааа гон оно и так не работает та же ошибка - Изменения не вступили в силу!
Спустя 1 минута, 45 секунд (9.09.2010 - 01:37) Thief8925 написал(а):
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') WHERE id=1' at line 5
Спустя 1 час, 3 минуты, 5 секунд (9.09.2010 - 02:40) inpost написал(а):
Thief8925
Скинь эту строчку сюда, 5-ую как пишет скрипт, сейчас подправим! Остальное не надо.
Скинь эту строчку сюда, 5-ую как пишет скрипт, сейчас подправим! Остальное не надо.
Спустя 5 минут, 59 секунд (9.09.2010 - 02:46) inpost написал(а):
Собственно, а чем if ($result == "true") не подходит? Чем он плох? За 9 месяцев меня ни разу не подвёл. Зачем вообще так писать: "mysql_affected_rows" ???
Спустя 53 минуты, 33 секунды (9.09.2010 - 03:40) inpost написал(а):
Ну что ж, давай сразу пробежимся по скрипту полностью:
Зачем тебе эта строчка? В данной ситуации человек может и не захотеть сразу заполнять какое-то поле, а потом к нему вернуться! А ты ограничиваешь его через "empty". Так же, зачем она вообще тебе? С этими данными ты никаких операций не делаешь, то нет смысл назначать лишнюю переменную, лишний код, лишняя нагрузка, меньшая производительность. Делай непосредственно обращение к $_POST['title']. Вот пример, где к нему рационально так обращаться на твоём скрипте:
Убрали, так же заметно ещё одно замечание: название строк, таблиц выделяй так:
Смотри на эту строчку, всё прям понятно, где SELECT, где FROM, где WHERE, а не писать все вряд!
Идём дальше...
Попов не знает обычного ХТМЛ, ну а ты же должен знать. <input type="text" name="title" id="title">. Вот скажи, какую тут роль играет `name` а какую `id`, так же <form name="form1"> - какую роль играет name у формы?. 3 вопроса, два из ответов: "никакую", то зачем вообще прописывать? Можешь сразу убрать, чтоб не путался!
Страница edit.php. Зря ты из неё убрал проверку: if (isset($_GET['id'])) {} else {} - так как она отображала на экране то, что надо. По крайней мере для самой формы это надо было бы ввести.
В строчке с кодировкой пропущены кавычки:
Так же надо использовать именно UTF-8, а не win1251. Хотя обе кодировки имеют проблемы, но у ЮТФ-8 их в 10 раз меньше! Да к тому же ты явно захочешь в ближайшее будущее узнать, что такое Аякс, а для него и нужна кодировка ЮТФ-8. Вопрос о кодировке спорный, вроде Fatcat недавно говорил, что прекрасно работает с Вин1251 и использует какой-то Аяксозаменитель, исполняющий точно такие же функции как и Аякс. Ajax - работа без обновления страницы. Но я бы всё-таки посоветовал на данном этапе сменить кодировку на ЮТФ-8.
if (!empty($_POST['title'])) $title = $_POST['title'];
Зачем тебе эта строчка? В данной ситуации человек может и не захотеть сразу заполнять какое-то поле, а потом к нему вернуться! А ты ограничиваешь его через "empty". Так же, зачем она вообще тебе? С этими данными ты никаких операций не делаешь, то нет смысл назначать лишнюю переменную, лишний код, лишняя нагрузка, меньшая производительность. Делай непосредственно обращение к $_POST['title']. Вот пример, где к нему рационально так обращаться на твоём скрипте:
$result=mysql_query ("SELECT title,meta_d,meta_k,text,id FROM data WHERE id=".(int)$_GET['id']);
Убрали, так же заметно ещё одно замечание: название строк, таблиц выделяй так:
$result=mysql_query ("
SELECT `title`,`meta_d`,`meta_k`,`text`,`id`
FROM `data`
WHERE `id`='".(int)$_GET['id']."'
");
Смотри на эту строчку, всё прям понятно, где SELECT, где FROM, где WHERE, а не писать все вряд!
Идём дальше...
Попов не знает обычного ХТМЛ, ну а ты же должен знать. <input type="text" name="title" id="title">. Вот скажи, какую тут роль играет `name` а какую `id`, так же <form name="form1"> - какую роль играет name у формы?. 3 вопроса, два из ответов: "никакую", то зачем вообще прописывать? Можешь сразу убрать, чтоб не путался!
Страница edit.php. Зря ты из неё убрал проверку: if (isset($_GET['id'])) {} else {} - так как она отображала на экране то, что надо. По крайней мере для самой формы это надо было бы ввести.
В строчке с кодировкой пропущены кавычки:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
Так же надо использовать именно UTF-8, а не win1251. Хотя обе кодировки имеют проблемы, но у ЮТФ-8 их в 10 раз меньше! Да к тому же ты явно захочешь в ближайшее будущее узнать, что такое Аякс, а для него и нужна кодировка ЮТФ-8. Вопрос о кодировке спорный, вроде Fatcat недавно говорил, что прекрасно работает с Вин1251 и использует какой-то Аяксозаменитель, исполняющий точно такие же функции как и Аякс. Ajax - работа без обновления страницы. Но я бы всё-таки посоветовал на данном этапе сменить кодировку на ЮТФ-8.
Спустя 1 час, 46 минут, 21 секунда (9.09.2010 - 05:26) twin написал(а):
inpost
А вообще я описал на сайте почему. И еще один момент. Если не менять данные и сохранить, никаких изменений не будет. А скрипт радостно ответит:
Изменения вступили в силу!
Какие изменения? Если ничего не поменялось... mysql_affected_rows в этом случае ведет себя чесно.
if ($result == "true")как минимум, на кой тут true в кавычках?
А вообще я описал на сайте почему. И еще один момент. Если не менять данные и сохранить, никаких изменений не будет. А скрипт радостно ответит:
Изменения вступили в силу!
Какие изменения? Если ничего не поменялось... mysql_affected_rows в этом случае ведет себя чесно.
Спустя 3 часа, 4 минуты, 14 секунд (9.09.2010 - 08:31) Thief8925 написал(а):
я в своем посте редактированием подобавлял все что я поменял уже все работает последние два поста копировали предыдущий!
напрямую работу с $_GET насколько я знаю не все сервера поддерживает и его надо переводить в обычную переменную.
Title у меня проверяется на пустоту чтоб человек когда редактировал не удалил его тем самым образовав статью без названия
а где там пропущенные кавычки? у меня все на месте вродиб
напрямую работу с $_GET насколько я знаю не все сервера поддерживает и его надо переводить в обычную переменную.
Title у меня проверяется на пустоту чтоб человек когда редактировал не удалил его тем самым образовав статью без названия
а где там пропущенные кавычки? у меня все на месте вродиб
Спустя 6 часов, 7 минут, 2 секунды (9.09.2010 - 14:38) inpost написал(а):
Thief8925
Это глупости, что напрямую не работают. Так Попов говорил, и он был не прав. Мы не в 90-ые года живём, чтоб такие глупости были на серверах.
Ты проверяешь не только тайтл, а и кейворды. Я никогда сразу их не делаю, а потом уже добавляю по надобности или по содержанию.
Ошибся, с ковычками все нормально, но кодировку советую поменять!
Я написал тебе как исправить скрипт, хочешь, чтоб он был лучше - сделай всё перечисленное и выстави тут в новой редакции.
twin
4 часа ночи было, вот и лишние кавычки поставил =)
Это глупости, что напрямую не работают. Так Попов говорил, и он был не прав. Мы не в 90-ые года живём, чтоб такие глупости были на серверах.
Ты проверяешь не только тайтл, а и кейворды. Я никогда сразу их не делаю, а потом уже добавляю по надобности или по содержанию.
Ошибся, с ковычками все нормально, но кодировку советую поменять!
Я написал тебе как исправить скрипт, хочешь, чтоб он был лучше - сделай всё перечисленное и выстави тут в новой редакции.
twin
4 часа ночи было, вот и лишние кавычки поставил =)
if (isset($_POST['title'], $_POST['meta_d'], $_POST['meta_k'], $_POST['tex']t, $_POST['id']) && !empty($_POST['title']))
{
mysql_query();
}
else
{
exit("Титулка пустая, или одно из значений к скрипту не пришло.");
}