Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Praca z PHP + MYSQL
xenvera
post 22.10.2014, 20:25:13
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


Witajcie.

Mam do was kilka pytań związanych z PHP i MYSQL.

Chcę zrobić bazę danych Hotelu, czyli wszystkich klientów korzystających z wynajmu pokojów. Posiadam baze danych w której dodaję Imie, data przyjazdu itd idąc dalej nie wiem jak zrobić aby automatyczne skrypt liczył ilość dni ile dany klient przebywa w hotelu oraz mnożenie to przez kwotę noclegu (czyli. Przyjechałem 19.10.2014 do hotelu, 20.10.2014 opuszczam pokój czyli skrypt powinien odjąć(?) 20-19 = 1 * (koszt noclegu) = kwota zł.) Oraz aby wyświetlał wynik w tabeli.

Skrypt wygląda na razie tak:

  1. <?php
  2. require_once('config.php');
  3. include('index.php');
  4.  
  5. $ilosc = mysql_query("SELECT * FROM `klient`");
  6. $ilosc_klientow = mysql_num_rows($ilosc);
  7.  
  8. if($ilosc_klientow > 0)
  9. {
  10. echo '<center><font size="5">Aktualnie jest <b><font color="GREEN">'.$ilosc_klientow.'</font> </b>klientów!</font></center>';
  11. }
  12. else
  13. {
  14. echo '<center><font size="5">Aktualnie nie ma żadnych klientów!</font></center>';
  15. }
  16.  
  17. ///Dane szczegółowe
  18.  
  19. $dane = "SELECT id,imie,lozko,ilosc_dni,dzien, miesiac, rok ,data_dodania FROM `klient`";
  20. $a = 25;
  21. $wynik = mysql_query($dane);
  22. echo '<center><p>';
  23. echo '<table border="1" width="1000">';
  24. echo '<tr>';
  25. echo '<td bgcolor="orange">Identyfikator</td>';
  26. echo '<td bgcolor="orange">Imie</td>';
  27. echo '<td bgcolor="orange">Numer łóżka</td>';
  28. echo '<td bgcolor="orange">Przyjechał dnia';
  29. echo '<td bgcolor="orange">Do zapłaty</td>';
  30. echo '<td bgcolor="orange">Przenieś do archiwum!</td>';
  31. echo '</tr>';
  32.  
  33. while ($row = mysql_fetch_row($wynik))
  34. {
  35. echo '</tr>';
  36. echo '<td>'.$row[0].'</td>';
  37. echo '<td>'.$row[1].'</td>';
  38. echo '<td>'.$row[2].'</td>';
  39. echo '<td>'.$row[4].' '.$row[5].' '.$row[6].'</td>'; ///data
  40. echo '<td>KWOTA zł</td>';
  41. echo '<td><center><input type="submit" name="przenies" value="Przenieś!"></center></td>';
  42.  
  43. }
  44. echo '</table><br>';
  45. echo '<table border="1" width="600">';
  46. echo '<tr>';
  47. echo '<td>Suma</td>';
  48. echo '<td> zł</td>';
  49. echo '</table>';
  50.  
  51.  
  52. ?>






I co nikt nie wie jak to zrobić ? :<
Go to the top of the page
+Quote Post
Dejmien_85
post 22.10.2014, 21:03:23
Post #2





Grupa: Zarejestrowani
Postów: 251
Pomógł: 23
Dołączył: 23.04.2013

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


Panowie i Panie, ogłaszam wszem i wobec, że jeśli ktoś nie weźmie się za te tutoriale z sieci uczące tak karygodnych praktyk, wtedy ja sam się za to wezmę. Zacznę niszczyć internety!

Kolego, to co tutaj poczyniłeś to przestępstwo - złamałeś jedno z ważniejszych przykazań developerów, tj. nie miesza się widoku z kodem. Proszę o natychmiastowe przemyślenie designu i oddzielenie widoku od kodu.

