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

Форум PHP

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

 

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

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

тема: Вопрос по MySQL: удаление нескольких записей
 
 автор: Artemy   (05.10.2004 в 11:23)   письмо автору
 
 

Добрый День, у меня такой вопрос, можно ли в одном запросе удалить строчку из одной таблици и записать эту же удаленную строчку в другую таблицу.
Таблици находятся о БД.

   
 
 автор: cheops   (05.10.2004 в 11:52)   письмо автору
 
   для: Artemy   (05.10.2004 в 11:23)
 

Нет в один не получится.

   
 
 автор: J.Lex   (05.10.2004 в 11:52)   письмо автору
 
   для: Artemy   (05.10.2004 в 11:23)
 

для начала ты эту строчку вытаскиваешь по запросу заносишь ее в другу таблицу,а после удаляешь ее с прошлой таблицы !

   
 
 автор: Artemy   (05.10.2004 в 12:17)   письмо автору
 
   для: Artemy   (05.10.2004 в 11:23)
 

У меня еще один вопрос, удаление происходит по ссылке
<a class=prakb href=admin/delrec.php?id=".$triall['id']." title='Продать'>Продать</a>

, если помните я Вас уже мучил!
но мне еще надо передовать и еще некоторые переменные например
$model=".$triall['model']."
и т.д.
Как мне это сделать, т.е. как будет выглядеть ссылка?
Или можно передать только id в виде первичного ключа и только задав id можно скопировать все строчку в другую таблицу?

   
 
 автор: cheops   (05.10.2004 в 12:25)   письмо автору
 
   для: Artemy   (05.10.2004 в 12:17)
 

Можно передать любое число параметров, для этого после первого параметра в ссылке следует добавить знак амперсанда & и добавить второй параметр:
<?php
echo "<a class=prakb href=admin/delrec.php?id=".$triall['id']."&model=".$triall['model']." title='Продать'>Продать</a>";
?>

   
 
 автор: cheops   (05.10.2004 в 12:28)   письмо автору
 
   для: cheops   (05.10.2004 в 12:25)
 

Правда, параметр model должен содержать только допустимые для URL символы, и если содержаться пробелы или русские буквы следует использовать функцию urlencode() для перевода параметра в безопасный режим, а в скрипте получателе urldecode():
<?php 
echo "<a class=prakb href=admin/delrec.php?id=".$triall['id']."&model=".urlencode($triall['model'])." title='Продать'>Продать</a>";
?>

   
 
 автор: Artemy   (07.10.2004 в 12:53)   письмо автору
 
   для: cheops   (05.10.2004 в 12:28)
 

У меня опять проблема, значения передаются по ссылке, т.е. если перед кодом вставить
echo ("$number");

то выводится значение переменной $number, переданной по ссылке,

а если это вставить в середине кода, примерно так

      
<?php 
      
echo ("Номер $number"); // здесь выводится
include "../config.php"
$action $_POST["action"]; 
if(isset(
$_GET["id"])) $id $_GET["id"]; 
if(isset(
$_POST["id"])) $id $_POST["id"]; 
if (!empty(
$action)) 

  
$user_pass md5($passwd);
  
$pass mysql_query("SELECT * FROM users;");
  if (
$pass)
    {
    
$users mysql_fetch_array($pass);
    if (
$users['password'] == $user_pass && $users['id_user'] == $id_user)
          { 
        echo (
"Номер $number"); // а вот если она здесь стоит, то не выводиться
          
$query "DELETE FROM sklad WHERE id=".$id
           if(
mysql_query($query)) 
                  { 
                print 
"<HTML><HEAD>\n"
                 print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=../index.php'>\n"
                   print 
"</HEAD></HTML>\n"
                 } 
             else
                 { 
                   echo (
"<div align=center><font color=red>Ошибка при обращении к складу!</font></div>"); 
                 } 
          } 
     else
          {
            echo (
"<div align=center><font color=red>Неправельная пара имени или пароля!</font></div>");
          }
    }
  else
    {
      echo (
"<div align=center><font color=red>Ошибка при обращении к таблице пользователей!</font></div>");
    }

?>


то выводиться пустое значение!

