|
|
|
| Ребята, помогите написать запрос на обновление данных:
(только не ругайтесь на меня )))))
Есть вот такие окна где я редактирую данные
Например зарплата за январь. При выборе различных фамилий ранее выдается соответстующая зарплата за январь (это все работает).
<td width="50"><?php $jan=$row['yan'];
echo ("<input name='jan' type='text' size='4' value='".$jan."'>");?></td>
|
Я создал кнопку Обновить и весь код который подобен указанному выше заключил так
if(empty($submit))
{
здесь сам код
}
|
Никак не могу написать вот здесь
if($submit)
{
вот здесь
}
|
запрос на обновление. Всего переменных у меня вот столько (familiya,name,jan,fev,mart,apr,may,ijn,ijl,avg,sent,oct,nov,dec), т.е все они должны обновится после нажатия на кнопку Обновить.
Заранее, Спасибо !!!! | |
|
|
|
|
|
|
|
для: Alessandro
(14.03.2006 в 18:36)
| |
<?
mysql_query("UPDATE table SET "
."jan=$jan,"
....
."nov=$nov,"
."dec=$dec "
."WHERE familiya = '$familiya' and $name = '$name' ");
?>
|
Если не вдаваться в подробности защиты, то как-то так. | |
|
|
|
|
|
|
|
для: Trianon
(14.03.2006 в 18:52)
| |
if($submit)
{
$que= "UPDATE zar SET "
."jan=$jan,"
."fev=$fev,"
."mart=$mart,"
."apr=$apr,"
."may=$may,"
."ijn=$ijn,"
."ijl=$ijl,"
."avg=$avg,"
."sent=$sent,"
."oct=$oct,"
."nov=$nov,"
."dec=$dec "
."WHERE familiya = '$familiya' and name ='$name' and jan ='$jan' and fev ='$fev' and mart ='$mart' and apr ='$apr' and may ='$may' and ijn ='$ijn' and ijl ='$ijl' and avg ='$avg' and sent ='$sent' and oct ='$oct' and nov ='$nov' and dec ='$dec' ";
$resu = mysql_query($que);
if($resu)
{
echo "Объект был успешно обновлен.<br><br>";
}
|
У меня получился вот такой код и он ругается что не знает все эти переменные $familiya,$name,......,$dec которые у меня записаны в
if(empty($submit))
{
вот здесь
}
|
он их не видит
А если я делаю вот так т.е без $ просто familiya ну и так далее
if($submit)
{
$que= "UPDATE zar SET "
."jan='jan',"
."fev='fev',"
."mart='mart',"
."apr='apr',"
."may='may',"
."ijn='ijn',"
."ijl='ijl',"
."avg='avg',"
."sent='sent',"
."oct='oct',"
."nov='nov',"
."dec='dec "
."WHERE familiya = 'familiya' and name ='name' and jan ='jan' and fev ='fev' and mart ='mart' and apr ='apr' and may ='may'
and ijn ='ijn' and ijl ='ijl' and avg ='avg' and sent ='sent' and oct ='oct' and nov ='nov' and dec ='dec' ";
$resu = mysql_query($que);
if($resu)
{
echo "Объект был успешно обновлен.<br><br>";
}
}
|
То он ничего не выводит ((( Почему так ??? | |
|
|
|
|
|
|
|
для: Alessandro
(14.03.2006 в 19:28)
| | 4 момента.
1. Если вы хотите обновить строку, в которой уже стоят и имя и фамилия и все месяца, то,
пардон, что же тогда Вы в ней хотите обновить?
2.
>все эти переменные $familiya,$name,......,$dec которые у меня записаны в
>if(empty($submit)) { вот здесь }
Вот ТАМ у Вас записаны вовсе не переменные, а (как я понимаю) нарисована форма с полями. значения из полей формы нужно еще подобрать.
$name = $_POST['name'];
...
$dec = $_POST['dec'];
3.Когда Вы исполните UPDATE zar SET jan='jan',fev='fev'...
то в полях jan, fev таблицы и т.д. у Вас появятся названия месяцев, а не числа.
В тех строках, где разрешит WHERE. Оно Вам надо?
4. Кто и что должен вывести? UPDATE сам данные не выводит. | |
|
|
|
|
|
|
|
для: Trianon
(14.03.2006 в 20:02)
| | 1. В строках jan,fev,....,dec стоят не месяц а зарплата работников за тот или иной месяц по умолчанию значение этих полей 0, а мне надо изменить на 10000 или 20000.
2. Это я так понимаю надо писать вот здесь ?
if (submit)
{
$name = $_POST['name'];
...
$dec = $_POST['dec'];
}
|
Если да то на эти строки он мне выдает ошибку
Notice: Undefined index: name
Notice: Undefined index: dec
Почему я опять понять не могу ????
3. Мне надо чтобы после UPDATE появились не 0 которые там стоят а те числа которые я поставил.
4. UPDATE если он правильно сработал должен вывести
$resu = mysql_query($que);
if($resu)
{
echo "Объект был успешно обновлен.<br><br>";
echo "<a href=$PHP_SELF?razd=main>Вернутся<br>";
}
|
А у меня вообще пусто т.е запрос не сработал | |
|
|
|
|
|
|
|
для: Alessandro
(14.03.2006 в 20:19)
| | 4. Исправьте этот код следующим образом
<?php
$resu = mysql_query($que);
if($resu)
{
echo "Объект был успешно обновлен.<br><br>";
echo "<a href=$PHP_SELF?razd=main>Вернутся<br>";
}
else
{
exit("$que<br>".mysql_error());
}
?>
|
Что-нибудь дополнительно выводится? | |
|
|
|
|
|
|
|
для: Alessandro
(14.03.2006 в 19:28)
| | вам надо определиться - где данные, которые надо менять, а где идентификатор записи (указатель, в какой именно строке надо менять указанные поля).
вам написали условие where familia='$familia' and name='$name' - это и есть идентификатор, с помощью которого мы указываем, в какой строке (в той, где есть именно эта фамилия и именно это имя) надо сделать update, т.е. обновить данные.
поэтому после where familia='$familia' and name='$name' не надо писать все остальные поля. а сами эти параметры, имя и фамилия, надо передать с помощью скрытых полей (type=hidden).
если в полях строковые значения (фамилия, имя), их нужно заключать в кавычки. попробуйте так.
$que= "UPDATE zar SET
jan=".$jan.",
fev=".$fev.",
mart=".$mart.",
apr=".$apr.",
may=".$may.",
ijn=".$ijn.",
ijl=".$ijl.",
avg=".$avg.",
sent=".$sent.",
oct=".$oct.",
nov=".$nov.",
dec=".$dec."
WHERE familiya = '".$familiya."' and name ='".$name."'
|
| |
|
|
|
|
|
|
|
для: elenaki
(14.03.2006 в 20:08)
| | >вам написали условие where familia='$familia' and
>name='$name' - это и есть идентификатор, с помощью которого
>мы указываем, в какой строке (в той, где есть именно эта
>фамилия и именно это имя) надо сделать update, т.е. обновить
>данные.
Вот я выше написал что мне необходимо изменять все данные Фамилию - Ну вдруг не так забил при добавлении, name - ну вообще-то это название объекта где работает рабочий. Ну и соответсвенно его зарплату также нужно изменять.
> а сами эти параметры, имя и
>фамилия, надо передать с помощью скрытых полей
>(type=hidden).
Вот это можно поподробнее как передать данные из
в
Если передавать вот так $name = $_POST['name'];
то об этом я написал уже выше - ошибка | |
|
|
|
|
|
|
|
для: Alessandro
(14.03.2006 в 20:33)
| | 1. в форме указан method="post"?
2. если фамилию и name тоже можно менять, то нужно определить другой идентификатор. обычно делают индескное поле id с типом INT и autoincrement, он сам увеличивается с каждой новой записью.
3. id надо сначала вывести в форме в скрытом поле <input type=hidden name=id value="<?=$id?>">, а потом в запросе в условии Where id=$id (тут кавычки не нужны, потому что тип - число)
4. попробовать перед выполнением запроса вывести его на экран и посмотреть, что там.
5. если все-таки переменные, указанные в полях формы не выводятся... то с этого надо начинать. сначала добиться, чтобы правильно передавались переменные, а потом уже пытаться вставить их в запрос и выполнить запрос. | |
|
|
|
|
|
|
|
для: elenaki
(14.03.2006 в 20:50)
| | Так ребята переменные из
сюда
ПЕРЕДАЮТСЯ, причем передаются именно обновленные т.е если зарплата была 0, а я поставил 6000 то переменная выводится как 6000. Тут все нормально. Теперь надо грамотно занести из в базу данных
Давайте сделаем чтобы name нельзя было менять какой будет код запроса ?
Блин еще раз извиняюсь что напрягаю вас своими вопросами, но не получается никак запрос
if($submit)
{
$familiya = $_POST['familiya'];
$name = $_POST['name'];
$jan = $_POST['jan'];
$fev = $_POST['fev'];
$mart = $_POST['mart'];
$apr = $_POST['apr'];
$may = $_POST['may'];
$ijn = $_POST['ijn'];
$ijl = $_POST['ijl'];
$avg = $_POST['avg'];
$sent = $_POST['sent'];
$oct = $_POST['oct'];
$nov = $_POST['nov'];
$dec = $_POST['dec'];
....
}
|
т.е приходят те переменные которые уже исправлены, просто мне нужно эти переменные $familiya, $name,....,$dec поставить вместо старых в таблице zar. | |
|
|
|
|
|
|
|
для: Alessandro
(14.03.2006 в 20:58)
| |
$que= "UPDATE zar SET "
."jan=$jan,"
."fev=$fev,"
."mart=$mart,"
."apr=$apr,"
."may=$may,"
."ijn=$ijn,"
."ijl=$ijl,"
."avg=$avg,"
."sent=$sent,"
."oct=$oct,"
."nov=$nov,"
."dec=$dec "
."WHERE name ='$name'
|
| |
|
|
|
|
|
|
|
для: elenaki
(14.03.2006 в 21:14)
| | У меня сейчас вот такая картина
if($submit)
{
$familiya = $_POST['familiya'];
$name = $_POST['name'];
$jan = $_POST['jan'];
$fev = $_POST['fev'];
$mart = $_POST['mart'];
$apr = $_POST['apr'];
$may = $_POST['may'];
$ijn = $_POST['ijn'];
$ijl = $_POST['ijl'];
$avg = $_POST['avg'];
$sent = $_POST['sent'];
$oct = $_POST['oct'];
$nov = $_POST['nov'];
$dec = $_POST['dec'];
$que= "UPDATE zar SET "
."jan=$jan,"
."fev=$fev,"
."mart=$mart,"
."apr=$apr,"
."may=$may,"
."ijn=$ijn,"
."ijl=$ijl,"
."avg=$avg,"
."sent=$sent,"
."oct=$oct,"
."nov=$nov,"
."dec=$dec "
."WHERE name ='$name'";
$resu = mysql_query($que);
if($resu)
{
echo "Объект был успешно обновлен.<br><br>";
echo "<a href=$PHP_SELF?razd=main>Вернутся<br>";
}
echo("".$name."");
echo("".$avg."");
}
|
Запрос не срабатывает ,однако если я изменил допустим зарплату за август то здесь она выводится уже измененной
Наверно что-то все-таки с запросом на обновление не так ????
А то что значения yan, fev,mart,....,dec в таблице float никак на запрос не влияют ? | |
|
|
|
|
|
|
|
для: Alessandro
(14.03.2006 в 21:27)
| | переменная name точно передается? попробуйте вывести запрос на экран echo $que; | |
|
|
|
|
|
|
|
для: elenaki
(14.03.2006 в 21:37)
| |
echo("".$name."");
echo("".$avg."");
echo $que;
|
Вот такая картина - все верно 5000 это я уже обновленную зарплату поставил была 0 у всех месяцев.
Ново-Переделкино5000UPDATE zar SET jan=5000,fev=5000,mart=5000,apr=5000,may=5000,ijn=5000,ijl=5000,avg=5000,sent=5000,oct=5000,nov=5000,dec=5000 WHERE name ='Ново-Переделкино'
Почему он не сохраняет ??? | |
|
|
|
|
|
|
|
для: Alessandro
(14.03.2006 в 21:44)
| | скорее всего конфликт возникает из-за кириллицы(не находится нужная строка). попробуйте все-таки завести числовой индекс и по нему отбирать строки. мы тут недавно бились с поиском по словарю Даля - тоже из-за кириллицы ерунда получалась. или в таком виде попробуйте (name надо сделать индексом fulltext):
WHERE MATCH (name) AGAINST ('$name') | |
|
|
|
|
|
|
|
для: elenaki
(14.03.2006 в 21:46)
| | Сделал как вы посоветовали добавил id и выполнил запрос по нему
$que= "UPDATE zar SET "
."jan=$jan,"
."fev=$fev,"
."mart=$mart,"
."apr=$apr,"
."may=$may,"
."ijn=$ijn,"
."ijl=$ijl,"
."avg=$avg,"
."sent=$sent,"
."oct=$oct,"
."nov=$nov,"
."dec=$dec "
."WHERE id=$id";
|
При коде
Выдает UPDATE zar SET jan=1000,fev=3000,mart=6000,apr=0,may=0,ijn=0,ijl=0,avg=0,sent=0,oct=0,nov=0,dec=0 WHERE id=14
Числа 1000, 3000, 6000 вводил я а id не меняется и все равно ничего не сохраняется. (((
Не срабатывает даже вот такой запрос
$que= "UPDATE zar SET
jan=10000
where id=16";
|
| |
|
|
|
|
|
|
|
для: Alessandro
(14.03.2006 в 23:49)
| | добавьте вот это. надо посмотреть, что отвечает MySQL
$resu = mysql_query($que) or die(mysql_error()); | |
|
|
|
|
|
|
|
для: elenaki
(15.03.2006 в 09:34)
| | выдает вот такую ошибку:
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 'dec=0 WHERE id=16' at line 1
Запрос выглядит также
$que= "UPDATE zar SET "
."jan=$jan,"
."fev=$fev,"
."mart=$mart,"
."apr=$apr,"
."may=$may,"
."ijn=$ijn,"
."ijl=$ijl,"
."avg=$avg,"
."sent=$sent,"
."oct=$oct,"
."nov=$nov,"
."dec=$dec "
." WHERE id=$id";
|
| |
|
|
|
|
|
|
|
для: Alessandro
(15.03.2006 в 12:16)
| | тaк, все понятно! ругается на имя dec! это зарезервированное слово. переименуйте поле.
сделайте его ddec или как-то еще. не забудьте изменить имя поля в запросе. должно получиться! | |
|
|
|
|
|
|
|
для: elenaki
(15.03.2006 в 12:22)
| |
."nov=$nov,"
."'dec'=$dec "
." WHERE id=$id";
| ? | |
|
|
|
|
|
|
|
для: elenaki
(15.03.2006 в 12:22)
| | или просто заключить его в косые одинарные кавычки. но переименовать, конечно, надежнее. | |
|
|
|
|
|
|
|
для: Loki
(15.03.2006 в 12:29)
| | Косые на этом форуме не ввести. Вот они - последствия крестовых походов на кавычки в параметрах форм и БД.
Переименовать, переименовать.... (ворча)
А кто сказал, что у автора вопроса есть право вносить изменения в схему БД? | |
|
|
|
|
|
|
|
для: Trianon
(15.03.2006 в 12:41)
| | Я так и сказал:) | |
|
|
|
|
|
|
|
для: Loki
(15.03.2006 в 13:48)
| | К счастью я имею право вносить изменения в базу данных. Вы бы мне объяснили как же замутить такой цикл чтобы он по очереди передавал измененные данные через POST а далее их перезаписывал. | |
|
|
|
|
|
|
|
для: elenaki
(15.03.2006 в 12:22)
| | Все ПОЛУЧИЛОСЬ. Работает. Блин но есть проблемка если после поиска он выводит не 1 работника а более то изменяет зарплату он только у последнего рабочего остальные данные не передаются можно как-то это иправить или мне надо будет сделать чтобы выводился только 1 работник ??? | |
|
|
|
|
|
|
|
для: Alessandro
(15.03.2006 в 12:41)
| | редактировать лучше по одному. а если вы все-таки хотите всех сразу, то надо организовать цикл и обновлять базу в цикле. | |
|
|
|
|
|
|
|
для: elenaki
(15.03.2006 в 12:49)
| | Ладно я подумаю как лучше сделать. БОЛЬШОЕ СПАСИБО ВСЕМ КТО ПОМОГАЛ, ОЧЕНЬ ПОМОГЛИ | |
|
|
|
|