Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP]kopiowanie rekordu z głównej tabeli do innej
mov45
post 13.11.2016, 18:51:16
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 20.10.2016

Ostrzeżenie: (0%)
-----


Cześć, jestem tu od niedawna, z PHP mam także od niedawna odczynienia. Chciałem zobaczyć jak można zrobić kopiowanie rekordu z głównej tabeli do innej.

Załóżmy, że główna tabela nazywa się "main_office" a poboczne office1, office2, office3. kolumny w main_office to (id, imie, nazwisko, data_1, status) natomiast w office1,2,3 (id, imie, nazwisko, data_1,).
id jest auto inkrementowane.
Chciałem to zrobić za pomocą "option value" jako wybór office1,2,3 tak, aby po wciśnięciu przycisku przekaż w kolumnie "status" pozostawała informacja do którego office został przekazany rekord.

wiem, że kwerenda powinna być mniej więcej taka
  1. INSERT INTO office1 imie, nazwisko, data_1 SELECT imie, nazwisko, data_1 WERE id=$id


Generalnie to nie wiem jak wstawić tam gdzie jest "office1" w zapytaniu pole wyboru, generalnie co tam wstawić, żeby można było wybrać office1, 2 lub 3. Dodatkowo nie wiem też jak powinien wyglądać kod z czymś takim. Szukałem tutoriali na youtube, ale nic nie mogę sensownego znaleźć.

będę wdzięczny za pomoc

ps. może ktoś z was coś podobnego robił?

Ten post edytował mov45 13.11.2016, 18:52:42
Go to the top of the page
+Quote Post
nospor
post 13.11.2016, 19:19:12
Post #2





Grupa: Moderatorzy
Postów: 36 478
Pomógł: 6302
Dołączył: 27.12.2004




Zapytanie to nic innego jak tekst w php wiec jak to tekst mozesz tam wlozyc kazda zmienna jaka ci sie podoba, w tym i twoja opcje


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mov45
post 15.11.2016, 07:54:11
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 20.10.2016

Ostrzeżenie: (0%)
-----


Dobra to może powiem jaśniej czego nie mogę wykonać

mam plik viewDowykonania.php, który wygląda tak:

  1. <head>
  2. <meta charset="utf8">
  3. <title>Zadania</title>
  4. </head>
  5. <body>
  6. <a href="index.php">Zadania do wykonania</a>
  7. <a href="indexWykonane.php">Zadania wykonane</a>
  8. <a href="indexSzukaj.php">szukaj</a>
  9. <a href="office1.php">Office1</a>
  10. <a href="office2.php">Office2</a>
  11. <a href="office3.php">Office3</a>
  12. <h1>Zadania wykonane</h1>
  13. <table border="1">
  14. <tr>
  15. <th>Id</th>
  16. <th>Nazwa</th>
  17. <th>Użytkownik</th>
  18. <th>Status</th>
  19. <th>Data wprowadzenia</th>
  20. <th>Zmień</th>
  21. <th>Usuń</th>
  22. <th>Przekaż</th>
  23. </tr>
  24. <?//if($dane) foreach($dane as $z):?>
  25. <?foreach($dane as $z):?>
  26. <tr>
  27. <form action="usunZadanie.php" method="post">
  28. <td><?=$z['id']?></td>
  29. <td><input type='text' value='<?=$z['nazwa']?>' name="nazwa"></td>
  30. <td><input type='text' value='<?=$z['user1']?>' name="user1"></td>
  31.  
  32.  
  33.  
  34.  
  35. <td><select name="office" '<?=$z['office']?>' </td>" >
  36. <option><?=$z['office']?></option>
  37. <option >Office1</option>
  38. <option>Office2</option>
  39. <option>Office3</option>
  40. </select>
  41. <td><?=$z['data_wprowadzenia']?></td>
  42. <td>
  43. <input type="hidden" name="id" value="<?=$z['id']?>">
  44. <input type="hidden" name="akcja" value="zmien">
  45. <input type="submit" value="Zmien">
  46. </td>
  47. </form>
  48. <td>
  49. <form action="usunZadanie.php" method="post">
  50. <input type="hidden" name="id" value="<?=$z['id']?>">
  51. <input type="hidden" name="akcja" value="usun">
  52. <input type="submit" value="Usun">
  53. </form>
  54. </td>
  55. <td>
  56. <form action="usunZadanie.php" method="post">
  57. <input type="hidden" name="id" value="<?=$z['id']?>">
  58. <input type="hidden" name="akcja" value="przekaz">
  59. <input type="submit" value="Przekaż">
  60. </form>
  61. </td>
  62. </tr>
  63. <?endforeach;?>
  64. </table>
  65. </body>
  66. </html>
  67.  


