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

Форум MySQL

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

 

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

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

тема: Помогите с INSERT INTO - не вставляет запись в базу данных
 
 автор: ruler   (28.07.2011 в 08:50)   письмо автору
 
 

Добрый день.
Есть проблема. Не понимаю почему не вставляется запись в MYSQL

Имеются переменные:
$name_massege
$email_massege
$tema_massege
$massege


SQL запрос:
    $sql = "INSERT  INTO `massege` VALUES (
               '$id_massege',
               '$name_massege',
               '$email_massege',
               '$tema_massege', 
               '$massege', 
               NOW(),
               '$hide');";


Не понимаю почему он не вставляет в базу данных запись.

  Ответить  
 
 автор: Valick   (28.07.2011 в 09:39)   письмо автору
 
   для: ruler   (28.07.2011 в 08:50)
 

'$id_massege' - это число по идее, а вы его суете как строку, уберите кавычки
кстати разве оно у вас не автоинкремент? если да то просто замените на NULL

  Ответить  
 
 автор: Ruler   (28.07.2011 в 10:02)   письмо автору
 
   для: Valick   (28.07.2011 в 09:39)
 

Да да, автоинкремент.
Сделал как вы посоветовали, но все равно не вставляет данные в таблицу
  $sql = "INSERT INTO `massege` VALUES (NULL,
                                     '$name_massege',
                                     '$email_massege',
                                     '$tema_massege',
                                     '$massege',
                                     NOW(),
                                    '$hide');";


