[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: TWIN Видеокурсы шаг5
Thief8925
Есть два файла Edit.php update.php после заполнения форм первого они передаются в второй для обработки и занесения в базу данных но етого не происходит и выдается ошибка.

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 написал(а):
Смешно но у попова было почти так же кроме защиты от иньекции

$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) ."' biggrin.gif


Спустя 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 минут, 59 секунд (9.09.2010 - 02:46) inpost написал(а):
Собственно, а чем if ($result == "true") не подходит? Чем он плох? За 9 месяцев меня ни разу не подвёл. Зачем вообще так писать: "mysql_affected_rows" ???

Спустя 53 минуты, 33 секунды (9.09.2010 - 03:40) inpost написал(а):
Ну что ж, давай сразу пробежимся по скрипту полностью:
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
if ($result == "true") 
как минимум, на кой тут true в кавычках?
А вообще я описал на сайте почему. И еще один момент. Если не менять данные и сохранить, никаких изменений не будет. А скрипт радостно ответит:
Изменения вступили в силу!
Какие изменения? Если ничего не поменялось... mysql_affected_rows в этом случае ведет себя чесно.

Спустя 3 часа, 4 минуты, 14 секунд (9.09.2010 - 08:31) Thief8925 написал(а):
я в своем посте редактированием подобавлял все что я поменял уже все работает последние два поста копировали предыдущий!

напрямую работу с $_GET насколько я знаю не все сервера поддерживает и его надо переводить в обычную переменную.

Title у меня проверяется на пустоту чтоб человек когда редактировал не удалил его тем самым образовав статью без названия

а где там пропущенные кавычки? у меня все на месте вродиб


Спустя 6 часов, 7 минут, 2 секунды (9.09.2010 - 14:38) inpost написал(а):
Thief8925
Это глупости, что напрямую не работают. Так Попов говорил, и он был не прав. Мы не в 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("Титулка пустая, или одно из значений к скрипту не пришло.");
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.