Как сделать так что бы переменная работала и в середине кода?

   
 
 автор: cheops   (07.10.2004 в 13:43)   письмо автору
 
   для: Artemy   (07.10.2004 в 12:53)
 

Хм... такого не должно бы быть, если только в config.php не происходит переопределение переменной $number - попробуйте вместо $number использовать соответствующий элемент суперглобального массива:
<?php
  
echo ("Номер ".$_GET['number']); 
?>


PS Хотя такой затык иногда случается, когда используется очень много вложенных скобок, свзан скорее всего со сбоями PHP-интерпретатора.

   
 
 автор: J.Lex   (05.10.2004 в 12:26)   письмо автору
 
   для: Artemy   (05.10.2004 в 12:17)
 

хеопс блин быстрый какой!:)тока начал писать ответ он уже написал!:))

   
 
 автор: cheops   (05.10.2004 в 12:29)   письмо автору
 
   для: J.Lex   (05.10.2004 в 12:26)
 

У меня скорость набора 300 знаков в минуту в обеих раскладках :)))

   
 
 автор: Artemy   (05.10.2004 в 12:38)   письмо автору
 
   для: cheops   (05.10.2004 в 12:29)
 

Насмешили!
А можно например если использовать радио кнопку передовать сразу два или несколько значений id ?
Как должен выглядеть запрос для удаления 2 и более строчек из таблицы, в книге описано несколько случев, когда id_autors > 10 или зфыыц = '123', но меня интересует другой пример, когда два разных значения id=51 и id=76 ?

   
 
 автор: J.Lex   (05.10.2004 в 13:08)   письмо автору
 
   для: Artemy   (05.10.2004 в 12:38)
 

если через форму то можно через циклы while ili for

   
 
 автор: cheops   (05.10.2004 в 13:12)   письмо автору
 
   для: Artemy   (05.10.2004 в 12:38)
 

Здесь тогда понадобятся не радио-кнопки (так как можно отметить только одно значение), а группа флажков. Для удобства значения для этих флажков лучше передавать массивом. Так HTML-форма index.php может содержащая 7 флажков
<form action=handler.php method=post>
  <input type='checkbox' name='type[]' value='1'>Первый флажок<br>  
  <input type='checkbox' name='type[]' value='2'>Второй флажок<br>  
  <input type='checkbox' name='type[]' value='3'>Третий флажок<br>  
  <input type='checkbox' name='type[]' value='4'>Четвёртый флажок<br>  
  <input type='checkbox' name='type[]' value='5'>Пятый флажок<br>  
  <input type='checkbox' name='type[]' value='6'>Шестой флажок<br>  
  <input type='checkbox' name='type[]' value='7'>Седьмой флажок<br>  
  <input type=submit>
</form>

имеет обработчик handler.php:
<?php
  
// Удалить сразу несколько записей можно при
  // помощи запроса "DELETE FROM base WHERE id IN (1,3,5,7)"
  // Получаем список отмеченных флажков
  
$type $_POST['type'];
  if(!empty(
$type))
  {
    
// Начинаем формировать переменную, содержащую этот список
    // в формате "(3,5,6,7)"
    
$query "(";
    foreach(
$type as $val$query .= "$val,";
    
// Удаляем последнюю запятую, заменяя её закрывающей скобкой )
    
$query substr($query0strlen($query) - 1).")";
    
// Завершаем формирование SQL-запроса на удаление
    
$query "DELETE FROM base WHERE id IN ".$query;
    
// Выполняем запрос
    
if(!mysql_query($query))
    {
      echo 
mysql_error()."<br>";
      echo 
$query."<br>";
    }
  }
?>


PS Только вместо value-значений следует подставлять реальные значения первичного ключа и HTML-форму генерировать в цикле.

   
 
 автор: Artemy   (08.10.2004 в 15:46)   письмо автору
 
   для: cheops   (05.10.2004 в 13:12)
 

А как будет выглядет код, для вывода нескольких записей?
типа того

$query = "SELECT * FROM base WHERE id=71,83,85 ";


Возможен ли такой запрос?

   
 
 автор: glsv (Дизайнер)   (08.10.2004 в 16:27)   письмо автору
 
   для: Artemy   (08.10.2004 в 15:46)
 


$query = "SELECT * FROM base WHERE id=71 and id=83 and id=85"; 


PS: Мой вариант неверен. Правильный смотри у Artem S.

   
 
 автор: Artem S.   (08.10.2004 в 17:13)   письмо автору
 
   для: glsv (Дизайнер)   (08.10.2004 в 16:27)
 

возможен такой вариант

$query = "SELECT * FROM base WHERE id=71 or id=83 or id=85"; 

Все зависит от того, чего ты хочешь

P.S. Дизайнер а твой запрос не правильный =)) от такого запроса ничего не получишь, так как id не может иметь несколько значений, но может быть я ошибаюсь =(

   
 
 автор: glsv (Дизайнер)   (08.10.2004 в 20:34)   письмо автору
 
   для: Artem S.   (08.10.2004 в 17:13)
 

>Дизайнер а твой запрос не правильный =))
Да, извиняюсь, сглупил :)

   
 
 автор: Artemy   (08.10.2004 в 17:15)   письмо автору
 
   для: cheops   (05.10.2004 в 13:12)
 

