Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dla wytrwałych ( problem z obiektowością)
Forum PHP.pl > Forum > PHP
revol
Cześć, na wstępie powiem że jestem zielony i moja sprawa z którą piszę może wydać się banalna, ale powoli tracę siły więc postanowiłem zwrócić się o pomoc.

Piszę projekt aplikacji ( tak dla sportu ) który będzie miał za zadanie obsługiwać bazę danych firm. Wszystko szło dobrze do póki nie zabrałem się za edycję.

Mam plik poprzez który wywołuję daną firmę "do trybu edycji" :
  1. <?php
  2. include_once('./class/firma.php');
  3.  
  4. $id = $_GET['id'] or die('WYSTĄPIŁ BŁĄD.'); // id_firmy przekazywane przez $_GET
  5.  
  6. echo "<form method=\"POST\" action=\"#\">";
  7. $firma = new Firma();
  8. $firma->getFromDB($id);
  9. $firma->show();
  10.  
  11. echo "<input type=\"button\" id=\"wstecz\" name=\"wstecz\" value=\"Wstecz\" onclick=\"window.location.href='index.php?p=wyswietl&page=".$_SESSION['searchPost']['searchPage']."'\">";
  12. echo "<input type=\"submit\" name=\"edycja\" value=\"Edytuj\">";
  13. echo "</form>";
  14.  
  15. if (isset($_POST['edycja'])) {
  16.  
  17. $post = $_POST;
  18. $firma->setIdFirmy($id); // wywołanie funkcji setIdFirmy (z klasy firma) z parametrem $id -> po tym odwołuję się do edytowanej firmy
  19.  
  20.  
  21. $dane = new DaneFirmy(); // tworze obiekt DaneFirmy
  22. $dane->getValues($post); // przypisuje dane firmy zapisane do $_POST do tablicy $values[] (metoda getValues w klasie DaneFirmy)
  23. $dane->edit($id); // wywołuje funkcję edit() z parametrem $id ustawionym (metoda w klasie danefirmy)
  24.  
  25. // sekcja edycji clasy Kontakt
  26. $kontakt = new Kontakt();
  27. $kontakt->getValues($post);
  28. $kontakt->delFromKon($id);
  29.  
  30.  
  31. [b] // sekcja edycji KontaktPerson
  32. $firma2 = new Firma();
  33. $firma2->getValues($post);
  34. $firma2->delFromDB($id);
  35. $firma2->add($id);
  36. $firma2->displayKonPer();[/b]
  37.  
  38. }
  39. ?>


Problem polega na tym że sekcja edycji KontaktPerson nie działa jak należy (reszta jest ok i działa super).
Ten tryb edycji danej firmy wygląda tak :


Teraz dodaje sobie trzy firmy. Pole na pierwszę osobę kontaktową wyświetla się domyślnie. Kolejne dwa pola uruchamiam plusem To co wyświetla się pod przyciskiem wstecz i edytuj to jest to co leci do bazy. Jest ok wszystkie 3 firmy dodały się bez problemu.


Teraz usuwam firmę osatnią od dołu używając znaku minus (przy tym obiekcie), wygląda to tak :

Proszę się nie sugerować tym to jest poniżej przycisków Wstecz i Edytuj bo edycja jeszcze nie była kliknięta. Teraz zatwierdzam Edytuj i mam coś takiego :


Dlaczego mimo iż przez formularz przekazuje dwie firmy zapisuje się tylko jedna questionmark.gif? O co tu chodzi questionmark.gif? Zasada jest prosta po każdym wciśnieciu Edytuj usuwam wszystkie wpisy w bazie z podanym id firmy i zastępuję je tym co obecnie jest w formularzu.

