Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]usuwanie i aktualizacja (checkbox )
Forum PHP.pl > Forum > Przedszkole
majsterpstryk
Mam formularz w Moje konto z lista moich rezerwacji i te ktore pozaznaczam po wyslaniu Usun usuwa mi z bazy a chcialbym dodatkowo dopisac do tego ze jesli usunie mi jakas rezerwacje to sprawdzi dodatkowo czy istanieja takie same gdzie status jest Wait a nie ok i jesli bedzie wait to da OK tej o nizszym ID_rezerwacja

ID_rezerwacja ID_sala ID_uzytkownik data_rez od_godz do_godz nr_sali status





  1. if(isset($_POST['Usun']))
  2. {
  3. if (!empty($_POST['idsala'])){
  4. $sql = 'delete from rezerwacja where ID_rezerwacja in ('.implode(',',$_POST['idsala']).')';
  5.  
  6. }
  7.  
  8.  
  9.  
  10.  
Daiquiri
Musisz dopisać coś w tym guście (pseudokod):
Kod
if (usunięto pozycję z bazy) {
  while(istnieje pozycja taka jak wyżej gdzie status = "Wait")
    mysql_query(UPDATE tę pozycję aby status = "ok");
}

Jeżeli dobrze Cię rozumiem to tak powinno to wyglądać. I tak na marginesie staraj się korzystać z przecinków, bo ciężko się czyta Twój post smile.gif.
majsterpstryk
spoko ale możesz jaśniej napisać jak sprecyzowac ten warunek jeśli usunięto ?
lord2105
  1.  
  2. if(isset($_POST['Usun']))
  3. {
  4. if (!empty($_POST['idsala'])){
  5. $sql = 'delete from rezerwacja where ID_rezerwacja in ('.implode(',',$_POST['idsala']).')';
  6.  
  7. if (mysql_query($sql)) {
  8. //tu jedziesz dalej tongue.gif
  9. }
  10. }
  11.  
  12.  
majsterpstryk
tego while dalej nie moge ogarnac tongue.gif
lord2105
Cytat
e jesli usunie mi jakas rezerwacje to sprawdzi dodatkowo czy istanieja takie same gdzie status jest Wait


yyy... takie same? znaczy jakie?
majsterpstryk
na dany dzien i dana h moze byc kilka zgloszonych rezerwacji z tym ze roznia sie ID_rezerwacja ID_uzytkownik oraz Status , jesli sa 4 osoby chetne to ta o mniejszym id_rezerwacja ma status OK a pozstale Wait jesli usune ta z OK to druga osoba w kolejce ma przeskoczyc na status OK.
lord2105
  1. if(isset($_POST['Usun']))
  2. {
  3. if (!empty($_POST['idsala'])){
  4. $sql = 'delete from rezerwacja where ID_rezerwacja in ('.$tab = implode(',',$_POST['idsala']).')';
  5.  
  6. if (mysql_query($sql)) {
  7. foreach ($tab as $v) {
  8. $sql2 = "UPDATE rezerwacja SET status = 'OK' WHERE ID_rezerwacja > $v ORDER BY ID_rezerwacja ASC LIMIT 1";
  9. }
  10. }
  11. }
  12.  

Pisane na szybko z palca, ale powinno Ci zobrazować.

Pozdrawiam
Daiquiri
while - w moim przykładzie: rób coś dopóki warunek jest spełniony. Innymi słowy (pseudokod):
Kod
while(SELECT * FROM rezerwacje WHERE status = "Wait") { // dopóki istnieją pozycje, które mają w statusie "wait" (możesz oczywiście dodać jeszcze inne warunki)
   mysql_query(UPDATE ....);  //wykonuj UPDATE tych pozycji zamieniając status z "wait" na OK
}


@lord2105
Nie proponowałam "przelecenia" wszystkich rekordów, które mają wait, tylko tych które spełniają wszystkie warunki rekordu usuniętego + wait.
lord2105
@Daiquiri powiedz mi po co ma lecieć wszystkie rekordy które mają wait jak on chce zmienic na OK tylko ten który jest większy od usuniętego?
majsterpstryk
troche nie tak , trzeba jeszcze sprawdzic czy istenieje kilka takich rezerwacji bo chechkbox wyswietla tylko moje jak usunie to na koncie drugiego uzytkownika tam gdzie bylo wait zmienia sie na ok
Daiquiri
Istnieje tylko jedna pozycja, która spełnia ten warunek? Tj. jak ja usuwam swoją pozycję to u innego użytkownika "wait" ma się zamienić na "OK" i taka pozycja jest tylko jedna (ta z "wait")? Jeżeli tak to wystarczy sprawdzić czy istnieje rekord o parametrach tego usuniętego, który ma status ustawiony na "wait" i wtedy zrobić update. Jeżeli pozycji jest kilka i wszystkie mają być zamienione to pozostaje Ci jakiś rodzaj pętli smile.gif.
majsterpstryk
o to chodzi , tylko nie wiem jak to uchwycic ze ma parametry tego usunietego , mozesz mi to rozpisac ?
Daiquiri
Jeżeli masz
Kod
"DELETE FROM rezerwacje WHERE numer_rezerwacji = '123' AND status = 'ok'"
to szukasz pozycji, która ma ten sam numer rezerwacji, ale status 'wait', czyli:
Kod
"UPDATE rezerwacje SET status = 'ok' WHERE numer_rezerwacji = '123'"
Tak by to mniej więcej wyglądało w pseudokodzie smile.gif.
majsterpstryk
inny nr rezerwacji :s


ID_rezerwacja ID_sala ID_uzytkownik data_rez od_godz do_godz nr_sali status
465 1 3 2010-10-30 07:00:00 01:45:00 1 Wait
464 1 4 2010-10-30 07:00:00 01:45:00 1 OK
Jak widzisz sa to rezerwacje na ten sam dzien i godzine
Uzytkownik o id 4 pierwsyz zarezerowal i ma dlatego OK
Jesli w swoim koncie usunie ta rezerwacje to na koncie uzytkownika ID 3 zmieni sie status z wait na ok
Daiquiri
Jeżeli ID do update'u jest zawsze jeden mniejsze to zrób UPDATE WHERE ID_rezerwacja = ID tego usuniętego -1 smile.gif. Jeżeli nie, to pobierz dane z pozycji, którą usuwasz do zmiennych np. $ID_sala, $data_rez i tak dalej, a potem wysyłasz aktualizację (oczywiście pseudokod):
Cytat
"UPDATE rezerwacje SET status = 'ok' WHERE ID_sala = '$ID_sala' AND data_rez = '$data_rez' ";

gdzie $ID_sala i $data_rez to dane wyciągnięte z usuniętej pozycji.
majsterpstryk
dalej nie ogarniasz smile.gif , nie zawsze jest kilka rezerwacji na ten sam dzien i godzine , dlatego potrzebuje sie dowiedziec jak napisac warunek sprawdzajacy czy sa inne takie rezerwacje przy usuwaniu

rez1 zaznaczone
rez2
rez3 zaznaczone

usun

jak wcisne usun, usuwa mi zaznaczone , np usunie rez1 i sprawdzi czy nie istnieja inne takie same rezerwacje jesli tak to tej o nizszym id_rezerwacja w statusie da z wait na OK , czy teraz czaisz ?
Daiquiri
Chcesz to zrobić bezpośrednio w miejscu gdzie robisz "DELETE"? Nie bardzo widzę jak smile.gif. Najpierw usuwasz, potem sprawdzasz czy jest pozycja podobna i dopiero potem update. Jeżeli masz kilka pozycji do usunięcia całość wrzucasz w dodatkową pętlę (pseudokod):
Kod
while(są pozycje do usunięcia) {
  mysql_query (SELECT * FROM rezerwacje WHERE...); //pobierasz wszystkie dane dotyczące pozycji, którą chcesz usunąć np. do tablicy $usuwanaRezerwacja[]
  mysql_query (DELETE FROM rezerwacje WHERE ID_rezerwacja = '1234'); // usuwasz pozycję z checkboxa wg dowolnych warunków

  if (istnieje pozycja pobierana zapytaniem "SELECT * FROM rezerwacje WHERE ID_sala = '$usuwanaRezerwacja[0]' AND data_rez = '$usuwanaRezerwacja[1] ";) {
    // powyzejwstawiasz dowolną ilość warunków, które będą identyfikować zmienną
     mysql_query(UPDATE rezerwacje SET status = 'ok' WHERE ID_sala = '$usuwanaRezerwacja[0]' AND data_rez = '$usuwanaRezerwacja[1]' ";
  }
}// koniec głównego while

Jeżeli chcesz się upewnić, że zmieni Ci pierwszą po usuwanym rekordzie rezerwację ze statusem "wait", dodaj po prostu sortowanie po ID_rezerwacji do zapytania)
lord2105
  1. if(isset($_POST['Usun']))
  2. {
  3. if (!empty($_POST['idsala'])){
  4. $sql = 'delete from rezerwacja where ID_rezerwacja in ('.$tab = implode(',',$_POST['idsala']).')';//tworzy tablice z id
  5.  
  6. if (mysql_query($sql)) {//jezeli usuniete
  7. foreach ($tab as $v) {przelec tablice z id
  8. $sql2 = "UPDATE rezerwacja SET status = 'OK' WHERE ID_rezerwacja > '".$v."' ORDER BY ID_rezerwacja ASC LIMIT 1";sprawdz id wieksze od usunietych i ustaw 1 napotkane na ok
  9. mysql_query($sql2) or die (mysql_error());// no o tym zapomnialem
  10. }
  11. }
  12. }
  13.  
  14.  


Czy rozumiesz ten kod @majsterpstryk W czym problem?
majsterpstryk
  1. Warning: Invalid argument supplied for foreach() in F:\xampp-win32-1.7.2\xampp\htdocs\moje.php on line 63
  2.  
  3. 63:foreach ($tab as $v) {
lord2105
var_dump($tab); ?

lub

var_dump($_POST['idsala']);

Wiesz co tongue.gif mam wrażenie, że liczysz na gotowca :)haha.gif
majsterpstryk
nie licze , poprostu przeroslo mnie to tongue.gif a ten var dump gdzie mam wstawic bo cos nie smiga nadal :/
lord2105
  1.  
  2. var_dump ($_POST['idsala']);// i napisz tu dla nas co pokaże
  3. if (mysql_query($sql)) {//jezeli usuniete
majsterpstryk
  1. array(1) { [0]=> string(3) "536" }
  2. Warning: Invalid argument supplied for foreach() in F:\xampp-win32-1.7.2\xampp\htdocs\moje.php on line 68
  3.  
  4.  
  5.  
lord2105
  1. foreach ($tab as $value_id) {//przelec tablice z id
  2.  
  3. $sql2 = "UPDATE rezerwacja SET status = 'OK' WHERE ID_rezerwacja > '".$value_id."' ORDER BY ID_rezerwacja ASC LIMIT 1";sprawdz id wieksze od usunietych i ustaw 1 napotkane na ok
  4.  
  5. mysql_query($sql2) or die (mysql_error());// no o tym zapomnialem
  6.  
  7. }

Musi działać nie wiem czy nie popełniłeś tego błędu co ja, i po prostu skopiowałeś mój kod nie było // przy komentarzu
majsterpstryk
  1. if(isset($_POST['Usun']))
  2. {
  3. if (!empty($_POST['idsala'])){
  4. $sql = 'delete from rezerwacja where ID_rezerwacja in ('.$tab = implode(',',$_POST['idsala']).')';//tworzy tablice z id
  5. var_dump ($_POST['idsala']);
  6. if (mysql_query($sql)) {
  7. foreach ($tab as $value_id) {
  8. $sql2 = "UPDATE rezerwacja SET status = 'OK' WHERE ID_rezerwacja > '".$v."' ORDER BY ID_rezerwacja ASC LIMIT 1";
  9. mysql_query($sql2) or die (mysql_error());// no o tym zapomnialem
  10. }
  11. }
  12. }
  13. }
  14.  

dalej krzaczy ten warning z foreach
lord2105
bo podajesz tylko 1 id to jak ma zrobić z tego tablice poprzez implode?

  1. if(isset($_POST['Usun']))
  2. {
  3. if (!empty($_POST['idsala'])){
  4. $sql = 'delete from rezerwacja where ID_rezerwacja in ('.$tab = implode(',',$_POST['idsala']).')';//tworzy tablice z id
  5. var_dump ($_POST['idsala']);
  6. if (mysql_query($sql)) {
  7. if (!is_array($tab)) {
  8. $sql2 = "UPDATE rezerwacja SET status = 'OK' WHERE ID_rezerwacja > '".$_POST['idsala']."' ORDER BY ID_rezerwacja ASC LIMIT 1";
  9. mysql_query($sql2) or die (mysql_error());// no o tym zapomnialem
  10. }
  11. else {
  12. foreach ($tab as $value_id) {
  13. $sql2 = "UPDATE rezerwacja SET status = 'OK' WHERE ID_rezerwacja > '".$value_id."' ORDER BY ID_rezerwacja ASC LIMIT 1";
  14. mysql_query($sql2) or die (mysql_error());// no o tym zapomnialem
  15. }
  16. }
  17. }
  18. }
  19. }
majsterpstryk
ok teraz nie krzaczy ale nie robi tego update a powinno
lord2105
zobacz jeszcze raz, bo był mały błąd wiedziałem, że liczysz na gotowca... Bo nawet nie przejrzałeś kodu tylko CTRL+C / CTRL + V / forum post "nie działa"
majsterpstryk
ok działa dziękie wielki ,z początku sam probowałęm to rozkminic ale mam za małą wiedzę , potem juz liczylem na gotowca tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.