|
|
|
| Подскажите где ошибка:
<?php
session_start();
// Устанавливаем соединение с базой данных
require_once("config.php");
$zt= $_SESSION['oarr'];
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
$sqlst = "INSERT INTO orders (orderid,tovid, idzakk,kolo,suma,dataz,status)
VALUES
(null,' $ztt ','$id',' $ztk ','$s',null,0) ";
// Выполняем оператор UPDATE
$sqlo="UPDATE tovar
SET kol=(kol-$ztk)
WHERE tovid=$ztt";
$qwer="SELECT idzakk
FROM zakazchik
WHERE eme = '$eme' " ;
$rez = mysql_query($qwer);
if(!$rez)exit(mysql_error());
while($row = mysql_fetch_array($rez))
$id=$row['idzakk'];
for ($i=0; $i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,"int");
$ztk=$zt[$i][1];
$s=6;
if( mysql_query($sqlst))
{
echo "запись добавлена";
}else exit("ошибка-" .mysql_error());
};
?>
|
Ошибка:
ошибка-Incorrect integer value: ' ' for column 'tovid' at row 1 | |
|
|
|
|
|
|
|
для: denko
(26.05.2008 в 11:14)
| | Попробуйте заменить блок SQL-операторов следующим образом
<?php
// Создаем оператор INSERT
$sqlst = "INSERT INTO orders (orderid,tovid, idzakk,kolo,suma,dataz,status)
VALUES
(null,' '$ztt' ','$id',' $ztk ','$s',null,0) ";
// Выполняем оператор UPDATE
$sqlo="UPDATE tovar
SET kol=(kol-$ztk)
WHERE tovid='$ztt'";
$qwer="SELECT idzakk
FROM zakazchik
WHERE eme = '$eme' " ;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(26.05.2008 в 17:34)
| | Всё равно ругается
ошибка-Incorrect integer value: ' ' ' for column 'tovid' at row 1
| |
|
|
|
|
|
|
|
для: denko
(27.05.2008 в 08:50)
| | Если tovid это INT и $ztt точно является числом, то кавычки вообще можно выбросить. Ошибка в передаваемых в запрос данных видимо. | |
|
|
|
|
|
|
|
для: sim5
(27.05.2008 в 09:35)
| | для проверки исправляю код
<?php
session_start();
// Устанавливаем соединение с базой данных
require_once("config.php");
$zt= $_SESSION['oarr'];
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
$sqlst = "INSERT INTO orders (orderid,tovid, idzakk,kolo,suma,dataz,status)
VALUES
(null, ' '$ztt' ',5,3,3,null,0) ";
// Выполняем оператор UPDATE
$sqlo="UPDATE tovar
SET kol=(kol-$ztk)
WHERE tovid=$ztt";
$qwer="SELECT idzakk
FROM zakazchik
WHERE eme = '$eme' " ;
$rez = mysql_query($qwer);
if(!$rez)exit(mysql_error());
while($row = mysql_fetch_array($rez))
$id=$row['idzakk'];
for ($i=0; $i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,int);
echo gettype($ztt);
};
?>
|
и получаю:
integerinteger
tovid тоже integer | |
|
|
|
|
|
|
|
для: denko
(27.05.2008 в 10:13)
| | Ошибка извещает о конфликте для поля tovid, а в него, следуя вашему запросу, передается $ztt, которая так и осталась обрамленной парами кавычек, а изменили вы совсем другие данные. Сделайте элементраный echo $ztt, перед помещением его в базу, уж покрайней мере можно будет понять, верны ли передаваемые данные в поле. | |
|
|
|
|
|
|
|
для: sim5
(27.05.2008 в 10:43)
| | Убираю в запросе кавычки:
<?php
session_start();
// Устанавливаем соединение с базой данных
require_once("config.php");
$zt= $_SESSION['oarr'];
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
$sqlst = "INSERT INTO orders (orderid,tovid, idzakk,kolo,suma,dataz,status)
VALUES
(null, $ztt,5,3,3,null,0) ";
// Выполняем оператор UPDATE
$sqlo="UPDATE tovar
SET kol=(kol-$ztk)
WHERE tovid=$ztt";
$qwer="SELECT idzakk
FROM zakazchik
WHERE eme = '$eme' " ;
$rez = mysql_query($qwer);
if(!$rez)exit(mysql_error());
while($row = mysql_fetch_array($rez))
$id=$row['idzakk'];
for ($i=0; $i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,int);
$ztk=$zt[$i][1];
$s=6;
if( mysql_query($sqlst))
{
echo "запись добавлена";
}else exit("ошибка-" .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 '5,3,3,null,0)' at line 3
Проверяю значение $ztt
<?php
session_start();
// Устанавливаем соединение с базой данных
require_once("config.php");
$zt= $_SESSION['oarr'];
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
$sqlst = "INSERT INTO orders (orderid,tovid, idzakk,kolo,suma,dataz,status)
VALUES
(null, $ztt,5,3,3,null,0) ";
// Выполняем оператор UPDATE
$sqlo="UPDATE tovar
SET kol=(kol-$ztk)
WHERE tovid=$ztt";
$qwer="SELECT idzakk
FROM zakazchik
WHERE eme = '$eme' " ;
$rez = mysql_query($qwer);
if(!$rez)exit(mysql_error());
while($row = mysql_fetch_array($rez))
$id=$row['idzakk'];
for ($i=0; $i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,int);
$ztk=$zt[$i][1];
$s=6;
echo $ztt;
}
?>
|
Результат:
15 | |
|
|
|
|
|
|
|
для: denko
(27.05.2008 в 11:11)
| | В общем так, если у вас все поля (кроме dataz, которое имеет тип DATE), то такой запрос:
mysql_query("INSERT INTO tst (tovid, idzakk, kolo, suma, dataz, status) VALUES (5, 5, 3, 3, null, 0);") or die (mysql_error()); (если orderid поле с автоинкрементом, то упоминать его в запросе не обязательно), тогда вы получите лишь такую ошибку:
Column 'dataz' cannot be null
Сменив, например, null на date(), такую:
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 '), 0)' at line 1
И лишь прописав в запросе 'date()', у вас произойдет запись в таблицу. Если поле dataz это имеет тоже тип INT, то все должно записаться без проблем. Разберитесь вы со своими полями и данными. | |
|
|
|
|
|
|
|
для: sim5
(27.05.2008 в 11:48)
| | поле dataz которое имеет тип TIMESTAMP, то есть его можно не указывать.
поле orderid -- поле с автоинкрементом, то есть его тоже можно не указывать.
Изначально так и было, результат был тот же.
Сейчас я ипользую их в запросе лишь потому, что не понимаю почему не работает. | |
|
|
|
|
|
|
|
для: denko
(27.05.2008 в 12:29)
| | Я не все сказал, то как я привел запись в поле типа dataz, если оно имеет тип DАTE, это всего лишь "обманка", записи даты не будет в поле. Что за типы у остальных полей? | |
|
|
|
|
|
|
|
для: sim5
(27.05.2008 в 12:33)
| | вот структура таблицы
CREATE TABLE IF NOT EXISTS `orders` (
`orderid` int(6) NOT NULL AUTO_INCREMENT,
`tovid` int(10) unsigned zerofill NOT NULL,
`idzakk` int(6) NOT NULL,
`kolo` int(6) NOT NULL,
`suma` decimal(10,2) NOT NULL,
`dataz` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`data` date DEFAULT NULL,
`dataop` date DEFAULT NULL,
`status` smallint(11) DEFAULT '0',
PRIMARY KEY (`orderid`),
KEY `tovid` (`tovid`,`idzakk`,`status`),
KEY `idzakk` (`idzakk`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=27 ;
--
-- Ограничения внешнего ключа сохраненных таблиц
--
--
-- Ограничения внешнего ключа таблицы `orders`
--
ALTER TABLE `orders`
ADD CONSTRAINT `orders_ibfk_3` FOREIGN KEY (`tovid`) REFERENCES `tovar` (`tovid`),
ADD CONSTRAINT `orders_ibfk_4` FOREIGN KEY (`idzakk`) REFERENCES `zakazchik` (`idzakk`);
|
причём если я явно указываю:
$sqlst = "INSERT INTO orders (tovid, idzakk,kolo,suma,dataz,status)
VALUES
(3,5,3,3,null,0) ";
|
всё работает | |
|
|
|
|
|
|
|
для: denko
(27.05.2008 в 12:50)
| | Создал (специльно для вас, только у меня тип таблиц MyISAM) вашу таблицу, это:
<?
$v1 = 9;
$v2 = 17;
$v3 = 6;
$v4 = 9;
mysql_query("INSERT INTO orders (tovid, idzakk,kolo,suma,dataz,status)
VALUES ($v1,$v2,$v3,$v4,null,0);") or die (mysql_error());
?>
|
не вызывает никаких проблем. Выполните у себя такой запрос (отдельно, для теста). | |
|
|
|
|
|
|
|
для: sim5
(27.05.2008 в 13:24)
| | Работает, спасибо:)
В чём же у меня проблема? | |
|
|
|
|
|
|
|
для: denko
(27.05.2008 в 13:30)
| | Работает отдельно тестом или и в самом скрипте теперь? | |
|
|
|
|
|
|
|
для: sim5
(27.05.2008 в 13:40)
| | Отделно в виде тестового скрипта. | |
|
|
|
|
|
|
|
для: denko
(27.05.2008 в 13:54)
| | Значит тип передаваемых у вас в запрос данных, не совпадают с типом полей таблицы. Думаю, что проблема в этом. Заремируйте в своем скрипте все, начиная с запроса записи в таблицу, и вместо этого выведите на экран данные предназначенные для записи. Что у вас за значения в них? | |
|
|
|
|
|
|
|
для: sim5
(27.05.2008 в 13:59)
| | Я пробовал, выводит коректные данные.
Проверял их тип -- INTEGER.
см. выше | |
|
|
|
|
|
|
|
для: denko
(27.05.2008 в 14:12)
| | Тогда я затрудняюсь сказать о причине, вы "глазами" гляньте на свои типы еще, ну причина остается только в них. Кстати, где у вас в коде непосредственно запрос к базе на запись? | |
|
|
|
|
|
|
|
для: sim5
(27.05.2008 в 14:35)
| | Шестая строчка с конца
<?php
session_start();
// Устанавливаем соединение с базой данных
require_once("config.php");
$zt= $_SESSION['oarr'];
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
$sqlst = "INSERT INTO orders (tovid, idzakk,kolo,suma,dataz,status)
VALUES
($ztt,5,3,3,null,0) ";
for ($i=0; $i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,int);
if( mysql_query($sqlst))
{
echo "запись добавлена";
}else exit("ошибка-" .mysql_error());
};
?>
|
| |
|
|
|
|
|
|
|
для: denko
(27.05.2008 в 14:43)
| | Нет, ну просто слов нет, нука так напишите в своем тесте:
<?
$sqlst = "INSERT INTO orders (tovid, idzakk,kolo,suma,dataz,status)
VALUES ('$v1','$v2','$v3','$v4',null,0)";
$v1 = 19;
$v2 = 34;
$v3 = 21;
$v4 = 125;
mysql_query($sqlst) or die (mysql_error());
?
|
Что у вас в таблицу запишет, как вы думаете? | |
|
|
|
|
|
|
|
для: sim5
(27.05.2008 в 15:02)
| | Спасибо, супер:) | |
|
|
|
|