- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Совсем непонятная проблема возникла у меня давно при создании сайта, не могу решить её уже три недели, с такими проблемами не сталкивался ло этого. Сейчас объясню саму проблему:
есть скрипт, данные на него отправляются через форму. Данные отправляются! Проверяю через команду echo.
Затем формируется mysql запрос:
$text = "UPDATE items SET header='$_POST['header']', text='$_POST['text']', sait='$_POST['sait']', moderated='0' WHERE id='$_POST['id']';";
Выполняется:
$result = mysql_query($text) or die("Query failed: " . mysql_error());
Ошибок mysql нет, но в таблице в строке с id = $_POST['id'], старые данные стёрты, а на их месте пустые значения.
Формируемую строку запроса проверял через "echo $text". Выводит правильную запись, наподобие
UPDATE items SET header='Заголовок в форме', text='Текст в форме', sait='сайт в форме', moderated='0' WHERE id='2';
Но в mysql в строке с id=2 всё становится пустым.
Самый прикол:
когда вставляю вместо
$text = "UPDATE items SET header='$_POST['header']', text='$_POST['text']', sait='$_POST['sait']', moderated='0' WHERE id='$_POST['id']';";
такой запрос
$text = "UPDATE items SET header='Такой заголовок', text='$_POST['text']', sait='$_POST['sait']', moderated='0' WHERE id='$_POST['id']';";
и затем выполняю его - в таблице с указанным id поле header имеет значение 'Такой заголовок', а все остальные поля пусты, хотя при выводе переменной $text всё такой же правильный запрос:
UPDATE items SET header='Такой заголовок', text='Текст в форме', sait='сайт в форме', moderated='0' WHERE id='2';
Подскажите пожалуйста в чём может быть проблема???
Кстати этот код обновления записи обрамлён так:
ob_start();
тут формирование запроса и его выполнение, а также формирование ответа html
$result = ob_get_contents();
ob_end_clean();
return $result;
$text = "UPDATE items SET header='$_POST['header']', text='$_POST['text']', sait='$_POST['sait']', moderated='0' WHERE id='$_POST['id']';";
попроюуйте так (бОльшее внимание уделяйте ковычкам):
$text = "UPDATE `items` SET `header`='$_POST[header]', `text`='$_POST[text]', `sait`='$_POST[sait]', `moderated`='0' WHERE `id`='$_POST[id]' ";
сами ячейки обрамляйте апострофами, а переменные одинарными ковычками. Если Вы пытаетесь выполнить sait='$_POST['sait']', то ячейке sait задается значение '$_POST['
попроюуйте так (бОльшее внимание уделяйте ковычкам):
$text = "UPDATE `items` SET `header`='$_POST[header]', `text`='$_POST[text]', `sait`='$_POST[sait]', `moderated`='0' WHERE `id`='$_POST[id]' ";
сами ячейки обрамляйте апострофами, а переменные одинарными ковычками. Если Вы пытаетесь выполнить sait='$_POST['sait']', то ячейке sait задается значение '$_POST['
Обрамил я в кавычки ` - в итоге результат один и тот же.
Насчёт '$_POST[' - в переменную $text заносится значение в двойных кавычках "" поэтому такого не происходит, формируется правильная строка запроса с данными, отправленными через форму.
Кстати, ещё один может быть не маловажный момент. После отправки данных потом при нажатии кнопки обновить в браузере формируется всё тот же sql запрос, но на этот раз данные заносятся в таблицу. Почему же не заносятся с первого раза из переменных?
$text = "UPDATE items SET header='".$_POST['header']."', text='".$_POST['text']."', sait='".$_POST['sait']."', moderated='0' WHERE id='".$_POST['id']."';";
Спасибо за ответы, но вы ищете ошибку не там.
mysql запрос который присваивается переменной $text, формируется правильно. Я это проверяю через "echo $text", запрос правильный и никаких ошибок не возникает. здесь дело в чём то другом.
ещё раз акцентирую внимание. при нажатии кнопки обновить в браузере формируется тот же запрос, но данные в БД сохраняются! Ещё напомню, что включена буферизация
Насчёт '$_POST[' - в переменную $text заносится значение в двойных кавычках "" поэтому такого не происходит, формируется правильная строка запроса с данными, отправленными через форму.
как же она правильная если Вы пишете text='$_POST['text']' =)
morgannn добавил 24.07.2011 в 12:28
Спасибо за ответы, но вы ищете ошибку не там.
mysql запрос который присваивается переменной $text, формируется правильно. Я это проверяю через "echo $text", запрос правильный и никаких ошибок не возникает. здесь дело в чём то другом.
ещё раз акцентирую внимание. при нажатии кнопки обновить в браузере формируется тот же запрос, но данные в БД сохраняются! Ещё напомню, что включена буферизация
ну тогда сделайте так:
$text=$_POST[text];
...."UPDATE items SET text='$text'"...
и не заморачивайтесь!
Я такого не писал =)
$text=$_POST[text];
...."UPDATE items SET text='$text'"...
и не заморачивайтесь!
тоже делал - разницы никакой!
тем более что при обновлении страницы мой код уже работает. я думаю тут дело в чём-то другом
тем более что при обновлении страницы мой код уже работает. я думаю тут дело в чём-то другом
Вы бы весь код сюда выложили и не парили людям мозги. Гадание на кофейной гуще здесь вряд ли поможет.
!!!111
Почему никто до сих пор не сказал об опасносте вставки неэкранированного $_POST в mysql запрос ??
$text = "UPDATE items SET header='".mysql_real_escape_string($_POST['header'])."', text='".mysql_real_escape_string($_POST['text'])."', sait='".mysql_real_escape_string($_POST['sait'])."', moderated='0' WHERE id='".(int)$_POST['id']."';";
собственно код
файл index.php
<?
include('functions.php');
if ($_GET['write'])
$result = writerecord();
?>
<html>
<head>
...
</head>
<body>
<?=$result ?>
<form action="<? echo $_SERVER['PHP_SELF'];?>?write=1&id=2" method="post">
Заголовок:<input type="text" name="header" value="" size="80">
Текст:<textarea cols=50 rows=15 name="text"></textarea>
Сайт:<input type="text" name="sait" size="30" value="">
<input type="submit" name="change" value="Сохранить"></form>
</body>
</html>
файл functions.php
<?
function writerecord()
{
ob_start();
$header = $_POST['header'];
$txt = mysql_escape_string($_POST["text"]);
$sait = mysql_escape_string($_POST['sait']);
$id = intval($_POST['id']);
$text = "UPATE `saits` SET `header`='$header', `text`='$txt', `sait`='$sait' WHERE `id`='$id';";
$r = mysql_query($text) or die("Query failed: " . mysql_error());
$result = ob_get_contents();
ob_end_clean();
return $result;
}
?>
Файл index.php
Файл functions.php