А почему стоит только заключить в код


if(!empty($action))
{
$type = $_POST['type']; 
  if(!empty($type)) 
  { 
    // Начинаем формировать переменную, содержащую этот список 
    // в формате "(3,5,6,7)" 
    $query = "("; 
    foreach($type as $val) $query .= "$val,"; 
    // Удаляем последнюю запятую, заменяя её закрывающей скобкой ) 
    $query = substr($query, 0, strlen($query) - 1).")"; 
    // Завершаем формирование SQL-запроса на удаление 
    $query = "DELETE FROM base WHERE id IN ".$query; 
    // Выполняем запрос 
    if(!mysql_query($query)) 
    { 
      echo mysql_error()."<br>"; 
      echo $query."<br>"; 
    } 
  } 

}


это условие не выполняет, т.е. не удаляет он ничего, ну а если в чистом виде без

if(!empty($action))
{
}

То всё прекрасно работает!

   
 
 автор: cheops   (08.10.2004 в 20:39)   письмо автору
 
   для: Artemy   (08.10.2004 в 17:15)
 

Потому как ни одного управляющего элемена с именем $action в форме (по крайней мере у меня в примере) не определено, в следствии чего переменная остаётся пустой. Вот если к HTML-форме добавить скрытое поле
<input type=hidden name=action value='123'>

то переменная $action примет значение 123.

PS Только здесь смысла делать этого нет, такой приём применяют когда HTML-форма и её обработчик находятся в одном файле.

   
 
 автор: Artemy   (09.10.2004 в 16:42)   письмо автору
 
   для: cheops   (08.10.2004 в 20:39)
 

У меня к форме добавлено это скрытое поле!

   
 
 автор: cheops   (09.10.2004 в 16:49)   письмо автору
 
   для: Artemy   (09.10.2004 в 16:42)
 

Возможно у ваc отключена директива register_globals в php.ini несущая ответственность за преобразование параметров запроса и значений полученных из форм в обычные переменные
register_globals = Off

в целях безопасности, по умолчанию в последних версиях PHP эта директива отключена. Если это так, вместо прямого обращения к перменным следует использовать суперглобальные массивы:
<?php
if(!empty($_POST['action']))
{
}
?>


http://www.softtime.ru/info/articlephp.php?id_article=13

   
 
 автор: Artemy   (12.10.2004 в 12:16)   письмо автору
 
   для: cheops   (09.10.2004 в 16:49)
 

Ну я вроде не дурак, ни чего не понимаю!
В php.ini

regiter_globals = on


поставлено.
В код вставил

$_POST['number']


И всеравно одна и таже песня!

   
 
 автор: cheops   (12.10.2004 в 12:34)   письмо автору
 
   для: Artemy   (12.10.2004 в 12:16)
 

Хм... а архивчик с HTML-формой и её обработчиком здесь не выложите? Я бы с удовольствием порылся в вашем коде - я такие ошибки люблю :)))

   
 
 автор: Artemy   (12.10.2004 в 12:49)   письмо автору
 
   для: cheops   (12.10.2004 в 12:34)
 