oraz plik usunZadanie.php


  1.  
  2. <?php
  3. include 'common.php';
  4.  
  5.  
  6. if(isset($_REQUEST['id']) && isset($_REQUEST['akcja']) && isset($_REQUEST['przekaz'])){
  7.  
  8. $id = (int)$_REQUEST['id'];
  9. $akcja = $_REQUEST['akcja'];
  10. $przekaz = $_REQUEST['przekaz'];
  11.  
  12. $query = false;
  13. if ($akcja == 'zmien'){
  14. if(isset($_REQUEST['nazwa'])){
  15. $nazwa = pg_escape_string($_REQUEST['nazwa']);
  16. $user1 = pg_escape_string($_REQUEST['user1']);
  17. $office = pg_escape_string($_REQUEST['office']);
  18. $query = "UPDATE dziennik1 SET nazwa='$nazwa', user1='$user1', office='$office' WHERE id=$id";
  19. }
  20. } else if ($akcja == 'usun'){
  21. $query = "DELETE FROM dziennik1 WHERE id=$id";
  22. } else if ($przekaz == 'przekaz'){
  23. $query = "INSERT INTO office1 (nazwa, user1) SELECT nazwa, user1 FROM dziennik1 WHERE id=$id";
  24. }
  25.  
  26.  
  27. if($query){
  28. pg_query($query);
  29. }
  30. }
  31. header('Location:indexWykonane.php');
  32.  
  33.  
  34.  



Ogólnie jak dodałem kolejnego "elseif $przekaz" to przestało mi działać usuwanie i modyfikacja zadań.
Natomiast nie mogę sobie poradzić z tym, aby kiedy zaznaczę w tabeli office1 lub 2 lub 3 i wcisnę przekaż rekord był kopiowany do odpowiedniej tabeli którą wybrałem - kompletnie nie wiem jak to zrobić

