|
|
|
| Подскажите плз, не могу сам понять в чем трабл.
Есть таблица:
CREATE TABLE 'news' (
'id_news' int(11) NOT NULL auto_increment,
'data' date NOT NULL default '0000-00-00',
'smalltext' text NOT NULL,
'medtext' text NOT NULL,
'bigtext' text NOT NULL,
'keywords' text NOT NULL,
PRIMARY KEY ('id_news')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=181 ;
|
добавляю:
'hide' enum('show','hide') NOT NULL default 'show',
|
Прописываю все в скрипте, а он не пашет.
Прописываю... эт наверно я погорячился, из готового скрипта вытаскиваю кусок отвечающий за чекбокс и изменяю немного под себя.
Как только удаляю все куски скрипта и поле чекбокса из таблицы все снова пашет. =( | |
|
|
|
|
|
|
|
для: DarkZoom
(12.05.2006 в 10:43)
| | Так может дело в скрипте, а не в таблице?
В приведенной структуре есть одно неприятное место.
Имя поля (hide) совпадает с одним из имен enum-значений. | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2006 в 10:48)
| | а почему тогда это (с чего сдернуто было) работает.
CREATE TABLE 'catalog' (
'id_catalog' int(8) NOT NULL auto_increment,
'name' text NOT NULL,
'description' text NOT NULL,
'pos' int(3) NOT NULL default '0',
'hide' enum('show','hide') NOT NULL default 'show',
'id_parent' int(8) NOT NULL default '0',
PRIMARY KEY ('id_catalog'),
KEY 'id_parent' ('id_parent')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;
|
| |
|
|
|
|
|
|
|
для: DarkZoom
(12.05.2006 в 10:50)
| | Так а я не утверждал, что именно hide является причиной неработоспособности скрипта.
Может быть всё же ошибка в самом скрипте? | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2006 в 11:06)
| | Ну вот скрипт:
Форма забивки текста:
<?php
error_reporting(0);
//--->
require_once("../config.php");
if(!isset($button)) $button = "Сохранить";
if(!isset($action)) $action = "addnews.php";
//if(!isset($tmpz)) $tmpz = "checked";
//--->
if(!$id_news)
{
$query = "SELECT * FROM news
WHERE id_news=".$_GET['id_news'];
}
?>
<form action=<?php echo $action; ?> method=post>
<table border=0 align="center" width=100% border=1 cellpadding=1 cellspacing=0>
<tr>
<td><b>Дата (формат 2005-08-22):</b><br><input type=text name=data value='<?php echo date("Y-m-d"); ?>'><p></p></td>
</tr>
<tr>
<td width="100%"><b>Заголовок:</b><br><input type=text style=width:100% name=smalltext value='<?php echo $smalltext; ?>'><p></p></td>
</tr>
<tr>
<td width="100%"><b>Краткий текст:</b><br><textarea name=medtext rows=7 style="width:100%" onkeydown="AddTags();"><?php echo $medtext; ?></textarea><p></p></td>
</tr>
<tr>
<td width="100%"><b>Полный текст:</b><br><textarea name=bigtext rows=20 style="width:100%" onkeydown="AddTags();"><?php echo $bigtext; ?></textarea><p></p></td>
</tr>
<tr>
<td width="100%"><b>Ключевые слова, не вводить слова которые не встречаются в тексте, толку не будет.:</b><br><textarea name=keywords rows=10 style="width:100%"><?php echo $keywords; ?></textarea><p></p></td>
</tr>
<p></p><p><b>Показывать на сайте:</b> <input type=checkbox name=hide></p>
<tr>
<td align="left"><p><input type=submit value=<?php echo $button; ?>> <input type="button" name="CANCEL" value="Назад" onClick="window.location.href='index.php'"></p></td>
</tr>
<input type=hidden name=id_news value=<?php echo $_GET['id_news']; ?>>
</table>
</form>
|
скрипт сохранения текста:
<?php
error_reporting(0);
//--->
require_once("../config.php");
//--->
if($_POST['hide'] == "on") $showhide = "show";
else $showhide = "hide";
//--->
$_POST['data'] = str_replace("'","'",$_POST['data']);
$_POST['smalltext'] = str_replace("'","'",$_POST['smalltext']);
$_POST['medtext'] = str_replace("'","'",$_POST['medtext']);
$_POST['bigtext'] = str_replace("'","'",$_POST['bigtext']);
$_POST['keywords'] = str_replace("'","'",$_POST['keywords']);
//--->
$query = "INSERT INTO news VALUES (NULL,
'".$_POST['data']."',
'".$_POST['smalltext']."',
'".$_POST['medtext']."',
'".$_POST['bigtext']."',
'".$_POST['keywords']."',
'$showhide',
".$_POST['id_news'].")";
if(mysql_query($query))
{
//--->
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php?id_news=".$_POST['id_news']."'>
</HEAD>";
}
?>
|
Вот после нажатия сохранить ничего не происходит. | |
|
|
|
|
|
|
|
для: DarkZoom
(12.05.2006 в 11:44)
| | Исправьте последний блок следующим образом
<?php
$query = "INSERT INTO news VALUES (NULL,
'".$_POST['data']."',
'".$_POST['smalltext']."',
'".$_POST['medtext']."',
'".$_POST['bigtext']."',
'".$_POST['keywords']."',
'$showhide',
".$_POST['id_news'].")";
if(mysql_query($query))
{
//--->
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php?id_news=".$_POST['id_news']."'>
</HEAD>";
}
else
{
echo mysql_error()."<br>";
echo $query;
exit();
}
?>
|
Что выводится в окно браузера? | |
|
|
|
|
|
|
|
для: cheops
(12.05.2006 в 12:37)
| | без чека:
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 ')' at line 8
INSERT INTO news VALUES (NULL, '2006-05-12', 'текст', 'текст', 'текст', 'текст', '', )
с чеком:
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 ')' at line 8
INSERT INTO news VALUES (NULL, '2006-05-12', 'текст', 'текст', 'текст', 'текст', 'show', ) | |
|
|
|
|
|
|
|
для: DarkZoom
(12.05.2006 в 13:06)
| | У вас не предаётся переменная $_POST['id_news'] - она пустая и из-за этого возникает ошибка. | |
|
|
|
|
|
|
|
для: cheops
(12.05.2006 в 13:08)
| | оно же autoincrement? :) | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2006 в 13:23)
| | Стоп, так а последний ".$_POST['id_news']." вообще не нужен. | |
|
|
|
|
|
|
|
для: cheops
(12.05.2006 в 17:11)
| | ну да... проглядел... %) | |
|
|
|
|
|
|
|
для: DarkZoom
(12.05.2006 в 13:06)
| | А в последнем поле в тексте запроса INSERT какие символы обрамляют hide/show?
Апострофы или одинарные косые кавычки?
По идее там должны стоять косые кавычки... | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2006 в 13:25)
| | Работает и с
и
и
Но если записать и простестить:.
else
{
echo mysql_error()."<br>";
echo $query;
exit();
}
|
то он пишет что ошибка синтаксиса в строке:
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 ')' at line 8.
7 - if($_POST["hidez"] == "on") $showhide = 'show';
8 - else $showhide = 'hide';
|
В оригинале:
if($_POST['hide'] == "on") $showhide = "show";
else $showhide = "hide";
|
зы. оригинал из книги http://www.softtime.ru/php5/?id_article=43 | |
|
|
|
|
|
|
|
для: DarkZoom
(12.05.2006 в 16:22)
| | Я спросил про текст сформированного запроса, а не про текст php-кода.
Здесь примером что-то передать бесполезно - форум режет косые кавычки - разве что аттачем. | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2006 в 16:27)
| | ставил и прямые и косые кавычки... текст один и тот же, ошибка синтаксиса.
Вот полностью весь блок отвечающий за новости + таблица. | |
|
|
|
|
|
|
|
для: DarkZoom
(12.05.2006 в 16:43)
| | А ведь cheops прав был....
Зачем Вы пытаетесь после '$showhide', затолкать в запрос $_POST['id_news'] ?
Из-за этого и ошибка вылезает.
Сам $_POST['id_news'] конечно пустой, но запятая то перед ним присутствует - она и нарушает синтаксис.
$query = "INSERT INTO news VALUES (NULL,
'".$_POST['data']."',
'".$_POST['smalltext']."',
'".$_POST['medtext']."',
'".$_POST['bigtext']."',
'".$_POST['keywords']."',
'$showhide')";
|
Насчет косых кавычек я ошибся. Элементы enum обрамляются точно также как и обычные строки - апострофами. Так что тут всё ОК. | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2006 в 17:23)
| | Спасиб добрые люди.
Хм, а на пересохранение у меня все верно стояло. =) | |
|
|
|