Пожалуйста

Это главная, index.php
     
 <form action="delrec.php" method=post> 
<?
  
include "config.php";
  
$ath mysql_query("SELECT * FROM sklad ORDER BY model;");
  if (
$ath)
  {
     echo 
"
     <table style='font-size: 11px;' bordercolor=white width='595' border=1 cellspacing=2 cellpadding=2>
     <tr align=center bgcolor=#ccffcc bordercolor=#ccffcc>
     <td rowspan=2 width=75><b>Модель</b></td>
    <td rowspan=2 width=60><b>Номер<b></td>
    <td colspan=2><b>Исполнение<b></td>
    <td rowspan=2 width=120><b>Дата<br> поступления<b></td>
    <td rowspan=2 width=90><b>Прочие<b></td> 
    <td rowspan=2><b>A<b></td> 
    </tr>
    <tr align=center bgcolor=#ccffcc bordercolor=#ccffcc>
    <td><b>№ платы 018</b></td>
    <td><b>№ платы 016</b></td>
    </tr>
    <tr>
    <td align=right colspan=7><input type=submit class=inp value='Продать'></td>
    </tr>"
;
while(
$triall mysql_fetch_array($ath))
  {
    echo 
"<tr align=center bgcolor=#E2FFE1 bordercolor=#E2FFE1>
    <td align=left height=20><b>"
.$triall['model']."</b></td>
    <td>"
.$triall['number']."</td>
    <td>"
.$triall['plata018']."</td>
    <td>"
.$triall['plata016']."</td>
    <td>"
.$triall['data']."</td>
    <td>"
.$triall['pr']."</td>
    <td><input type='checkbox' name='type[]' value="
.$triall['id']."></td>
    </tr>"
;
  }
  echo 
"<tr>
    <td align=right colspan=7><input type=submit class=inp value='Продать'></td>
    </tr></table>"
;
}
else 
   {
      echo 
"<p><b>Error: ".mysql_error()."</b></p>";
      exit();
   } 
   
?>
   </form>
 


Вот delrecform.php


