Запрос update выполняется не полностью!

Алексей

Новичок
Запрос update выполняется не полностью!

Доброго времени суток!
Сижу с данной проблемой уже 4-й день и никак не могу понять в чем дело? надеюсь на помощь профессионалов. Суть проблемы:

есть обыкновенная форма, которая заполняется пользователем и отсылается. Скрипт должен занести внесённые данные в базу данных MySQL обыкновенным апдэйтом (стадия заказа товара - присваивается zakaz_stadia = 1)

Запрос вывожу перед выполнением:

UPDATE zakaz SET zakaz_stadia = "1", dostavka = "2", user_fio = "info", user_email = "info", user_address = "info", user_phone = "info", user_dopolnit = "info" WHERE uid = "1ee71643ba63aa6facc386ac79c4e954" AND zakaz_stadia = ""

он корректный, изначально есть строка с uid = "1ee71643ba63aa6facc386ac79c4e954" и zakaz_stadia = ""

ВЫПОЛНЯЕТСЯ ТОЛЬКО!!! zakaz_stadia = "1".
Все поля типа text, гарантированно без всяких спецсимволов

пытался разбивать этот запрос на 2 - отдельно данные, которые идут постом, отдельно SET zakaz_stadia = "1", последняя операция ЗАТИРАЕТ ПРЕДЫДУЩУЮ!!!!, то есть
UPDATE zakaz SET zakaz_stadia = "1" убивает то что внесено в базу данных только что! предыдущим апдэйтом


и что самое странное - и PHPMyAdmin и сама консоль MySQL этот запрос корректно выполняют!

Люди, помоЖите, пажалллста, где искать пути решения? mysql_error() ничего не выдает, запос возвращает true! =)
 

Алексей

Новичок
сделал... не работает

точнее работает, но через раз - превый раз сработало, потом нет. проверил синтаксис - он правильный - запрос всё так-же конкретно выполняется phpMyAdmin'ом
 

Serguitar

Новичок->продвинутый
Автор оригинала: Алексей
сделал... не работает

точнее работает, но через раз - превый раз сработало, потом нет. проверил синтаксис - он правильный - запрос всё так-же конкретно выполняется phpMyAdmin'ом
Странный ты какой-то...
Как это так один раз работает, второй нет?
Смотри внимательно синтаксис, приведи полный пример php кода, который возвращает результат запроса.
Вообще, дай нам свой код. Раз админ и мускул работает, згачит дело только в нём.
Или в тебе...
 

Алексей

Новичок
вот функция которая апдэйтит базу данных:

------code------
function send_basket()
{
global $DB, $uid;


foreach($_POST as $k => $v) {
$po[$k] = addslashes($v);
}

$DB->update(1, Zakaz, "zakaz_stadia = '1', dostavka = '".$po[dostavka]."', user_fio = '".$po[fio]."', user_email = '".$po."', user_address = '".$po[address]."', user_phone = '".$po[phone]."', user_dopolnit = '".$po[dopolnit]."'", "uid = '".$uid."' AND zakaz_stadia = ''");
print("Îøèáêà ".mysql_error());
return $DB->read_tags("basket_success");
}
------code------

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

UPDATE zakaz SET zakaz_stadia = '1', dostavka = '1', user_fio = 'Процессор', user_email = 'Процессор', user_address = 'Процессор', user_phone = 'Процессор', user_dopolnit = 'Процессор' WHERE uid = 'b69162481e38c45b5e91fef0e5fd8cbd' AND zakaz_stadia = ''


класс $DB, функция update

------code------

function update($do_print, $tn, $set_expr, $where_expr)
{
$ret = 0;
$query_str = "UPDATE $tn SET $set_expr WHERE $where_expr";

$ret = mysql_query($query_str);

if ($do_print != 0)
// if (1)
{
echo "<BR><B>&#199;&#224;&#239;&#240;&#238;&#241;:</B><BR>" . $query_str . "<BR><BR>";
}
return $ret;
}

------code------
 

Serguitar

Новичок->продвинутый
Ни за что не поверю, что при правильном подключении запрос
mysql_query("UPDATE zakaz SET zakaz_stadia = '1', dostavka = '1', user_fio = 'Процессор', user_email = 'Процессор', user_address = 'Процессор', user_phone = 'Процессор', user_dopolnit = 'Процессор' WHERE uid = 'b69162481e38c45b5e91fef0e5fd8cbd' AND zakaz_stadia = ''");
не работает!
Смотри-ка, раз запрос выполняет только до первой запятой, значит тут дело либо в том, что ты записал вместо значения $set_expr, либо в функции класса. Ты класс сам писал?
 

Алексей

Новичок
если переставить zakaz_stadia = '1' в конец - будет то же самое - я проверял.