Najpierw niech wykona się logika, później wynik przekaż do widoku (stwórz plik .php, w którym będziesz miał tylko tą tabelkę i zmienną, która się wyświetli i na samej górze załącz pliczek z logiką).

Poza tym korzystasz z mysql_query - oj nie, tak się nie robi, to przestarzała funkcja korzystająca z przestarzałego sterownika do obsługi baz danych, przestań tego używać. To praktyki stosowane jeszcze przed 2004 rokiem! Przekształć to na PDO, albo na mysqli (z "i" na końcu).

Gdy wykonasz powyższe czynności, wtedy będzie można pogadać dalej. wink.gif
Go to the top of the page
+Quote Post
ShaggyAG
post 22.10.2014, 22:53:48
Post #3





Grupa: Zarejestrowani
Postów: 111
Pomógł: 11
Dołączył: 12.10.2014
Skąd: Tarnów

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


http://us1.php.net/manual/pl/datetime.diff.php
Go to the top of the page
+Quote Post
xenvera
post 23.10.2014, 09:48:27
Post #4





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


Cytat(Dejmien_85 @ 22.10.2014, 22:03:23 ) *
Panowie i Panie, ogłaszam wszem i wobec, że jeśli ktoś nie weźmie się za te tutoriale z sieci uczące tak karygodnych praktyk, wtedy ja sam się za to wezmę. Zacznę niszczyć internety!

Kolego, to co tutaj poczyniłeś to przestępstwo - złamałeś jedno z ważniejszych przykazań developerów, tj. nie miesza się widoku z kodem. Proszę o natychmiastowe przemyślenie designu i oddzielenie widoku od kodu.

Najpierw niech wykona się logika, później wynik przekaż do widoku (stwórz plik .php, w którym będziesz miał tylko tą tabelkę i zmienną, która się wyświetli i na samej górze załącz pliczek z logiką).

Poza tym korzystasz z mysql_query - oj nie, tak się nie robi, to przestarzała funkcja korzystająca z przestarzałego sterownika do obsługi baz danych, przestań tego używać. To praktyki stosowane jeszcze przed 2004 rokiem! Przekształć to na PDO, albo na mysqli (z "i" na końcu).

Gdy wykonasz powyższe czynności, wtedy będzie można pogadać dalej. wink.gif


Zamiast się tak rozpisywać i udawać super programistę odpowiedziałbyś na temat a nie atakował początkującego smile.gif

Cytat(ShaggyAG @ 22.10.2014, 23:53:48 ) *


Dzięki!

Ten post edytował xenvera 23.10.2014, 09:49:15
Go to the top of the page
+Quote Post
Boshi
post 23.10.2014, 11:05:07
Post #5





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


To nie atak, to porada. Choć wg mnie powiedziec początkującemu by nie mieszał widoku z kodem wykonawczym to jak samobójstwo. Ktoś kto się dopiero uczy składni itd nie będzie zaprzątał sobie głowy czy html ma być w kodzie czy nie. Myslę, że z czasem przychodzi pora na pisanie coraz bardziej ludzkich skryptów.

A jeżeli chodzi o poradniki w necie, to jest tego od groma tyle, że 95% jest przestarzałych do kości.

Go to the top of the page
+Quote Post
xenvera
post 23.10.2014, 18:09:20
Post #6





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