<?php
include "../config.php";
$action $_POST["action"];
if (!empty(
$action)) 
{     
  
$user_pass md5($passwd);
  
$pass mysql_query("SELECT * FROM users;");
  if (!
$pass)
    {
      echo (
"<div align=center><font color=red>Ошибка при обращении к таблице пользователей!</font></div>");
      exit;
    }
   
$users mysql_fetch_array($pass);
   if (!(
$users['password'] == $user_pass && $users['id_user'] == $id_user))
    { 
      echo (
"<div align=center><font color=red>Неправельная пара имени или пароля!</font></div>");
      exit;
    } 
                   
$type $_POST['type']; 
                   if(!empty(
$type)) 
                       {
                          
$query "("
                          foreach(
$type as $val$query .= "$val,"
                          
$query substr($query0strlen($query) - 1).")"
                          
$query "DELETE FROM sklad WHERE id IN ".$query
                          if(!
mysql_query($query)) 
                               { 
                                echo 
mysql_error()."<br>"
                                echo 
$query."<br>"
                               } 
                          else 
                               {
                                  print 
"<HTML><HEAD>\n"
                                  print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=../index.php'>\n"
                                  print 
"</HEAD></HTML>\n"
                               }
                       } 
                   else
                       {
                          echo (
"Список не получен !");
                          exit;
                       }
}     
?>
<form action=delrec.php method=post> 
<input type=hidden name=action value=post>
        <table width='264' align=center bordercolor=#FFFFFF border=1 cellpadding=1 cellspacing=1>
          <tr> 
         <td width="253" height=11 align=center bordercolor=#006600 style=' color: #009900; font-size: 11px;'> 
         Для того, чтобы подтвердить удаление<br>
 позиции из списка, нужно выбрать своё имя и ввести пароль! 
         </td> 
         </tr>
         <tr>
            <td align="center" bordercolor=#FFFFFF> 
            <select class=inp name=id_user value='<? echo $id_user?>'>
                <option value="">Выберите своё имя</option>
                <option value="">-----------------------------</option>
               <?
                $sel 
mysql_query("select id_user, login from users where type=1;");
                if (
$sel)
                   {
                      while(
$users mysql_fetch_array($sel))
                        {  
                         echo 
"<option value=".$users['id_user'].">".$users['login']."</option>";
                        }
                   }
            
?>
              </select>
              <input class=inp height=11 maxlength=7 name=passwd size=7 type=password value='<? echo $passwd?>'> 
          <input name=id type=hidden value='<? echo $id?>'><input class=inp height=11 type=submit value=Продать>
            </td> 
   </tr> 
</table> 
</form> 

   
 
 автор: cheops   (12.10.2004 в 12:55)   письмо автору
 
   для: Artemy   (12.10.2004 в 12:49)
 

Так ведь в index.php и нет скрытого поля
<input type='hidden' name=action value='action'>


PS Такие здоровые листинги лучше прикреплять в виде файлов.

   
 
 автор: Artemy   (12.10.2004 в 12:58)   письмо автору
 
   для: cheops   (12.10.2004 в 12:55)
 

А он там и не нужен.
Или нужен...
С index.php передаётся несколько значений id на deltec.php, а он их не видет!

   
 
 автор: cheops   (12.10.2004 в 13:01)   письмо автору
 
   для: Artemy   (12.10.2004 в 12:58)
 

Ну... если скрытого поля action не будет, то элемент суперглобального массива $_POST["action"] будет всегда пустым.

   
 
 автор: Artemy   (12.10.2004 в 12:59)   письмо автору
 
   для: cheops   (12.10.2004 в 12:55)
 

Я даже не подумал что так много получиться, прошу прощения!

   
 
 автор: Artemy   (12.10.2004 в 13:02)   письмо автору
 
   для: cheops   (12.10.2004 в 12:55)
 

Да кстати, у меня чего-то MySQL встала, красный цвет показывает, чего делать ума не приложу!
Даже скрипт не могу посмотреть!

   
 
 автор: cheops   (12.10.2004 в 13:15)   письмо автору
 
   для: Artemy   (12.10.2004 в 13:02)
 

А при запуске чего пишет?

PS Под эту проблему лучше отдельную тему завести - эта уже очень длинная.

   
 
 автор: Artemy   (12.10.2004 в 13:42)   письмо автору
 
   для: cheops   (12.10.2004 в 13:15)
 

Это был лаг, у нас сервер чего глючит!

   
 
 автор: denvor   (26.09.2005 в 22:48)   письмо автору
 
   для: cheops   (05.10.2004 в 13:12)
 

не в тему, но...
попытался распечатать этот код из Оперы, так она мен напечатала...чекбоксы с названиями и кнопкой!
Т.е при выводе на печать она интерпретировала html! Хорошо еще, что она php не пытается обрабатывать при печати ;)

   
 
 автор: cheops   (26.09.2005 в 22:59)   письмо автору
 
   для: denvor   (26.09.2005 в 22:48)
 

Кошмар :))) и ведь не придерёшься - браузер - такая работа, HTML - интерпретировать :)))

   
 
 автор: Gannibal   (02.12.2005 в 02:52)
 
   для: cheops   (26.09.2005 в 22:59)
 


<form action=handler.php method=GET>
  <input type='checkbox' name='type[]' value='1'>Первый флажок<br>  
  <input type='checkbox' name='type[]' value='2'>Второй флажок<br>  
  <input type='checkbox' name='type[]' value='3'>Третий флажок<br>  
  <input type='checkbox' name='type[]' value='4'>Четвёртый флажок<br>  
  <input type='checkbox' name='type[]' value='5'>Пятый флажок<br>  
  <input type='checkbox' name='type[]' value='6'>Шестой флажок<br>  
  <input type='checkbox' name='type[]' value='7'>Седьмой флажок<br>  
  <input type=submit>
</form>


luchshe vot tak vot.. net???

$db = mysql_connect($db_server, $db_user, $db_pasw);
mysql_select_db($db_name,$db);

$type = $_GET['type'];
if(!empty($type))
{

foreach($type as $val) mysql_query("DELETE FROM program_mail WHERE dbID = '$val' LIMIT 1");

}

   
Rambler's Top100
вверх

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