За последние 24 часа нас посетили 32943 программиста и 1756 роботов. Сейчас ищут 829 программистов ...

Кнопка скопировать.

Тема в разделе "PHP для новичков", создана пользователем DKelt, 21 апр 2012.

  1. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Здравствуйте, у меня вот такой вопрос:
    есть бд, в ней есть таблица вида:
    №|Докладчик|Вопросы|Проверяющий|Год
    Нужно сделать кнопку "Скопировать на следующий год", при этом во всей таблице поле год должно меняться на следующий (соответственно: был 2012 - стал 2013), а предыдущий вариант этой таблицы должен отправляться в архив.
    Собственно вопрос - как это сделать?
    С тем как поменять год во всей таблице понятно, не понятно как отправить в архив и как вообще лучше реализовать такой архив?
     
  2. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Делаешь такую-же табличку архив:
    №|Докладчик|Вопросы|Проверяющий|Год
    Кнопкой "скопировать" извлекаешь данные из таблицы с докладами, отправляешь без изменений в табличку с архивом и загоняешь обратно в табличку с докладами, изменив при этом год.

    Или же в этой табличке с докладами сделай еще одно поле "|Архивный год". Кнопкой "скопировать" меняешь "Год", и в "Архивный год" отправляешь предыдущий год. А когда на сайте выбираешь из этой таблички данные - проверяешь, существует ли у определенной записи "Архивный год". Если да - значит эта запись "заархивированна"
     
  3. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    А Можно ли просто создать еще одну бд с названием, ну например "Архив", и, чтобы эта таблица создавалась там с тем годом, с которым она была первоначально?)
    Или вы это и имели ввиду?)
     
  4. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Мы это и имели ввиду.
     
  5. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Хмм, а как в коде это примерно реализовать?
    Ну например, была у нас табличка Work_Plan, мы ее перенесли и в бд Архив должна появится такая же заполненная табличка с именем Work_Plan_2012.
    Просто я только начинаю "программировать" на php и не знаю как это реализовать
     
  6. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Не, подожди. Что-то ты меня путаешь. Зачем еще одна бдэ? В той-же бде делай архив.
     
  7. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Хмм, ну а как тогда сделать в той же бд такую же табличку, но с именем Work_Plan_2012, и чтобы в этой табличке менялся при этом год)
     
  8. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Ну, через phpMyAdmin можно. Он на любом хостинге есть.
     
  9. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Через PhpMyAdmin я могу создать таблицу это понятно, но мне нужно чтобы у меня при нажатии на кнопку создавалась таблица вида: Имя_Таблицы_(архивный год), при этом я не знаю сколько лет(ну в теории) будут использовать это приложение, то есть создать заранее таблицы на каждый год через MyAdmin не вариант)
     
  10. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Зачем надо создавать таблицы на каждый год? Одну таблицу с текущими докладами, другую - архив.
     
  11. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    НУ да, логично, если там будет год, извините за тупку. А как программно сделать так чтобы все туда переносилось?
     
  12. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Ну базу данных можно создать через phpMyAdmin, опять же. А переносить так:

    Код (PHP):
    1. if(кнопочка "скопировать записть с номером id" нажата){
    2.     SELECT * FROM табличка с докладами WHERE id=номер доклада
    3.  
    4.     
    5.     INSERT INTO архив (Докладчик, Вопросы, Проверяющий, Год) VALUES (значения извлеченные из таблички с докладами);
    6.  
    7.     UPDATE табличка с докладами SET год=2013 WHERE id=номер доклада
    8.  
    9. }  
     
  13. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Спасибо большое, примерно понял)
     
  14. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Вообще, это наверное как-то одним запросом можно сделать, но я не шарю.
     
  15. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    INSERT INTO `table_1` (`field_1_1`, `field_1_2`, `field_1_3`) SELECT (`field_2_1`, `field_2_2`, `field_2_3`) FROM `table_2` WHERE (УСЛОВИЯ) И Т.Д.
     
  16. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Попробовал сделать, как-то я неправильно составил запрос + косяк где-то с кнопкой, т.к. я новичок, пока не смог разобраться. При нажатии на кнопку ничего не происходит, код выглядит вот так:
    Код (PHP):
    1. <html>
    2. <head>
    3. <title></title>
    4.  
    5. <link href="style.css" rel="stylesheet" type="text/css" />
    6. </head>
    7.  <div id="container">
    8.  <?
    9. include "Header.html";
    10. include "SideBar.html";
    11.  ?>
    12.  <body bgcolor="#FFFFFF" text="#000000">
    13.  
    14. <center mm_ta_src="dede">
    15. <h2>Подготовка новых лекционных курсов</h2>
    16. </center>
    17. <?
    18. /* Соединяемся с базой данных */
    19. $hostname = "localhost"; // название/путь сервера, с MySQL
    20. $username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
    21. $password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
    22. $dbName = "Diplom"; // название базы данных
    23.  
    24. /* Таблица MySQL, в которой хранятся данные */
    25. $table = "Podgotovka_Lekc_Kursov1";
    26. $table1 = "Podgotovka_Lekc_Kursov1_archiev";
    27.  
    28. /* Создаем соединение */
    29. mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
    30.  
    31.  
    32.  // в какой кодировке получать данные от клиента
    33. @mysql_query('set character_set_client="utf8"');
    34.  
    35. // в какой кодировке получать данные от БД для вывода клиенту
    36. @mysql_query('set character_set_results="utf8"');
    37.  
    38. // кодировка в которой будут посылаться служебные команды для сервера
    39. @mysql_query('set collation_connection="utf8_general_ci"');
    40.  
    41. /* Выбираем базу данных. Если произойдет ошибка - вывести ее */
    42. mysql_select_db($dbName) or die (mysql_error());
    43.  
    44. /* Если была нажата кнопка редактирования, вносим изменения */
    45. if(@$_REQUEST['copy']) {
    46.     
    47. $query = "INSERT INTO $table2 ( `FIO`, `CourseName`, `Hours`, `Semestr`, `Year`) SELECT (`FIO`, `CourseName`, `Hours`, `Semestr`, `Year`) FROM $table
    48. UPDATE  $table SET Year = Year+1";
    49. /* Выполняем запрос. Если произойдет ошибка - вывести ее. */
    50. mysql_query($query) or die (mysql_error());
    51. }
    52.  
    53. /* Заносим в переменную $res всю базу данных */
    54. $query = "SELECT * FROM $table";
    55. /* Выполняем запрос. Если произойдет ошибка - вывести ее. */
    56. $res = mysql_query($query) or die(mysql_error());
    57. /* Узнаем количество записей в базе данных */
    58. $row = mysql_num_rows($res);
    59.  
    60. if($query)
    61. {
    62.     // таблица и заголовок
    63.  echo "<table border=1>";
    64.   echo "<tr><td><b>ФИО</b></td><td><b>Наименование Курсов</b></td><td><b>Объем часов</b></td><td><b>Семестр</b></td><td><b>Год</b></td></tr>";
    65.    // Так как запрос возвращает несколько строк, применяем цикл
    66. while($row=mysql_fetch_array($res))// берем результаты из каждой строки
    67. {    echo "<tr><td>".$row['FIO']." &nbsp </td>
    68.     <td>".$row['CourseName']." </td><td>".  
    69.     $row['Hours']." </td><td>".$row['Semestr']." </td><td>".$row['Year']." </td></tr>";
    70. }
    71.  echo "</table>";
    72. }
    73. else
    74. {
    75.   echo "<p><b>Error: ".mysql_error()."</b><p>";
    76.   exit();
    77. }
    78. ?>
    79. <form action="3_edit.php" method="post" name="edit_form">
    80.  
    81.    <input type="submit" class="buttons" value="Редактировать" />
    82.  
    83. </form>
    84. <input type="submit" class="button"  name="copy" value= "Скопировать базу на следующий год" />
    85. <?
    86.  
    87. include "Footer.html";
    88. ?>
    89. </div>
    90. </body>
    91.  
    92. </html>
    Если кто что подскажет - буду благодарен, пока сижу - разбираюсь)
     
  17. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Код (PHP):
    1. $query = "INSERT INTO $table2 ( `FIO`, `CourseName`, `Hours`, `Semestr`, `Year`) SELECT (`FIO`, `CourseName`, `Hours`, `Semestr`, `Year` + 1) FROM $table"; 
     
  18. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Сделал, но все равно не пашет, что-то с кнопкой не так)
     
  19. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Всем спасибо, получилось) сделал через
    Код (PHP):
    1. INSERT INTO $table1 SELECT * FROM $table
     
  20. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Собственно оказалось, что не работает, точнее работает но 1 раз так как потом пишет что ID повторяется. Вопрос: как сделать так чтобы копировалось все кроме ID, а ID давался новый каждой записи, даже если они повторяются.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вместо звездочки укажи поля через запятую видимо
     
  22. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Код (PHP):
    1. $query = "INSERT INTO $table2 ( `FIO`, `CourseName`, `Hours`, `Semestr`, `Year`) SELECT (`FIO`, `CourseName`, `Hours`, `Semestr`, `Year`) FROM $table"; 
    Вот так вот не работает
     
  23. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    как правильно этот запрос написать?
     
  24. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Что то странный запрос у тебя попробуй убрать скобки
    SELECT `FIO`, `CourseName`, `Hours`, `Semestr`, `Year`
     
  25. DKelt

    DKelt Активный пользователь

    С нами с:
    21 апр 2012
    Сообщения:
    51
    Симпатии:
    0
    Огромное Спасибо, помогло) буду знать)