Ostatnie pytanie na szybko związane ze skryptem, chcę zaksięgować wpłatę klienta jednak po dodaniu do bazy wynik jest 0, dlaczego?

  1. while ($row = mysql_fetch_array($wynik))
  2. {
  3. echo '</tr>';
  4. echo ''; //Tutaj było ID
  5. echo '<td>'.$row['imie'].'</td>';
  6. echo '<td>'.$row['lozko'].'</td>';
  7. echo '<td>'.$row['dzien'].' - '.$row['miesiac'].' - '.$row['rok'].'</td>'; ///data
  8. echo '<td>'.$row['data_dodania'].'</td>';
  9. $data_dodania = $row['data_dodania'];
  10. $date1 = strtotime($data_dodania); ///Data dodania mysql
  11. $date2 = time(); ///Aktualny czas
  12. $subTime = $date2 - $date1; ///Obliczenie ilosc dni
  13. $d = ($subTime/(60*60*24))%365; ///
  14. $oblicz = $d * $koszt;
  15. echo '<td><center>'.$oblicz.' zł</center></td>';
  16. echo '<td><center><input type="checkbox" name="zaplacil[]" value="'.$row['id'].'"/></center></td>';
  17. echo '<td><center><input type="checkbox" name="delete[]" value="'.$row['id'].'"></center></td>';



  1. if (isset($_GET['zaplacil']))
  2. {
  3. $zaplacil = $_GET['zaplacil'];
  4. $kwotadb = mysql_query('UPDATE `klient` SET kwota = '.$oblicz.' WHERE id IN ('.implode(',', $_GET['zaplacil']).')');
  5. if($kwotadb)
  6. {
  7. echo '<font color="green"><b>Klient zapłacił!!!</b></font>';
  8. }
  9. else
  10. {
  11. echo 'Blad '.mysql_error();
  12. echo '</table></br>';
  13. }
  14. }

Go to the top of the page
+Quote Post
nospor
post 23.10.2014, 18:20:50
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Bo nigdzie przed UPDATE nie wyliczasz $oblicz? To ze gdzies na innej stronie wyliczyles w liscie, nie znaczy, ze ta zmienna w magiczny sposob sie przeniesie.


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

"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
xenvera
post 23.10.2014, 21:24:48
Post #8





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


Cytat(nospor @ 23.10.2014, 19:20:50 ) *
Bo nigdzie przed UPDATE nie wyliczasz $oblicz? To ze gdzies na innej stronie wyliczyles w liscie, nie znaczy, ze ta zmienna w magiczny sposob sie przeniesie.


To jest wszystko w jednym pliku....

Jak zamiast $oblicz daje np $koszt to w bazie normalnie wyswietla np. 25. Ale wyniku z oblicz juz nie dodaje...

Ten post edytował xenvera 23.10.2014, 21:38:39
Go to the top of the page
+Quote Post
Boshi
post 23.10.2014, 22:05:08
Post #9





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


A jaką wartość ma zmienna koszt?
  1. $koszt
? albo nie widzę, albo matematyka podpowiada, że wartość * 0 =0

Ten post edytował Boshi 23.10.2014, 22:08:28
Go to the top of the page
+Quote Post
xenvera
post 23.10.2014, 22:20:24
Post #10





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


  1. $data_dodania = $row['data_dodania'];
  2. $date1 = strtotime($data_dodania); ///Data dodania mysql
  3. $date2 = time(); ///Aktualny czas
  4. $subTime = $date2 - $date1; ///Obliczenie ilosc dni
  5. $d = ($subTime/(60*60*24))%365; ///
  6. $koszt = 25;
  7. $oblicz = $d * $koszt;
  8.  
  9.  
  10. echo '<td><center>'.$oblicz.' zł</center></td>';
  11.  
  12. echo '<td><center><input type="checkbox" name="zaplacil[]" value="'.$row['id'].'"/></center></td>';
  13. echo '<td><center><input type="checkbox" name="delete[]" value="'.$row['id'].'"></center></td>';
  14. echo '</tr>';
  15.  
  16. }
  17. echo '</table><br>';
  18. echo '<center><input type="submit" value="Wykonaj"</center>';
  19. echo '</form>';
  20.  
  21. ///Zaplata
  22. if (isset($_GET['zaplacil']))
  23. {
  24. $zaplacil = $_GET['zaplacil'];
  25.  
  26.  
  27. $kwotadb = mysql_query('UPDATE `klient` SET kwota = '.$oblicz.' WHERE id IN ('.implode(',', $_GET['zaplacil']).')');
  28.  
  29. if($kwotadb)
  30. {
  31. echo 'ZAPLACIŁ';
  32. }
  33. else
  34. {
  35. echo 'BLAD';
  36. }
  37. }