Класс писан не мною, но я с ним работаю уже год - никаких проблем не было никогда.
Он удобен: я ставлю в начале 1 вместо 0 (DB->update(1, Zakaz, ...) и он выводит мне сам запрос - я выделяю егои иду с ним в MyAdmin - там меняю у этого поля zakaz_stadia на "" (пустое) - так как всё-таки это он успевает изменить и выполняю мой запрос, который в буфере - он выполняется так как надо. именно это меня и удивляет

-~{}~ 01.05.05 13:23:

и что???? всё? проблема ещё не решена, а тема уже закрыта??? =((
 

botan

Новичок
попробуй так, создай новый файл:
<?
mysql_connect(...);
mysql_select_db(...);
$query="Твой неработающий запрос"
mysql_query($query) or die (mysql_error());
?>
О результатах сообщи.
 

Алексей

Новичок
Всё то же самое - если запускаю его (1.php) отдельно, то выполняется, если вот так, как описано ниже, то как и раньше обновляется только zakaz_stadia = 1

foreach($_POST as $k => $v) {
$po[$k] = addslashes($v);
}

$query="UPDATE zakaz SET zakaz_stadia = '1', user_fio = '".$po[fio]."', user_email = '".$po."', user_address = '".$po[address]."', user_phone = '".$po[phone]."', user_dopolnit = '".$po[dopolnit]."' WHERE uid = '".$uid."' AND zakaz_stadia = ''";
include("1.php");

файл 1.php :

<?
mysql_connect("localhost", "root","");
mysql_select_db("baza");
mysql_query($query) or die (mysql_error());
?>[/QUOTE]
ЧТО ЗА ФИГНЯ????
 

chira

Новичок
Алексей
у тебя не может выполняться 2 раза код
сделай var_dump($po)

заметь, что обновляется SET zakaz_stadia = '1' - явно указанное значение,
а остальные поля, как ты говоришь пусты

попробуй писать значения массива в кавычках
... '".$po['fio']." ...

в последнем коде
echo $query выводит нормальный запрос?
 

Алексей

Новичок
Я так и пишу:

"zakaz_stadia = '1', dostavka = '".$po[dostavka]."', user_fio = '".$po[fio]."', user_email = '".$po."', user_address = '".$po[address]."', user_phone = '".$po[phone]."', user_dopolnit = '".$po[dopolnit]."'"[/QUOTE]
var_dump($po) выдайт вполне исправные переменные:

[quote]array(8) {
["fio"]=>
string(12) " Seagate ST-"
["phone"]=>
string(12) " Seagate ST-"
["email"]=>
string(12) " Seagate ST-"
["dostavka"]=>
string(1) "1"
["address"]=>
string(12) " Seagate ST-"
["dopolnit"]=>
string(12) " Seagate ST-"
["uid"]=>
string(32) "fb337676fd0211f53233ecb94210969d"
["action"]=>
string(4) "send"
}[/quote]
 

botan

Новичок
Погоди если запускаешь его просто, как 1.php выполняется ?
Тогда имхо надо смотреть в сторону используемых табой классов.
 

Алексей

Новичок
Вот функция класса $DB
function update($do_print, $tn, $set_expr, $where_expr)
{
$ret = 0;
$query_str = "UPDATE $tn SET $set_expr WHERE $where_expr";

$ret = mysql_query($query_str);

if ($do_print != 0)
// if (1)
{
echo "<BR><B>&#199;&#224;&#239;&#240;&#238;&#241;:</B><BR>" . $query_str . "<BR><BR>";
}
return $ret;
}
Вызывается

$DB->update(1, Zakaz, "zakaz_stadia = '1', dostavka = '".$po[dostavka]."', user_fio = '".$po[fio]."', user_email = '".$po."', user_address = '".$po[address]."', user_phone = '".$po[phone]."', user_dopolnit = '".$po[dopolnit]."'", "uid = '".$uid."' AND zakaz_stadia = ''");[/QUOTE]
то есть делает то же самое - никаких преобразований со строкой не делает - просто собирает и выполняет запрос
 

Serguitar

Новичок->продвинутый
Ты возьми и попробуй выполнить то же самое на каком-нибудь другом компе. Раз ты говоришь, что пхпадмин выполняет нормально, может другое что-то? Даже не знаю. Попробуй на другом компе.
 

jendos

Guest
поле zakaz_stadia точно не int?
....AND zakaz_stadia is null...
 

baev

‹°°¬•
Команда форума
1. Ещё раз: пишите индексы массива в кавычках --
.$po['fio'].

2. Передавайте уже сформированные строки:
PHP:
$set_exp="zakaz_stadia = '1', dostavka = '".$po['dostavka'].
    "', user_fio = '".$po['fio']."', user_email = '".$po['email'].
    "', user_address = '".$po['address']."', user_phone = '".$po['phone'].
    "', user_dopolnit = '".$po['dopolnit']."'";
$where_exp="uid = '".$uid."' AND zakaz_stadia = ''";

$DB->update(1, Zakaz, $set_exp, $where_exp);
-- легче будет найти ошибки (echo $set_exp; ).
 
Сверху