markuz
A może tak jakieś pytanie/problem?
Pyton_000
i... ?
revol
Reszta kodu wygląda następująco :
Klasa kontakt person ( zawiera porstawowe metody ) :
  1. <?php
  2.  
  3. class KontaktPersonalny{
  4.  
  5. private $text;
  6. private $varName;
  7. private $tableId;
  8. private $class;
  9. private $values;
  10.  
  11. public function __construct($text, $varName, $tableId, $_class = ''){
  12. $this->text = $text;
  13. $this->varName = $varName;
  14. $this->tableId = $tableId;
  15. $this->class = $_class;
  16. }
  17.  
  18. public function show(){
  19.  
  20. if (!isset($this->values[0])){
  21. $post = array();
  22. $this->getValues($post);
  23. }
  24.  
  25. echo "<table id=\"".$this->tableId."\" class=\"".$this->class."\">
  26. <thead><tr><td>$this->text</td></tr></thead>
  27. <tbody>
  28. <tr><td>
  29. <table>
  30. <tr>
  31. <td>Osoba Kontaktowa: </td>
  32. <td><input type=\"text\" name=\"".$this->varName."Osoba1\" id=\"".$this->varName."Osoba1\" value=\"".$this->values[0]['osoba']."\"></td>
  33. </tr><tr>
  34. <td>Stanowisko: </td>
  35. <td><input type=\"text\" name=\"".$this->varName."Stanowisko1\" id=\"".$this->varName."Stanowisko1\" value=\"".$this->values[0]['stanowisko']."\"></td>
  36. </tr><tr>
  37. <td>Telefon: </td>
  38. <td><input type=\"text\" name=\"".$this->varName."Tel11\" id=\"".$this->varName."Tel11\" value=\"".$this->values[0]['tel1']."\"></td>
  39. </tr><tr>
  40. <td>Komorka: </td>
  41. <td><input type=\"text\" name=\"".$this->varName."Tel21\" id=\"".$this->varName."Tel21\" value=\"".$this->values[0]['tel2']."\"></td>
  42. </tr><tr>
  43. <td>E-Mail: </td>
  44. <td><input type=\"text\" name=\"".$this->varName."Mail1\" id=\"".$this->varName."Mail1\" value=\"".$this->values[0]['mail']."\" onblur=\"sprAddrow(this, 'mail')\"></td>
  45. </tr><tr>
  46. <td><input type=\"button\" id=\"dbutton1\" value=\"+\" onclick=\"addRowPerson('".$this->tableId."', '".$this->varName."')\"></td>
  47. </tr>
  48. </table></td>
  49. <td><textarea name=\"".$this->varName."Not1\" id=\"".$this->varName."Not1\" cols=\"8\" rows=\"8\">".$this->values[0]['notatki']."</textarea></td>
  50. </tr>";
  51.  
  52. if (isset($this->values[1])){
  53. $i=1;
  54. while(isset($this->values[$i])){
  55. echo "<tr><td>
  56. <table>
  57. <tr>
  58. <td>Osoba Kontaktowa ".($i+1).": </td>
  59. <td><input type=\"text\" name=\"".$this->varName."Osoba\"".($i+1)." id=\"".$this->varName."Osoba\"".($i+1)." value=\"".$this->values[$i]['osoba']."\"></td>
  60. </tr><tr>
  61. <td>Stanowisko: </td>
  62. <td><input type=\"text\" name=\"".$this->varName."Stanowisko\"".($i+1)." id=\"".$this->varName."Stanowisko\"".($i+1)." value=\"".$this->values[$i]['stanowisko']."\"></td>
  63. </tr><tr>
  64. <td>Telefon: </td>
  65. <td><input type=\"text\" name=\"".$this->varName."Tel1\"".($i+1)." id=\"".$this->varName."Tel1\"".($i+1)." value=\"".$this->values[$i]['tel1']."\"></td>
  66. </tr><tr>
  67. <td>Komorka: </td>
  68. <td><input type=\"text\" name=\"".$this->varName."Tel2\"".($i+1)." id=\"".$this->varName."Tel2\"".($i+1)." value=\"".$this->values[$i]['tel2']."\"></td>
  69. </tr><tr>
  70. <td>E-Mail: </td>
  71. <td><input type=\"text\" name=\"".$this->varName."Mail\"".($i+1)." id=\"".$this->varName."Mail\"".($i+1)." value=\"".$this->values[$i]['mail']."\" onblur=\"sprAddrow(this, 'mail')\"></td>
  72. </tr><tr>
  73. <td><input type=\"button\" id=\"dbutton\"".($i+1)." value=\"+\" onclick=\"addRowPerson('".$this->tableId."', '".$this->varName."')\">
  74. <input type=\"button\" id=\"rbutton\"".($i+1)." value=\"-\" onclick=\"delRow('".$this->tableId."')\"></td>
  75. </tr>
  76. </table></td>
  77. <td><textarea name=\"".$this->varName."Not\"".($i+1)." id=\"".$this->varName."Not\"".($i+1)." cols=\"8\" rows=\"8\">".$this->values[$i]['notatki']."</textarea></td>
  78. </tr>";
  79. $i++;
  80. }
  81. }
  82.  
  83. echo "</tbody>
  84. </table>";
  85. }
  86.  
  87. public function getValues(Array $post){
  88. $i = 1;
  89.  
  90. while (isset($post[$this->varName."Osoba".$i])){
  91. $temp = array();
  92.  
  93. if (!empty($post[$this->varName."Osoba".$i])) $temp['osoba'] = $post[$this->varName."Osoba".$i];
  94. else $temp['osoba'] = '';
  95. if (!empty($post[$this->varName."Stanowisko".$i])) $temp['stanowisko'] = $post[$this->varName."Stanowisko".$i];
  96. else $temp['stanowisko'] = '';
  97. if (!empty($post[$this->varName."Tel1".$i])) $temp['tel1'] = $post[$this->varName."Tel1".$i];
  98. else $temp['tel1'] = '';
  99. if (!empty($post[$this->varName."Tel2".$i])) $temp['tel2'] = $post[$this->varName."Tel2".$i];
  100. else $temp['tel2'] = '';
  101. if (!empty($post[$this->varName."Mail".$i])) $temp['mail'] = $post[$this->varName."Mail".$i];
  102. else $temp['mail'] = '';
  103. if (!empty($post[$this->varName."Not".$i])) $temp['notatki'] = $post[$this->varName."Not".$i];
  104. else $temp['notatki'] = '';
  105.  
  106. $this->values[$i-1] = $temp;
  107. $i++;
  108. }
  109. return $this->values;
  110. }
  111.  
  112. public function display(){
  113. $i=0;
  114. while (isset($this->values[$i]['osoba']) && !empty($this->values[$i]['osoba'])){
  115. echo "<b>Osoba Kontaktowa </b>".($i+1).": ".$this->values[$i]['osoba']."<br>";
  116. echo "<b>Stanowisko: </b>".$this->values[$i]['stanowisko']."<br>";
  117. echo "<b>Telefon: </b>".$this->values[$i]['tel1']."<br>";
  118. echo "<b>Komórka: </b>".$this->values[$i]['tel2']."<br>";
  119. echo "<b>E-Mail: </b>".$this->values[$i]['mail']."<br>";
  120. $i++;
  121. }
  122. }
  123.  
  124.  
  125. public function addToDB($id){
  126. $i = 0;
  127. $mysqli = connect();
  128.  
  129. $this->values = array_reverse($this->values);
  130.  
  131. while (isset($this->values[$i]['osoba']) && !empty($this->values[$i]['osoba'])){
  132. $mysqli->query("INSERT INTO `kontakt_person` (id_firmy, osoba, stanowisko, tel1, tel2, mail, notatki) VALUES ('$id', '{$this->values[$i]['osoba']}' , '{$this->values[$i]['stanowisko']}', '{$this->values[$i]['tel1']}', '{$this->values[$i]['tel2']}', '{$this->values[$i]['mail']}', '{$this->values[$i]['notatki']}')");
  133. $i++;
  134. }
  135. $mysqli->close();
  136. }
  137.  
  138. public function getFromDB($id){
  139. $mysqli = connect();
  140. $result = $mysqli->query("SELECT * FROM `kontakt_person` WHERE `id_firmy` = '$id'");
  141. $i = 0;
  142. if($result->num_rows > 0){
  143. if(isset($this->values) && !empty($this->values[0])){
  144. unset($this->values);
  145. $this->values = array();
  146. }
  147. }
  148. while ($row = $result->fetch_assoc()){
  149. $this->values[$i]['osoba'] = $row['osoba'];
  150. $this->values[$i]['stanowisko'] = $row['stanowisko'];
  151. $this->values[$i]['tel1'] = $row['tel1'];
  152. $this->values[$i]['tel2'] = $row['tel2'];
  153. $this->values[$i]['mail'] = $row['mail'];
  154. $this->values[$i]['notatki'] = $row['notatki'];
  155. $i++;
  156. }
  157. $mysqli->close();
  158. }
  159.  
  160. ////// testujemy
  161.  
  162.  
  163. public function delFromKonPerson($id) {
  164. $mysqli = connect();
  165.  
  166. $mysqli->query("DELETE FROM `kontakt_person` WHERE `id_firmy` = '$id'");
  167.  
  168. $mysqli->close();
  169. }
  170.  
  171. public function addToDB2($id){
  172. $i = 0;
  173. $mysqli = connect();
  174.  
  175. $this->values = array_reverse($this->values);
  176.  
  177. while (isset($this->values[$i]['osoba']) && !empty($this->values[$i]['osoba'])){
  178. $mysqli->query("INSERT INTO `kontakt_person` (id_firmy, osoba, stanowisko, tel1, tel2, mail, notatki) VALUES ('$id', '{$this->values[$i]['osoba']}' , '{$this->values[$i]['stanowisko']}', '{$this->values[$i]['tel1']}', '{$this->values[$i]['tel2']}', '{$this->values[$i]['mail']}', '{$this->values[$i]['notatki']}')");
  179. $i++;
  180. }
  181. $mysqli->close();
  182. }
  183. }
  184. ?>