Может дело в таблице, может она как то не верно создана?
Создавалась она следующим образом
CREATE TABLE IF NOT EXISTS `massege` (
  `id_massege` int(11) NOT NULL AUTO_INCREMENT,
  `name_massege` varchar(65) NOT NULL DEFAULT '',
  `email_massege` varchar(65) NOT NULL DEFAULT '',
  `tema_massege` tinytext NOT NULL,
  `massege` text,
  `putdate` datetime DEFAULT '0000-00-00 00:00:00',
  `hide` enum('show','hide') DEFAULT 'show',
  PRIMARY KEY (`id_massege`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Самое интересное если в веб-интерфейсе MYSQL вводить запрос в виде:
INSERT INTO `massege` (`id_massege`, `name_massege`, `email_massege`, `tema_massege`, `massege`, `putdate`, `hide`) VALUES
(1, 'Владимир', 'test@mail.ru', 'Коммерческое предложение', 'Тест', '2010-02-08 09:02:00', 'hide');

В этом случае все работает.
Совсем запутался, помогите.

  Ответить  
 
 автор: Valick   (28.07.2011 в 10:15)   письмо автору
 
   для: Ruler   (28.07.2011 в 10:02)
 

покажите эхо запроса
echo $sql;

__
у меня запрос работает нормально

  Ответить  
 
 автор: Ruler   (28.07.2011 в 10:21)   письмо автору
 
   для: Valick   (28.07.2011 в 10:15)
 

INSERT INTO `massege` VALUES (NULL, 'Владимир', 'vova@mail.ru', 'Привет', 'Сообщение', NOW(), 'hide');

Я так понимаю что-то с датой не то, она походу не вставляется?

  Ответить  
 
 автор: cheops   (28.07.2011 в 10:26)   письмо автору
 
   для: Ruler   (28.07.2011 в 10:21)
 

Этот запрос в Web-интерфейсе тоже выполняется без ошибок?

PS А как вы выполняете запрос в вашем PHP-скрипте?

  Ответить  
 
 автор: Valick   (28.07.2011 в 10:28)   письмо автору
 
   для: Ruler   (28.07.2011 в 10:21)
 

с датой все нормально, она подставляется уже в самой базе при выполнении запроса

  Ответить  
 
 автор: cheops   (28.07.2011 в 10:25)   письмо автору
 
   для: ruler   (28.07.2011 в 08:50)
 

>Не понимаю почему он не вставляет в базу данных запись.
Функция mysql_error() возвращает какое-нибудь сообщение об ошибке?

  Ответить  
 
 автор: Ruler   (28.07.2011 в 10:28)   письмо автору
 
   для: cheops   (28.07.2011 в 10:25)
 

нет никаких ошибок не возвращает. Чета не совсем понимаю. Вроде как все должно вставляться.

  Ответить  
 
 автор: Valick   (28.07.2011 в 10:31)   письмо автору
 
   для: Ruler   (28.07.2011 в 10:28)
 

строка
$res=mysql_query($sql) or die(mysql_error());

присутствует в коде?
к базе конект происходит нормально?

  Ответить  
 
 автор: Ruler   (28.07.2011 в 10:37)   письмо автору
 
   для: Valick   (28.07.2011 в 10:31)
 

Да код присутствует. и ничего не выдает.

Конект к базе есть, по скольку на других страницах сайта все работает.

По поводу того что конект отличный, в подтверждение могу сказать следующее. На этой же странице выводиться из другой таблицы email адрес на который должно отправляться сообщение и оно нормально приходит, спокойно отправляться.

Самое интересное, если ввести через веб интрефейс базы данных запрос который вывелся при включение echo $sql; все отлично вставляется.
INSERT INTO `massege` VALUES (NULL, 'Владимир', 'vova@mail.ru', 'Привет', 'Сообщение', NOW(), 'hide');

  Ответить  
 
 автор: cheops   (28.07.2011 в 10:44)   письмо автору
 
   для: Ruler   (28.07.2011 в 10:37)
 

А приведите несколько строк до и после mysql_query()? Не может быть там каких-то условных операторов или логики, которые не дают выполниться запросу? Других вариантов вроде как не осталось... Если у вас успешно работает phpMyAdmin, значит проблем с связке PHP+MySQL нет - там обычный скрипт, вроде того, который создаете вы.

  Ответить  
 
 автор: Ruler   (28.07.2011 в 10:54)   письмо автору
 
   для: cheops   (28.07.2011 в 10:44)
 

Соединяемся с базой данных, файл конекта находиться в админке
<?
  
require_once "admin/config.php";
  
$config_php "already_include";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
.........

<?
$action 
"";
$action $_POST["action"];

if (!empty(
$action)) 
{
  
// Проверяем правильность ввода
  
$_POST["name_massege"] = trim($_POST["name_massege"]);        //имя
  
if (empty($_POST["name_massege"])) links("Отсутствует имя");
  
$_POST["email_massege"]=trim($_POST["email_massege"]);        //e-mail
  
if(empty($_POST['email_massege'])) links("Не введён e-mail");
  if (!
preg_match("/[0-9a-z_]+@[0-9a-z-_^\.]+\.[a-z]{2,3}/i"$_POST['email_massege'])) links("Введите e-mail в виде <i>name@domen.com</i>");
  
$_POST["tema_massege"] = trim($_POST["tema_massege"]);        //тема сообщения
  
if (empty($_POST["tema_massege"])) links("Отсутствует тема сообщения");
  
$_POST["massege"] = trim($_POST["massege"]);                //сообщение
  
if (empty($_POST["massege"])) links("Текст сообщения отсутствует.");

  
// Обрабатываем HTML-тэги 
  
$name_massege substr($_POST["name_massege"],0,52);
  
$name_massege htmlspecialchars(stripslashes($name_massege));
  
$email_massege substr($_POST["email_massege"],0,52);
  
$email_massege htmlspecialchars(stripslashes($email_massege));
  
$tema_massege substr($_POST["tema_massege"],0,52);
  
$tema_massege htmlspecialchars(stripslashes($tema_massege));
  
$massege substr($_POST["massege"],0,1024);
  
$massege htmlspecialchars(stripslashes($massege));

// Даем переменной $hide отображать сообщение
$hide "hide";

$sql "INSERT INTO `massege` VALUES (NULL,
                                     '
$name_massege',
                     '
$email_massege',
                                     '
$tema_massege',
                                     '
$massege',
                                     NOW(),
                                    '
$hide');";

$res=mysql_query($sql) or die(mysql_error());

// запрос к другой таблице для вывода email для отправки на почту сообщения с формы
  
$query "SELECT email FROM mailer";
  
$mal mysql_query($query);
  
$row mysql_fetch_array($mal);

  
$body="<body>
<h2>Сообщение с сайта</h2>

<strong>Контактные данные:</strong><br />
Имя - 
$name_massege,<br />
E-mail: 
$email_massege,<br />

<p><strong>Тема сообщения:</strong><br />
$tema_massege<br />
<p><strong>Содержание письма:</strong><br />
$massege</p>
</body>"
;
    
     
$email $row['email'];

$header="Content-type: text/html; charset=\"UTF-8\"";
$header.="From: $mail\r\n";
$header.= "Cc: vova@mail.ru\r\n";

//$headers.= "Bcc: vladimir@mail.ru\r\n";
$header.="Content-type: text/html; charset=\"UTF-8\"";

    
$sucess mail($email,"Сообщение с сайта www.test.ru от $name_massege"$body$header);

    if (
$sucess){
    echo 
'<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
............
</body>
</html>'
;
    exit();
    }
 }


 
// это та функция которая выводит сообщение о ошибке при проверке данный links
  
function links($msge)
  {
    echo 
'<body>
    <p><b>'
.$msge.'</b><br>Поля отмеченые <span>*</span>обязательны для заполнения!</p>    
    <p><a href=contact.html onClick="history.back()" class=link1>Вернуться к заполнению формы</a></p>
    <p><a href=/ class="link">На главную</a></p>
..............................

</body>
</html>'
;
    exit();
  }
?>


Вот фактически вся страница.

Причем на электронный адрес спокойно выводит и отправляет почту с теми же переменными

  Ответить  
 
 автор: cheops   (28.07.2011 в 11:02)   письмо автору
 
   для: Ruler   (28.07.2011 в 10:54)
 

Вряд ли конечно, что-то изменится, но все-таки попробуйте поменять строку
$res=mysql_query($sql) or die(mysql_error());
на
if(!mysql_query($sql)) die(mysql_error();

  Ответить  
 
 автор: Ruler   (28.07.2011 в 11:05)   письмо автору
 
   для: cheops   (28.07.2011 в 11:02)
 

Ребята, огромное ВАМ спасибо за помощь.

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

Наверное либо я с ума сошел, либо mysql)

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

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