Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с добавлением новых полей с таблицу.
 
 автор: DarkZoom   (12.05.2006 в 10:43)   письмо автору
 
 

Подскажите плз, не могу сам понять в чем трабл.
Есть таблица:


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', 

Прописываю все в скрипте, а он не пашет.
Прописываю... эт наверно я погорячился, из готового скрипта вытаскиваю кусок отвечающий за чекбокс и изменяю немного под себя.
Как только удаляю все куски скрипта и поле чекбокса из таблицы все снова пашет. =(

   
 
 автор: Trianon   (12.05.2006 в 10:48)   письмо автору
 
   для: DarkZoom   (12.05.2006 в 10:43)
 

Так может дело в скрипте, а не в таблице?
В приведенной структуре есть одно неприятное место.
Имя поля (hide) совпадает с одним из имен enum-значений.

   
 
 автор: DarkZoom   (12.05.2006 в 10:50)   письмо автору
 
   для: 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 ;

   
 
 автор: Trianon   (12.05.2006 в 11:06)   письмо автору
 
   для: DarkZoom   (12.05.2006 в 10:50)
 

Так а я не утверждал, что именно hide является причиной неработоспособности скрипта.
Может быть всё же ошибка в самом скрипте?

   
 
 автор: DarkZoom   (12.05.2006 в 11:44)   письмо автору
 
   для: 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?>>&nbsp;<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>"
;

  } 
    
?>

Вот после нажатия сохранить ничего не происходит.

   
 
 автор: cheops   (12.05.2006 в 12:37)   письмо автору
 
   для: 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();
  }
?>

Что выводится в окно браузера?

   
 
 автор: DarkZoom   (12.05.2006 в 13:06)   письмо автору
 
   для: 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', )

   
 
 автор: cheops   (12.05.2006 в 13:08)   письмо автору
 
   для: DarkZoom   (12.05.2006 в 13:06)
 

У вас не предаётся переменная $_POST['id_news'] - она пустая и из-за этого возникает ошибка.

   
 
 автор: Trianon   (12.05.2006 в 13:23)   письмо автору
 
   для: cheops   (12.05.2006 в 13:08)
 

оно же autoincrement? :)

   
 
 автор: cheops   (12.05.2006 в 17:11)   письмо автору
 
   для: Trianon   (12.05.2006 в 13:23)
 

Стоп, так а последний ".$_POST['id_news']." вообще не нужен.

   
 
 автор: Trianon   (12.05.2006 в 17:24)   письмо автору
 
   для: cheops   (12.05.2006 в 17:11)
 

ну да... проглядел... %)

   
 
 автор: Trianon   (12.05.2006 в 13:25)   письмо автору
 
   для: DarkZoom   (12.05.2006 в 13:06)
 

А в последнем поле в тексте запроса INSERT какие символы обрамляют hide/show?
Апострофы или одинарные косые кавычки?
По идее там должны стоять косые кавычки...

   
 
 автор: DarkZoom   (12.05.2006 в 16:22)   письмо автору
 
   для: Trianon   (12.05.2006 в 13:25)
 

Работает и с

'$showhide'
и

'$showhide'
и

"'.$showhide.'"

Но если записать и простестить:.

  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

   
 
 автор: Trianon   (12.05.2006 в 16:27)   письмо автору
 
   для: DarkZoom   (12.05.2006 в 16:22)
 

Я спросил про текст сформированного запроса, а не про текст php-кода.
Здесь примером что-то передать бесполезно - форум режет косые кавычки - разве что аттачем.

   
 
 автор: DarkZoom   (12.05.2006 в 16:43)   письмо автору
 
   для: Trianon   (12.05.2006 в 16:27)
 

ставил и прямые и косые кавычки... текст один и тот же, ошибка синтаксиса.
Вот полностью весь блок отвечающий за новости + таблица.

   
 
 автор: Trianon   (12.05.2006 в 17:23)   письмо автору
 
   для: 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 обрамляются точно также как и обычные строки - апострофами. Так что тут всё ОК.

   
 
 автор: DarkZoom   (12.05.2006 в 18:37)   письмо автору
 
   для: Trianon   (12.05.2006 в 17:23)
 

Спасиб добрые люди.
Хм, а на пересохранение у меня все верно стояло. =)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования