|
|
|
| Здравствуйте !
Постараюсь по подробнее разъяснить что к чему. Итак, проблема в следующем :
Есть скрипт и база данных. Скрипт добавляет, удаляет или скажем списывает товар из базы. База данных MySQL примерно слебующего вида
Штрих код | Название | Цена | Колличество | группа | id |
работа с базо проста до безобразия
если товар с таким штрихом ненайдет добавляем
mysql_query("INSERT INTO $date VALUES ('$shtrih','$name','$cena','$kol_vo','$group','$id')");
если найден то обновляем
$prov["cena"]=$cena;
$prov["kol_vo"]+=$kol_vo;
mysql_query("UPDATE $date SET kol_vo='$prov[kol_vo]', cena='$prov[cena]' where id='$prov[id]'");
записей в базе примерно 1500.
А вот теперь самое смешное, все вроде работает нормально, НО НО НО, периодически случаются интересные вещи, скажем при редактировании товара бывает появляется в базе точно такая же копия этого же товара, соответственно должно быть 2 диска я плучается 4 :) или при добавлении товара скажем 5 штук, в базе пишется любое другое число :) это может быть как 0 так и 154 и т.д. При продаже товара т.е. должно в базе просто произойти скажем -5 и в базу продаж за день вписаться 5 а вписывается так же любое число.... И все эти глюки происходят периодически в разное время т.е. случайным образом.
Соответственно вопрос, из за чего это может происходить ?? Глюки интерпритатора т.е. РНР или глюки MySQL ?
Заранее спасибо ! | |
|
|
|
|
|
|
|
для: Fighter
(01.10.2008 в 16:51)
| | А как вы проверяете наличие такого товара в базе? | |
|
|
|
|
|
|
|
для: Drago
(01.10.2008 в 17:18)
| | $shtrih=trim($shtrih);
$prov=mysql_query("select * from tovar where shtrih='$shtrih'");
$prov=mysql_fetch_array($prov);
if($prov["shtrih"]=="")
{
srand((double) microtime()*10000000000);
$id=rand(100000000,1000000000);
mysql_query("INSERT INTO tovar VALUES ('$shtrih','$name','$cena','$kol_vo','$group', '$id')");
} | |
|
|
|
|
|
|
|
для: Fighter
(01.10.2008 в 16:51)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: mihdan
(01.10.2008 в 17:43)
| | Простите конечно. Но какие могут быть глюки скрипта когда все навсего есть строчка
mysql_query("INSERT INTO tovar VALUES ('$shtrih','$name','$cena','$kol_vo','$group', '$id')");
Просто из формы данные. В основном все нормально, НО иногда колличество вводится непонятно какое !
И еще, когда в базе всего навсего 10-20 наименований, все работает отлично проверял раз 300, а в основной базе где мноо товара проскакивают такие глюки
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Fighter
(01.10.2008 в 17:45)
| | А когда у вас появляются лишние записи? При добавлении нового товара или, и при обновлении старого, эти записи могут дублироваться? | |
|
|
|
|
|
|
|
для: Drago
(01.10.2008 в 18:08)
| | При редактировании(обновлении) старого иногда запись дублируется. | |
|
|
|
|
|
|
|
для: Fighter
(01.10.2008 в 17:45)
| | А зачем id товара формировать так: $id=rand(100000000,1000000000);, не лучше ли уникальные индексы через автоинкремент? | |
|
|
|
|
|
|
|
для: sim5
(01.10.2008 в 19:13)
| | Может и лучше и проще в придачу. Но хрен с ним, глюк то из за это происходить не может | |
|
|
|
|
|
|
|
для: Fighter
(02.10.2008 в 11:50)
| | Глюк возможно связан с повтороной отправкой данных, либо с логикой работы скрипта и т.п.. Это весь скрипт ваш анализировать надо, ошибка в нем, база тут не при чем.
PS. А насчет id товара, то не "может быть лучше", а так и нужно делать - каждый товар должен иметь уникальную запись, чего рандомом не как не гарантируется. | |
|
|
|
|
|
|
|
для: Fighter
(01.10.2008 в 16:51)
| | уже лучше тогда не рандом а time();
:) | |
|
|
|