tabela główna nazywa się dziennik1, natomiast poboczne tabele to office1, office2, office3
Go to the top of the page
+Quote Post
viking
post 15.11.2016, 08:10:09
Post #4





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Nie widzę nigdzie input name=przekaz stad warunek nie będzie nigdy spełniony. W akcji przekaż nie masz żadnego selecta więc i tak nie wiesz do którego biura ma być przekazane. Zamiast tych hidden zrób <input type="submit" value="Usun" name="twoja akcja tutaj"> i być może nawet jeden formularz. Później sprawdzaj if(isset($_POST['nazwa akcji'])...


--------------------
Go to the top of the page
+Quote Post
mov45
post 15.11.2016, 12:19:45
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 20.10.2016

Ostrzeżenie: (0%)
-----


Już się pogubiłem - przecież jest przekaz w formularzu dokładnie tutaj:

  1.  
  2. <td>
  3. <form action="usunZadanie.php" method="post">
  4. <input type="hidden" name="id" value="<?=$z['id']?>">
  5. <input type="hidden" name="akcja" value="przekaz">
  6. <input type="submit" value="Przekaż">
  7. </form>
  8. </td>
Go to the top of the page
+Quote Post
nospor
post 15.11.2016, 12:23:52
Post #6





Grupa: Moderatorzy
Postów: 36 478
Pomógł: 6302
Dołączył: 27.12.2004




Cytat
Nie widzę nigdzie input name=przekaz
Wyraznie ci napisano, ze nie ma pola z NAME a ty w odpowiedzi pokazujesz pole z VALUE...
NAME
VALUE
znajdz 10 roznic tongue.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mov45
post 15.11.2016, 12:46:01
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 20.10.2016

Ostrzeżenie: (0%)
-----


Ja już sfotografowałem chyba ten formularz wzrokiem i dlatego tego nie widziałem- dzięki!!!

nadal jednak nie wiem, jaki jest sposób tu akurat w tym przypadku, aby móc wybierać "office" do którego chce wstawiać dane :

Dokładnie chodzi mi o to:

  1. $query = "INSERT INTO office1 (nazwa, user1) SELECT nazwa, user1 FROM dziennik1 WHERE id=$id";


mam tu wbite na sztywno office1 - a co zrobić jeśli czasami musi trafić do office2 lub office 3?
Go to the top of the page
+Quote Post
viking
post 15.11.2016, 12:52:14
Post #8





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Wtedy jak pisałem nie masz w tym akurat formularzu żadnego pola select, musisz to poprawić. A później podstaw zamiast na sztywno wartość z selecta (odpowiednio wcześniej sprawdzając żeby sobie tam luki nie zrobić).


--------------------
Go to the top of the page
+Quote Post
mov45
post 15.11.2016, 13:01:11
Post #9





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 20.10.2016

Ostrzeżenie: (0%)
-----


Tzn. ja chciałem to zrobić tym selektem z formularza, czyli po wybraniu np. office2 w zapytaniu opcja była podmieniana:


  1. <td><select name="office" '<?=$z['office']?>' </td>" >
  2. <option><?=$z['office']?></option>
  3. <option >Office1</option>
  4. <option>Office2</option>
  5. <option>Office3</option>
  6. </select>
  7.  


nie wiem jednak jak to wszystko powiązać, aby w zapytaniu office1, office2 i office3 się podmieniało - głowiłem się nad tym ponad tydzień, jednak nie znalazłem żadnego rozwiązania, a także żadnego sensownego przykładu na youtube sad.gif
Go to the top of the page
+Quote Post
viking
post 15.11.2016, 13:07:14
Post #10





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Select ten trafi tylko do warunku if ($akcja == 'zmien'){ bo jak widzisz masz 3 różne formularze w zależności od akcji. A jak poprawić to już pisałem.


--------------------
Go to the top of the page
+Quote Post
mov45
post 15.11.2016, 15:20:52
Post #11





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 20.10.2016

Ostrzeżenie: (0%)
-----


Tak faktycznie to napisałeś dzięki!!!

Są faktycznie 3 różne formularze - zgadza się. Odpowiadają jednak za następujące akcje : modyfikacja wiersza, usuwanie wiersza oraz przekazywanie rekordu do innej tabeli (office1,2,3)

I tu jest ok napisałeś jak to poprawić i wszystko gra.

Problem natomiast jest taki, iż nie mam nawet wyobrażenia jak połączyć te selekty (office1,2,3) z plikiem usunZadanie.php tak aby w INSERT INTO .... w miejsce kropek podmianiało w zależności od wyboru office1,2,3

Może mógłbyś chociaż podać przykład?
Go to the top of the page
+Quote Post
nospor
post 15.11.2016, 15:27:15
Post #12





Grupa: Moderatorzy
Postów: 36 478
Pomógł: 6302
Dołączył: 27.12.2004




Cytat
głowiłem się nad tym ponad tydzień,
Prosze cie... Ladnie tak klamac w zywe oczy? Przez tydzien to bys bez zadnego problemu przerobil podstawy php

Cytat
aby w INSERT INTO .... w miejsce kropek podmianiało w zależności od wyboru office1,2,3

Kurcze, toz juz w innym miejscu wkladasz wynik selecta do zapytania, o tu:
$query = "UPDATE dziennik1 SET nazwa='$nazwa', user1='$user1', office='$office' WHERE id=$id";

Jaki masz problem by to samo zrobic dla zapytania z insert?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mov45
post 15.11.2016, 18:40:38
Post #13





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 20.10.2016

Ostrzeżenie: (0%)
-----


Cytat
Prosze cie... Ladnie tak klamac w zywe oczy? Przez tydzien to bys bez zadnego problemu przerobil podstawy php


Ja niedawno dopiero zacząłem z tym zabawę więc tyle mi to zajęło a może nawet i dłużej - nie każdy łapie tak samo smile.gif


Cytat
Kurcze, toz juz w innym miejscu wkladasz wynik selecta do zapytania, o tu:
$query = "UPDATE dziennik1 SET nazwa='$nazwa', user1='$user1', office='$office' WHERE id=$id";


Cytat
Jaki masz problem by to samo zrobic dla zapytania z insert?

problem ma taki, że do tej pory tego nie robiłem, domyślam się, że inserty muszą być trzy?

$query = "INSERT INTO office1 (nazwa, user1) SELECT nazwa, user1 FROM dziennik1 WHERE id=$id";
$query = "INSERT INTO office2 (nazwa, user1) SELECT nazwa, user1 FROM dziennik1 WHERE id=$id";
$query = "INSERT INTO office3 (nazwa, user1) SELECT nazwa, user1 FROM dziennik1 WHERE id=$id";

tylko zastanawia mnie to jak nimi sterować za pomocą formularza tam gdzie mam
  1. <td><select name="office" '<?=$z['office']?>' </td>" >


Nie do końca rozumiem czy wiesz jaki efekt chce osiągnąć więc napiszę jeszcze raz :

po zaznaczeniu wyborze w tabeli html wybranego office1, lub 2 lub 3 i wciśnięciu przycisku przekaż - rekord zostanie przesłany do odpowiedniej tabeli

w bazie w sumie są 4 różne tabele - dziennik1, office1, office2, office3

wiem, że może to wyglądać na mega drążenie tematu z mojej strony, ale chcę to dobrze zrozumieć i tak w ogóle to dzięki za pomoc smile.gif



Go to the top of the page
+Quote Post
viking
post 15.11.2016, 18:48:38
Post #14





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Twój select ma name=office i trzy wartości.
Po wysłaniu forma echo $_POST['office'] zwróci aktualną wartość.
Możesz sobie stworzyć dodatkową tablicę mapowań.
$x = [
'Office1' => 'office1
]

I sprawdzać czy array_key_exists (wtedy na pewno użytkownik nic nie podstawi co nie powinien). Możesz zrobić $tblname = mb_strtolower($_POST['office']) i podstawić do zapytania. MOżesz dać option value=1/2/3 i na tej podstawie czegoś szukać.


--------------------
Go to the top of the page
+Quote Post
mov45
post 20.11.2016, 11:46:12
Post #15





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 20.10.2016

Ostrzeżenie: (0%)
-----




Niestety coś mi nie idzie - wszystko działało dopóki nie zrobiłem właśnie tego przycisku przekaz - teraz nic nie reaguje ani nie rzuca błędem sad.gif

formularz poprawiłem wg waszych wskazówek :

  1.  
  2. <td>
  3. <input type="hidden" name="id" value="<?=$z['id']?>">
  4. <input type="hidden" name="akcja" value="zmien">
  5. <input type="submit" value="Zmien">
  6. </td>
  7. </form>
  8. <td>
  9. <form action="usunZadanie.php" method="post">
  10. <input type="hidden" name="id" value="<?=$z['id']?>">
  11. <input type="hidden" name="akcja" value="usun">
  12. <input type="submit" value="Usun">
  13. </form>
  14. </td>
  15. <td>
  16. <form action="usunZadanie.php" method="post">
  17. <input type="hidden" name="id" value="<?=$z['id']?>">
  18. <input type="hidden" name="przekaz" value="przekaz">
  19. <input type="submit" value="Przekaż">
  20. </form>


w pliku php dodałem kolejną zmienną $przekaz

  1. <?php
  2. include 'common.php';
  3.  
  4.  
  5. if(isset($_REQUEST['id']) && isset($_REQUEST['akcja']) && isset($_REQUEST['przekaz'])){
  6.  
  7. $id = (int)$_REQUEST['id'];
  8. //int powyżej to zabezpieczenie liczby prze sql injection
  9. $akcja = $_REQUEST['akcja'];
  10. $przekaz = $_REQUEST['przekaz'];
  11.  
  12. $query = false;
  13. if ($akcja == 'zmien'){
  14. if(isset($_REQUEST['nazwa'])){
  15. $nazwa = pg_escape_string($_REQUEST['nazwa']);
  16. $user1 = pg_escape_string($_REQUEST['user1']);
  17. $office = pg_escape_string($_REQUEST['office']);
  18. $query = "UPDATE dziennik1 SET nazwa='$nazwa', user1='$user1', office='$office' WHERE id=$id";
  19. }
  20. } else if ($akcja == 'usun'){
  21. $query = "DELETE FROM dziennik1 WHERE id=$id";
  22. } else if ($przekaz == 'przekaz'){
  23. $query = "INSERT INTO office1 (nazwa, user1) SELECT nazwa, user1 FROM dziennik1 WHERE id=$id";
  24. }
  25.  
  26.  
  27. if($query){
  28. pg_query($query);
  29. }
  30. }
  31. header('Location:indexWykonane.php');


na razie nie robiłem jeszcze selecta chciałem na tym etapie aby można było usuwać bądź modyfikować wiersz - niestety całość zachowuje się jakby nie było widać widać zmiennej $przekaz

Ten post edytował mov45 20.11.2016, 11:46:44
Go to the top of the page
+Quote Post
viking
post 20.11.2016, 12:20:55
Post #16





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Nie widzę żebyś cokolwiek zmienił. Dalej masz3 różne formy.


--------------------
Go to the top of the page
+Quote Post
mov45
post 20.11.2016, 12:42:20
Post #17





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 20.10.2016

Ostrzeżenie: (0%)
-----


No tak zgadza się bo formularzy ma być trzy tyle ile różnych akcji: zmień, usuń i przekaż

w formularzy przekaz zmieniłem - name :

  1. <input type="hidden" name="przekaz" value="przekaz">


w php dodałem

  1. $przekaz = $_REQUEST['przekaz'];


Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2024 - 14:15