Go to the top of the page
+Quote Post
nospor
post 24.10.2014, 06:22:56
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
To jest wszystko w jednym pliku....
Ok.... Po raz kolejny piszę: sprawdzajcie co wkladacie. TO nie jest żaden wyczyn tylko podstawa podstaw podstawowych podstaw....

  1. var_dump($oblicz);// O TU PRZED SAMYM UPDATE NALEZY SPRAWDZIC CZY OBY NA PEWNO TA ZMIENNA ZAWIERA CO MYSLISZ ZE ZAWIERA
  2. $kwotadb = mysql_query('UPDATE `klient` SET kwota = '.$oblicz.' WHERE id IN ('.implode(',', $_GET['zaplacil']).')');


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

"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
xenvera
post 24.10.2014, 14:52:24
Post #12





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


Powiem tak, var_dump zawiera faktycznie wyniki co widać na obrazku.
Jednak jest problem, jak zaznaczam klienta który ma zapłacić 425 zł to zmienna cały czas ma w pamieci wynik 575. I zamiast 425 dodaje 575 do bazy ...

Go to the top of the page
+Quote Post
nospor
post 24.10.2014, 17:53:38
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No i zgadza sie. Oblicz robisz z listy a masz robic z tego co wysylasz, wiec masz źle.


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

"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
xenvera
post 24.10.2014, 19:33:00
Post #14





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


Nie no, nie mam pojęcia ani nawet pomysłu jak to zrobić. :|
Go to the top of the page
+Quote Post
ShaggyAG
post 25.10.2014, 06:21:46
Post #15





Grupa: Zarejestrowani
Postów: 111
Pomógł: 11
Dołączył: 12.10.2014
Skąd: Tarnów

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


Liczysz oblicz w petli dlatego zmienna pamięta ostatni wynik. I to jego dodaje przy updacie.
Dodaj sobie w tabeli dla każdego klienta pole "do zapłaty" i przy liczeniu oblicz rób update.
a pole zapłata updatuj na true jak jest faktyczna zapłata.

Ten post edytował ShaggyAG 25.10.2014, 08:34:49
Go to the top of the page
+Quote Post
xenvera
post 26.10.2014, 21:31:24
Post #16





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


Gdzie mam wcisnąć te obliczenia, skoro do każdego potrzebuje ID klienta nie musi być do tego pętli ? Inaczej mi jakoś to nie chce iśc...
W tabeli mam "kwota" a w formularzu Do zapłaty, i przy updacie zmienia pole w tabeli "kwota" na jakąś tam kwotę wychodzącą z obliczeń.
Go to the top of the page
+Quote Post
ShaggyAG
post 27.10.2014, 15:51:27
Post #17





Grupa: Zarejestrowani
Postów: 111
Pomógł: 11
Dołączył: 12.10.2014
Skąd: Tarnów

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


W bazie też musisz mieć jakieś pole tyu "zapłacono" tak jak masz w formularzu.
Rozwiązań jest wiele, ja bym to zrobil tak że w tym skrypcie co masz wsadził bym sobie if() który by sprawdzał czy dla danego ID pole w "zapłacono" DB ma wartośc true. Jeżeli tak to w echo wysyłasz np "ok" a jak nie to w echo wysyłasz przycisk z przekierowaniem do fucnkcji (z parametrem z ID) z ajaxem która by zrobiła tylko update na zapłacono.
Go to the top of the page
+Quote Post
xenvera
post 23.11.2014, 21:04:51
Post #18





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


No z ajaxem generalnie jeszcze nic nie zaczynałem, nie dało by się tego w prostszy sposób zrobić?


@Po prostu nie wiem jak dopisać $oblicz do osobnych klientów w zapytaniu..



