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

Форум MySQL

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

 

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

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

тема: запись из ячейки в переменную до объявления mysql_query
 
 автор: tima2010   (01.09.2011 в 22:00)   письмо автору
 
 

привет, делаю запись в базу


<?php
if(isset($_GET['add'])) { //если Add существует

// вот тут нужно передать id добавляемой записи
// но как ее передать если запись еще не добавлена?

if ($_POST['title'] == "") { $title "АЙДИ добавляемой записи"; } else { $title $_POST['title']; }
$content $_POST['content'];

mysql_query("INSERT INTO news (title, content) VALUES('$title', '$content')") or die(mysql_error());

// $curentid = mysql_insert_id();

mysql_close();
}
?>


не могу передать ID добавляемой записи в условие выше :( неужели придется для получения ID открывать таблицу и считать ?

  Ответить  
 
 автор: Valick   (01.09.2011 в 22:04)   письмо автору
 
   для: tima2010   (01.09.2011 в 22:00)
 

в большинстве случаев id строке присваивает сама база автоинкрементом
(не смотря на видимую простоту это достаточно мощная функция и не стоит просто так от нее отказыватся)
в вашем случае я тоже не вижу причин для исключения

  Ответить  
 
 автор: tima2010   (01.09.2011 в 22:07)   письмо автору
 
   для: Valick   (01.09.2011 в 22:04)
 

да ID присваивается само вот sql:


mysql_query("
CREATE TABLE IF NOT EXISTS news (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
title VARCHAR(255),
content TEXT
) ENGINE=MyISAM CHARACTER SET=utf8;
") 



проблема в том чтобы при пустом значении title задавать ID записи чтобы оно не было пустым

  Ответить  
 
 автор: cheops   (01.09.2011 в 22:07)   письмо автору
 
   для: tima2010   (01.09.2011 в 22:00)
 

Лучше постфактум обновить запись при помощи значения, полученного из mysql_insert_id() (я так понимаю для назначения ID используется механизм AUTO_INCREMENT?).
<?php
if(isset($_GET['add'])) { //если Add существует 
  
$title $_POST['title'];
  
$content $_POST['content']; 

  
$query "INSERT INTO news (title, content) VALUES('$title', '$content')";
  
mysql_query($query) or die(mysql_error()); 
  if (
$_POST['title'] == "")
  {
    
$id mysql_insert_id();
    
$query "UPDATE news SET title = $id WHERE ID = $id";
    
mysql_query($query) or die(mysql_error()); 
  }
  
mysql_close(); 

?>

  Ответить  
 
 автор: tima2010   (01.09.2011 в 22:19)   письмо автору
 
   для: cheops   (01.09.2011 в 22:07)
 

Спасибо! все работает.
да именно AUTO_INCREMENT :)

А почему вы используете query через переменную, таким образом? :

$query = "INSERT INTO news (title, content) VALUES('$title', '$content')"; 
  mysql_query($query) or die(mysql_error());  


а не таким?


  mysql_query("INSERT INTO news (title, content) VALUES('$title', '$content')") or die(mysql_error());  

  Ответить  
 
 автор: Valick   (01.09.2011 в 22:22)   письмо автору
 
   для: tima2010   (01.09.2011 в 22:19)
 

потому что для отладки кода легко и просто можно сделать echo $query="....
и легко найти ошибку

  Ответить  
 
 автор: tima2010   (01.09.2011 в 22:23)   письмо автору
 
   для: Valick   (01.09.2011 в 22:22)
 

вообщем этика :)

  Ответить  
 
 автор: Valick   (01.09.2011 в 22:24)   письмо автору
 
   для: tima2010   (01.09.2011 в 22:23)
 

а еще иногда запрос может быть достаточно сложным и собираться из нескольких частей $query .= $query....
в общем привыкайте использовать переменную, пригодится :)

  Ответить  
 
 автор: tima2010   (01.09.2011 в 22:34)   письмо автору
 
   для: Valick   (01.09.2011 в 22:24)
 

хм, понял вообщем чтобы не писать два раза

mysql_query("INSERT INTO.... ") or die(mysql_error());
mysql_query("INSERT INTO.... ") or die(mysql_error());


можно написать ?::
$query .= "INSERT INTO 1....";  
$query .= "INSERT INTO 2....";  
mysql_query($query) or die(mysql_error());   

  Ответить  
 
 автор: Valick   (01.09.2011 в 22:39)   письмо автору
 
   для: tima2010   (01.09.2011 в 22:34)
 

ну в принципе да, но в данном случае лучше использовать многострочный INSERT
т.е в запросе собирать именно часть VALUES
$query="INSERT INTO `table` (pole1,pole2) VALUES";
$query .="(1,2),";
$query .="(3,4)";

иногда в сборке запроса принимают непосредственное участие циклы
и там конструкция $query .= как родная)

  Ответить  
 
 автор: tima2010   (02.09.2011 в 10:00)   письмо автору
 
   для: Valick   (01.09.2011 в 22:39)
 

а если нужно из разных таблиц? к примеру на такое сильно ругается:

$query .= "SELECT * FROM articles where (category='$id')";
$query .= "SELECT * FROM category where (id='$id')";
$res = mysql_query($query) or die(mysql_error());


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 'SELECT * FROM category where (id='1')' at line 1

  Ответить  
 
 автор: Valick   (02.09.2011 в 10:18)   письмо автору
 
   для: tima2010   (02.09.2011 в 10:00)
 

так не нужно пихать невпихуемое))
id у вас число? или строка?
$query = "SELECT * FROM articles where category=$id"; 
$query .= ";";
$query .= "SELECT * FROM category where id=$id"; 
$res = mysql_query($query) or die(mysql_error());

только не нужно тут этого (хороша ложка к обеду)
здесь два никоим образом не связанных запроса и даже если вы их объедените
то они так и останутся двумя запросами...
__
я вам говорил о сборке одного достаточно сложного запроса, но даже если это
всего навсего SELECT * FROM `table`, то лично я буду все равно использовать переменную

  Ответить  
 
 автор: tima2010   (02.09.2011 в 10:31)   письмо автору
 
   для: Valick   (02.09.2011 в 10:18)
 

Понятно! :) Спасибо буду знать!

да id - число

  Ответить  
 
 автор: cheops   (01.09.2011 в 22:55)   письмо автору
 
   для: tima2010   (01.09.2011 в 22:19)
 

В общем да, из-за отладки, когда у вас есть готовая переменная $query её очень просто вывести, причем, когда у вас ошибки собираются не блоками if(), а исключениями, это становится в двойне важно, так как процесс регистрации и вывода ошибки нужно регистрировать, а информации в mysql_error() зачастую недостаточно, особенно, если речь идет об огромном проекте. Да и в длину код становится короче, что важно для форума и книг.

  Ответить  
Rambler's Top100
вверх

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