I fragment "kontenera" czyli klasy Firma zbierającej wszystko w całość. To jej metody używam w wywołaniu w końcowym kodzie do edycji :
  1. <?php
  2. include_once ('./class/danefirmy.php');
  3. include_once ('./class/kontakt.php');
  4. include_once ('./class/kontaktperson.php');
  5. include_once ('./class/dzialalnosc.php');
  6.  
  7. class Firma{
  8.  
  9. private $danefirmy;
  10. private $kontakt;
  11. private $kontaktperson;
  12. private $profil;
  13. private $idFirmy;
  14.  
  15. public function __construct(){
  16. $this->danefirmy = new DaneFirmy();
  17. $this->kontakt = new Kontakt();
  18. $this->kontaktperson = new KontaktPersonalny("Kontakt Personalny", "person", "kontaktpersonalny");
  19. $this->profil = new ProfilDzialalnosci("Profil Dzialalnosci", "profil", "profildzialalnosci");
  20. }
  21.  
  22. public function show(){
  23. $this->danefirmy->show();
  24. echo "<table><tr><td>";
  25. $this->profil->show();
  26. echo "</td><td>";
  27. $this->kontakt->show();
  28. echo "</td></tr>";
  29. $this->kontaktperson->show();
  30. }
  31.  
  32. public function getValues($post){
  33. $this->danefirmy->getValues($post);
  34. $this->kontakt->getValues($post);
  35. $this->kontaktperson->getValues($post);
  36. $this->profil->getValues($post);
  37. }
  38.  
  39. /**
  40.  * Funkcja ustawia pod zmienną klasy $idFirmy wartość $id
  41.  * która jest pobierana np. z $_GET -> patrz edycja.php
  42.  * @param $id
  43. */
  44.  
  45. public function setIdFirmy($id) {
  46. $this->idFirmy = $id;
  47. }
  48.  
  49. ///////////////////////////////////////// testujemy
  50.  
  51. public function delFromDB($id) {
  52. $this->kontaktperson->delFromKonPerson($id);
  53. }
  54.  
  55. public function getValKonPer($post) {
  56. $this->kontaktperson->getValues($post);
  57. }
  58.  
  59. public function add($id) {
  60. $this->kontaktperson->addToDB2($id);
  61. }
  62.  
  63. public function displayKonPer() {
  64. $this->kontaktperson->display();
  65. }
  66. /////////////////////////////////////////////////////////////////////
  67. }
  68. ?>
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.