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

Форум MySQL

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

 

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

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

тема: Редактирование данных
 
 автор: Alessandro   (14.03.2006 в 18:36)   письмо автору
 
 

Ребята, помогите написать запрос на обновление данных:
(только не ругайтесь на меня )))))

Есть вот такие окна где я редактирую данные
Например зарплата за январь. При выборе различных фамилий ранее выдается соответстующая зарплата за январь (это все работает).

<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), т.е все они должны обновится после нажатия на кнопку Обновить.

Заранее, Спасибо !!!!

   
 
 автор: Trianon   (14.03.2006 в 18:52)   письмо автору
 
   для: Alessandro   (14.03.2006 в 18:36)
 

<?
mysql_query
("UPDATE table SET "
."jan=$jan,"
....
.
"nov=$nov,"
."dec=$dec "
."WHERE familiya = '$familiya' and $name = '$name' ");
?>

Если не вдаваться в подробности защиты, то как-то так.

   
 
 автор: Alessandro   (14.03.2006 в 19:28)   письмо автору
 
   для: 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>";
     
                                                  } 
}


То он ничего не выводит ((( Почему так ???

   
 
 автор: Trianon   (14.03.2006 в 20:02)   письмо автору
 
   для: 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 сам данные не выводит.

   
 
 автор: Alessandro   (14.03.2006 в 20:19)   письмо автору
 
   для: 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>";
        
                                                  } 


А у меня вообще пусто т.е запрос не сработал

   
 
 автор: cheops   (14.03.2006 в 22:15)   письмо автору
 
   для: 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());
  }
?>

Что-нибудь дополнительно выводится?

   
 
 автор: elenaki   (14.03.2006 в 20:08)   письмо автору
 
   для: 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."' 

   
 
 автор: Alessandro   (14.03.2006 в 20:33)   письмо автору
 
   для: elenaki   (14.03.2006 в 20:08)
 

>вам написали условие where familia='$familia' and
>name='$name' - это и есть идентификатор, с помощью которого
>мы указываем, в какой строке (в той, где есть именно эта
>фамилия и именно это имя) надо сделать update, т.е. обновить
>данные.

Вот я выше написал что мне необходимо изменять все данные Фамилию - Ну вдруг не так забил при добавлении, name - ну вообще-то это название объекта где работает рабочий. Ну и соответсвенно его зарплату также нужно изменять.

> а сами эти параметры, имя и
>фамилия, надо передать с помощью скрытых полей
>(type=hidden).

Вот это можно поподробнее как передать данные из

if(empty($submit))
    {
                     }
в

 if($submit)
{
}

Если передавать вот так $name = $_POST['name'];
то об этом я написал уже выше - ошибка

   
 
 автор: elenaki   (14.03.2006 в 20:50)   письмо автору
 
   для: 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. если все-таки переменные, указанные в полях формы не выводятся... то с этого надо начинать. сначала добиться, чтобы правильно передавались переменные, а потом уже пытаться вставить их в запрос и выполнить запрос.

   
 
 автор: Alessandro   (14.03.2006 в 20:58)   письмо автору
 
   для: elenaki   (14.03.2006 в 20:50)
 

Так ребята переменные из

if(empty($submit))
    {
                      }

сюда

if($submit)
{
}


ПЕРЕДАЮТСЯ, причем передаются именно обновленные т.е если зарплата была 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.

   
 
 автор: elenaki   (14.03.2006 в 21:14)   письмо автору
 
   для: 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' 

   
 
 автор: Alessandro   (14.03.2006 в 21:27)   письмо автору
 
   для: 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."");     
}


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


echo("".$avg."");  


Наверно что-то все-таки с запросом на обновление не так ????
А то что значения yan, fev,mart,....,dec в таблице float никак на запрос не влияют ?

   
 
 автор: elenaki   (14.03.2006 в 21:37)   письмо автору
 
   для: Alessandro   (14.03.2006 в 21:27)
 

переменная name точно передается? попробуйте вывести запрос на экран echo $que;

   
 
 автор: Alessandro   (14.03.2006 в 21:44)   письмо автору
 
   для: 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 ='Ново-Переделкино'

