Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] Niespodziewany błąd w linii SELECT-ującej z BD w operacji klasy Kort
Forum PHP.pl > Forum > PHP
neonowy
Witam serdecznie,
to mój pierwszy temat na forum tak więc jeśli coś robię źlę to proszę o wyrozumiałość.
Mam problem tego typu: mianowicie tworzę aplikację dla klubu tenisowego. konkretnie pracuję nad rezerwacja kortów online. i tu pojawił się problem którego po 1 nie rozumiem, a po 2-gie pojawił się w miejscu w którym wogóle bym się nie spodziewał. tymbardziej zaskoczył mnie ten błąd że większość funkcjonalności systemuy oparte jest o podobne klasy z podobnymi , jak nie prawie identycznymi operacjami z tym ze operuja na roznych tabelach w bazie. a wiec do rzeczy.
mam taki formularz (jest to niejako takie podsumowanie zebranych informacji tak wiec wiekszosc pul jest hidden i ustalonych):
  1. <form action="ticketsys.php" method="post">
  2. <input type="hidden" name="action" value="9" />
  3. <b>Data rezerwacji:</b><br /> <?php echo $when;?><br />
  4. <input type="hidden" name="when" value="<?php echo $when;?>" />
  5. <b>Godzina rezerwacji:</b> <br /><?php echo $hour.':00';?>
  6. <input type="hidden" name="hour" value="<?php echo $hour;?>" /><br />
  7. <b>Dostępne korty: </b><br />
  8. <select name="kort">
  9. <?php for($k=1;$k<=4;$k++){
  10. if($kort->checkKort($when, $hour, $k)){ // funkcja sprawdzajaca czy dany kort jest wolny w tym terminie i o tej godzinie
  11. echo '<option value='.$k.'>Kort '.$k.'</option>';
  12. }
  13. }?>
  14. </select><br />
  15. <input type="hidden" name="iduser" value="<?php echo $user->id; ?>" /><br /> //$user-> id: zwraca id rezerwujacego.
  16. <br><input type="submit" value="Rezerwuje" />
  17. </form>

formularz ten działa i prawidłowo przekazuję poszczególne dane(sprawdzone) do ticketsys,
oto te przykladowe dane: $when = 2010-1-29, $kort = 1; $hour = 08; userid = 31
tak wyglada fragment odpowiedzialny za ten formularz w ticketsys, :
  1. if($_POST['action'] == 9){
  2. if(!empty($_POST['when']) && !empty($_POST['hour']) && !empty($_POST['kort'])) {
  3. $when = $_POST['when'];
  4. $kort = $_POST['kort'];
  5. $hour = $_POST['hour'];
  6. $on = $_POST['iduser'];
  7. $kort = new Kort($db);
  8. if($kort->badreservation == 1){//jesli zarezerwowane to zwraca wiadomosc nr 1
  9. $msg = 1;
  10. header('location: reserve.php?date='.$when.'&msg='.$msg.'');
  11. }else{
  12. if($kort->reserve($on, $when, $kort, $hour)){ // funkcja dodajaca termin do bazy
  13. $msg = 2;
  14. header('location: reserve.php?date='.$when.'&msg='.$msg.'');
  15. }else{// jesli sie nie dodalo
  16. $msg = 3;
  17. header('location: reserve.php?date='.$when.'&msg='.$msg.'');
  18. }
  19. }
  20. }else{//jesli nie ma wszystkich danych( w sumie niepotrzebne ale niech sobie bedzie)
  21. $msg = 4;
  22. header('location: reserve.php?date='.$when.'&msg='.$msg.'');
  23. }
  24. }

no i na koniec gwozdz programu i zrodlo bledu:
  1. <?php
  2. Class Kort
  3. {
  4. public $IDuser;
  5. public $date;
  6. public $hour;
  7. public $nrKortu;
  8. public $badreservation;
  9.  
  10. public function reserve($IDuser, $date, $nrKortu, $hour){
  11. $sql = "SELECT COUNT(*) FROM reservation WHERE nrKortu ='$nrKortu' and data ='$date' and hour='$hour'"; //sprawdzanie czy taki termin jest juz w bazie
  12. $res = $this->dbh->prepare($sql);
  13. $res->execute();
  14. $count = $res->fetchColumn();
  15. if($count == 0){ // jesli nie ma to dodajemy
  16. try{
  17. $zapyt=$this->dbh->exec("INSERT into reservation (id, userID, nrKortu, data, hour) VALUES ('0', '$IDuser', '$nrKortu', '$date', '$hour')");
  18. if($zapyt>0)
  19. {
  20. return true;
  21. }
  22. else{
  23. return false;
  24. }
  25. }
  26. catch(PDOException $e)
  27. {
  28. $this->kom_bledu = $e->GetMessage();
  29. return false;
  30. }
  31. } else {//albo ustawiamy badreservation
  32. $this->badreservation = 1;
  33. }
  34.  
  35. }

no i teraz tresc bledu:
  1. Catchable fatal error: Object of class Kort could not be converted to string in D:\Nowy folder\xampp\htdocs\class\kort.class.php on line 11

linia nr 11 to:
$sql = "SELECT COUNT(*) FROM reservation WHERE nrKortu ='$nrKortu' and data ='$date' and hour='$hour'";
probowalem juz wszystkiego ale wszystko na nic... jak usune to sprawdzanie terminu to pokazuje blad w linii 17.. czyli
  1. $zapyt=$this->dbh->exec("INSERT into reservation (id, userID, nrKortu, data, hour) VALUES ('0', '$IDuser', '$nrKortu', '$date', '$hour')");

pozostałe operacje tej klasy sa w porzadku...Bardzo prosze o wyjasnienie tego bledu w moim przypadku i pomoc.. bo strasznie mnie to wstrzymalo;/
Z góry dziekuje i pozdrawiam.
nospor
Komunikat bledu przeciez wyraźnie mowi, ze probujesz obiekt Kort uzyc jako tekst.
No to teraz patrzymy w kod:

public function reserve($IDuser, $date, $nrKortu, $hour){

Trzecim parametrem reserve() jest $nrKortu. A ty przy wywolywaniu tej funkcji zapodajesz obiekt Kort a nie numer Kortu:
$kort = new Kort($db);
if($kort->reserve($on, $when, $kort, $hour)){

I juz wiesz co jest problemem.

ps:przenosze, bo z obiektówką na chwile obecna ma to sredni zwiazek
neonowy
o cholera... (przepraszam za slownictwo:P) ale wlasnie zdalem sobie sprawe z mojej glupoty.. Pozdrawiam Cie bardzo serdecznie i bardzo dziekuje za pomoc.
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.