Ktoś, coś? :S

Więc jak przed Updatem mam dodać znowu wszystkie obliczenia ?


F5

Ten post edytował xenvera 10.11.2014, 20:48:02
Go to the top of the page
+Quote Post
Turson
post 23.11.2014, 21:31:41
Post #19





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Zadaj po ludzku pytanie
Go to the top of the page
+Quote Post
xenvera
post 30.11.2014, 17:45:28
Post #20





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 4.03.2014

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


Mam problem ze skryptem którym Updatuje w bazie danych kwotę jaką zapłacił losowy Kowalski za nocleg:


Problem w tym, że zmienna obliczająca dodaje mi cały czas tylko 1 wynik do bazy. Czyli jak odznaczam "ASDASD" i wykonuje że zapłacił to Updatuje mi kwotę 575 zł która należy do "123123123~".

//W postach wyżej nospor podpowiadał mi co mam zrobić, jednak na prawdę próbowałem i nie wyszło, szukałem przykładów ale też cieżko znaleźć coś podobnego.

  1. while ($row = mysql_fetch_array($wynik))
  2. {
  3. echo '<tr>';
  4. echo ''; //Tutaj było ID
  5. echo '<td>'.$row['imie'].'</td>';
  6. echo '<td>'.$row['lozko'].'</td>';
  7. echo ''; // tutaj bylo dzien miesiac rok
  8. echo '<td>'.$row['data_dodania'].'</td>';
  9. $data_dodania = $row['data_dodania'];
  10. $date1 = strtotime($data_dodania); ///Data dodania mysql
  11. $date2 = time(); ///Aktualny czas
  12.  
  13. $subTime = $date2 - $date1; ///Obliczenie ilosc dni
  14. $y = ($subTime/(60*60*24*365));
  15. $m = ($subTime/60)%60;
  16. $d = ($subTime/(60*60*24))%365; ///
  17. $koszt = 25;
  18. $oblicz = $d * $koszt;
  19. var_dump($oblicz);
  20.  
  21. echo '<td><center>'.$oblicz.' zł</center></td>';
  22.  
  23.  
  24. if($row['kwota'] > 0)
  25. {
  26.  
  27. echo '<td><center><input type="checkbox" name="zaplacil[]" value="" disabled="disabled"/></center></td>';
  28. }
  29.  
  30. else
  31. {
  32. echo '<td><center><input type="checkbox" name="zaplacil[]" value="'.$row['id'].'"/></center></td>';
  33. }
  34.  
  35. if($row['kwota'] == 0)
  36. {
  37. echo '<td><center><b><font color="RED">NIEZAPŁACONO!</b></font></center></td>';
  38. }
  39. else
  40. {
  41. echo '<td><center><b><font color="GREEN">ZAPŁACONO!</b></font></center></td>';
  42. }
  43.  
  44. echo '<td><center><input type="checkbox" name="delete[]" value="'.$row['id'].'"></center></td>';
  45. echo '<td><a href="klienci.php?dane=edytuj&id='.$row['id'].'"/>Edytuj</a></td>';
  46. echo '</tr>';
  47.  
  48. }
  49. echo '</table><br>';
  50. echo '<center><input type="submit" value="Wykonaj"</center>';
  51. echo '</form>';
  52.  
  53. ///Zaplata
  54. if (isset($_GET['zaplacil']))
  55. {
  56. $zaplacil = $_GET['zaplacil'];
  57.  
  58. var_dump($oblicz);
  59. $kwotadb = mysql_query('UPDATE `klienci` SET kwota = '.$oblicz.' WHERE id IN ('.implode(',', $_GET['zaplacil']).')');
  60.  
  61. if($kwotadb)
  62. {
  63. echo 'ZAPLACIŁ';
  64. }
  65. else
  66. {
  67. echo 'BLAD';
  68. }
  69. }


f10

f11
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 13.06.2025 - 08:40