Почему он не сохраняет ???

   
 
 автор: elenaki   (14.03.2006 в 21:46)   письмо автору
 
   для: Alessandro   (14.03.2006 в 21:44)
 

скорее всего конфликт возникает из-за кириллицы(не находится нужная строка). попробуйте все-таки завести числовой индекс и по нему отбирать строки. мы тут недавно бились с поиском по словарю Даля - тоже из-за кириллицы ерунда получалась. или в таком виде попробуйте (name надо сделать индексом fulltext):
WHERE MATCH (name) AGAINST ('$name')

   
 
 автор: Alessandro   (14.03.2006 в 23:49)   письмо автору
 
   для: 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";


При коде

echo $que; 

Выдает 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";

   
 
 автор: elenaki   (15.03.2006 в 09:34)   письмо автору
 
   для: Alessandro   (14.03.2006 в 23:49)
 

добавьте вот это. надо посмотреть, что отвечает MySQL
$resu = mysql_query($que) or die(mysql_error());

   
 
 автор: Alessandro   (15.03.2006 в 12:16)   письмо автору
 
   для: 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";

   
 
 автор: elenaki   (15.03.2006 в 12:22)   письмо автору
 
   для: Alessandro   (15.03.2006 в 12:16)
 

тaк, все понятно! ругается на имя dec! это зарезервированное слово. переименуйте поле.
сделайте его ddec или как-то еще. не забудьте изменить имя поля в запросе. должно получиться!

   
 
 автор: Trianon   (15.03.2006 в 12:28)   письмо автору
 
   для: elenaki   (15.03.2006 в 12:22)
 


."nov=$nov," 
."'dec'=$dec " 
." WHERE id=$id"; 
?

   
 
 автор: Loki   (15.03.2006 в 12:29)   письмо автору
 
   для: elenaki   (15.03.2006 в 12:22)
 

или просто заключить его в косые одинарные кавычки. но переименовать, конечно, надежнее.

   
 
 автор: Trianon   (15.03.2006 в 12:41)   письмо автору
 
   для: Loki   (15.03.2006 в 12:29)
 

Косые на этом форуме не ввести. Вот они - последствия крестовых походов на кавычки в параметрах форм и БД.
Переименовать, переименовать.... (ворча)
А кто сказал, что у автора вопроса есть право вносить изменения в схему БД?

   
 
 автор: Loki   (15.03.2006 в 13:48)   письмо автору
 
   для: Trianon   (15.03.2006 в 12:41)
 

Я так и сказал:)

   
 
 автор: Alessandro   (16.03.2006 в 18:33)   письмо автору
 
   для: Loki   (15.03.2006 в 13:48)
 

К счастью я имею право вносить изменения в базу данных. Вы бы мне объяснили как же замутить такой цикл чтобы он по очереди передавал измененные данные через POST а далее их перезаписывал.

   
 
 автор: Alessandro   (15.03.2006 в 12:41)   письмо автору
 
   для: elenaki   (15.03.2006 в 12:22)
 

Все ПОЛУЧИЛОСЬ. Работает. Блин но есть проблемка если после поиска он выводит не 1 работника а более то изменяет зарплату он только у последнего рабочего остальные данные не передаются можно как-то это иправить или мне надо будет сделать чтобы выводился только 1 работник ???

   
 
 автор: elenaki   (15.03.2006 в 12:49)   письмо автору
 
   для: Alessandro   (15.03.2006 в 12:41)
 

редактировать лучше по одному. а если вы все-таки хотите всех сразу, то надо организовать цикл и обновлять базу в цикле.

   
 
 автор: Alessandro   (15.03.2006 в 12:56)   письмо автору
 
   для: elenaki   (15.03.2006 в 12:49)
 

Ладно я подумаю как лучше сделать. БОЛЬШОЕ СПАСИБО ВСЕМ КТО ПОМОГАЛ, ОЧЕНЬ ПОМОГЛИ

   
Rambler's Top100
вверх

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