OOP PHP Verständnissproblem.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • OOP PHP Verständnissproblem.

    Hi,

    kann mir jemand erkleren wie OOP in PHP funktioniert?

    Aus C# kenne ich es, dass man von einer Klasse soviele Objekte erzeugen kann wie der Rechner Speicher hat und alle Objekte sind(bis auf die Statischen Sachen) voneinander nicht abhängig.

    In PHP habe ich eine Klasse, von der ich auch mehrere Objekte erstellen möchte, aber irgentwie ist das Ergebnis total seltsam.

    In einer Datenbank habe ich 3 Einträge und möchte beim Aufruf(in einem fetch_array Schleife) immer wieder neues Objekt erzeugen und ihm eine ID übergeben, das Objekt kann durch den Konstruktor seine Eigenschaften aus der Datenbank her beziehen und sich somit aufbauen.

    Habe ich in der Datenbank die user_ids 1, 2, 2 dan ist das Ergebnis: Er zeigt mir bei der 1 richtig bei 2 falsch und bei 3 das richtige ergebnis an, setze ich die werte auf 2,1,2 sind die werte dan richtig, falsch, richtig und bei 2,2,1 demnach wieder richtig, richtig, richtig, ka was er da macht aber irgentwie ist da was anders als es sollte.
  • Versuchete Übersetzung in Deutsch:

    Das ist die Klasse:

    Quellcode

    1. <?php
    2. require_once("rights.php");
    3. //Main User########################################################################################################################
    4. class MainUser extends User{
    5. function __construct($user_id, $mysql_con){
    6. parent::__construct($user_id, $mysql_con);
    7. if(!isset($_SESSION['ssid'])){
    8. $this->setSSID(genSSID());
    9. }
    10. if($user_id = -1){
    11. if($this->CheckSSID()){
    12. $sl = mysql_query("SELECT user_id FROM sessions WHERE ssid='" . $this->getSSID() . "';", parent::getMySQL_Con());
    13. while($row = mysql_fetch_array($sl, MYSQL_ASSOC)){
    14. $user_id = $row['user_id'];
    15. }
    16. }else{
    17. $user_id = 0;
    18. }
    19. }
    20. parent::setID($user_id);
    21. parent::Refresh();
    22. }
    23. public function setSSID($value){
    24. $_SESSION['ssid'] = $value;
    25. }
    26. public function getSSID(){
    27. return $_SESSION['ssid'];
    28. }
    29. public function getSSScr(){
    30. return md5($_SERVER['DOCUMENT_ROOT'] . $_SERVER['HTTP_USER_AGENT'] . "session_secure");
    31. }
    32. public function getIP(){
    33. return $_SERVER['REMOTE_ADDR'];
    34. }
    35. public function CreateSSID(){
    36. $session_id = $this->getSSID();
    37. $session_secure = $this->getSSScr();
    38. return mysql_query(
    39. "INSERT INTO sessions (ssid, user_id, ssid_secure, ssid_last_visit_date, ssid_ip) VALUES
    40. ('$session_id', '" . parent::getID() . "', '$session_secure', NOW(), '" . $this->getIP() . "')", parent::getMySQL_Con());
    41. }
    42. public function UpdateSSID(){
    43. if($this->CheckSSID()){
    44. $ossid = $this->getSSID();
    45. $this->setSSID(genSSID());
    46. return mysql_query("UPDATE sessions SET
    47. ssid='". $this->getSSID() . "',
    48. user_id='" . $this->getID() . "',
    49. ssid_last_visit_date = NOW(),
    50. ssid_ip='" . $this->getIP() . "' WHERE ssid='$ossid'", parent::getMySQL_Con());
    51. }else{
    52. $this->setSSID(genSSID());
    53. $this->CreateSSID();
    54. }
    55. }
    56. public function CheckSSID(){
    57. $re = mysql_query("SELECT ssid, ssid_secure FROM sessions WHERE ssid = '" . $this->getSSID() . "';", parent::getMySQL_Con());
    58. if(mysql_num_rows($re) <= 0){
    59. return false;
    60. }else{
    61. while($row = mysql_fetch_array($re, MYSQL_ASSOC)){
    62. if($row['ssid_secure'] == $this->getSSScr()){
    63. return true;
    64. }else{
    65. return false;
    66. }
    67. }
    68. }
    69. }
    70. public function Login($username, $password){
    71. $sql = mysql_query("SELECT user_id, user_password FROM user WHERE user_username = '$username';", parent::getMySQL_Con());
    72. if(mysql_num_rows($sql) <= 0){
    73. return "unf";
    74. }else{
    75. while($usr = mysql_fetch_array($sql, MYSQL_ASSOC)){
    76. if($usr['user_password'] != md5($password)){
    77. return "pnc";
    78. }else{
    79. parent::setID($usr['user_id']);
    80. parent::Refresh();
    81. $this->UpdateSSID();
    82. return "lis";
    83. }
    84. }
    85. }
    86. }
    87. public function Logout(){
    88. parent::setID(0);
    89. parent::Refresh();
    90. $this->UpdateSSID();
    91. }
    92. }
    93. //##########################################################User###################################################################
    94. class User{
    95. function __construct($user_id, $mysql_con){
    96. $this->mysql_con = $mysql_con;
    97. $this->setID($user_id);
    98. $this->Refresh();
    99. }
    100. private $user_id;
    101. public function setID($value){
    102. $this->user_id = $value;
    103. }
    104. public function getID(){
    105. return $this->user_id;
    106. }
    107. private $user_username;
    108. public function setUsername($value){
    109. $this->user_username = $value;
    110. }
    111. public function getUsername(){
    112. return $this->user_username;
    113. }
    114. private $user_userpass;
    115. public function setPassword($value){
    116. $this->user_userpass = $value;
    117. }
    118. public function getPassword(){
    119. return $this->user_userpass;
    120. }
    121. private $user_email;
    122. public function setEMail($value){
    123. $this->user_email = $value;
    124. }
    125. public function getEMail(){
    126. return $this->user_email;
    127. }
    128. private $user_first_name;
    129. public function setFirstName($value){
    130. $this->user_first_name = $value;
    131. }
    132. public function getFirstName(){
    133. return $this->user_first_name;
    134. }
    135. private $user_last_name;
    136. public function setLastName($value){
    137. $this->user_last_name = $value;
    138. }
    139. public function getLastName(){
    140. return $this->user_last_name;
    141. }
    142. private $user_birth_date;
    143. public function setBirthdate($value){
    144. $this->user_birth_date = $value;
    145. }
    146. public function getBirthdate(){
    147. return $this->user_birth_date;
    148. }
    149. private $right_id;
    150. public function setRightID($value){
    151. $this->right_id = $value;
    152. }
    153. public function getRightID(){
    154. return $this->right_id;
    155. }
    156. public $mysql_con;
    157. public function setMySQL_Con($value){
    158. return $this->mysql_con;
    159. }
    160. public function getMySQL_Con(){
    161. return $this->mysql_con;
    162. }
    163. public $Can;
    164. public function Refresh(){
    165. $sql = mysql_query("SELECT * FROM user WHERE user_id='" . $this->getID() . "'", $this->mysql_con);
    166. if(mysql_num_rows($sql) <= 0){
    167. $this->setID(0);
    168. $this->setUsername("");
    169. $this->setPassword("");
    170. $this->setEMail("");
    171. $this->setFirstName("Gast");
    172. $this->setLastName("");
    173. $this->setBirthdate("");
    174. $this->setRightID(0);
    175. }else{
    176. while($rw = mysql_fetch_array($sql, MYSQL_ASSOC)){
    177. $this->setID($rw['user_id']);
    178. $this->setUsername($rw['user_username']);
    179. $this->setPassword($rw['user_userpass']);
    180. $this->setEMail($rw['user_email']);
    181. $this->setFirstName($rw['user_first_name']);
    182. $this->setLastName($rw['user_last_name']);
    183. $this->setBirthdate($rw['user_birth_date']);
    184. $this->setRightID($rw['right_id']);
    185. }
    186. }
    187. $this->Can = new Rights($this->right_id, $this->mysql_con);
    188. }
    189. }
    190. ?>
    Alles anzeigen


    Zusatzklasse:

    Quellcode

    1. <?php
    2. class Rights{
    3. function __construct($rID, $con){
    4. $this->id = $rID;
    5. if($this->id <= 0){
    6. $this->id = 1;
    7. }
    8. $this->con = $con;
    9. $this->Refresh();
    10. }
    11. private $con;
    12. public function getMySQL_Con(){
    13. return $this->con;
    14. }
    15. private $id;
    16. public function getID(){
    17. return $this->id;
    18. }
    19. private $name;
    20. public function getName(){
    21. return $this->name;
    22. }
    23. private $can_edit_posts;
    24. public function EditPosts(){
    25. return $this->can_edit_posts;
    26. }
    27. private $can_delete_posts;
    28. public function DeletePosts(){
    29. return $this->can_delete_posts;
    30. }
    31. private $right_preority;
    32. public function getRightPreority(){
    33. return $this->right_preority;
    34. }
    35. public function Refresh(){
    36. $sql = mysql_query("SELECT * FROM rights WHERE right_id='". $this->getID() . "';", $this->con);
    37. if(mysql_num_rows($sql) <= 0){ $this->id = 1; Refresh(); }else{
    38. while($right = mysql_fetch_array($sql, MYSQL_ASSOC)){
    39. $this->right_preority = $right['right_preority'];
    40. $this->name = $right['right_name'];
    41. $this->can_edit_posts = $right['right_to_edit_post'];
    42. $this->can_delete_posts = $right['right_to_delete_post'];
    43. }
    44. }
    45. }
    46. }
    47. ?>
    Alles anzeigen


    Dieser Quellcode wird auf jeder Seite ausgeföhrt:

    Quellcode

    1. //Wird auf jeder Seite ausgeführt.
    2. session_start();
    3. $MySQL = new Connection($mysql_host, $mysql_user, $mysql_pass);
    4. $MySQL->Connect();
    5. $MySQL->SelectDB($mysql_dbnm);
    6. header('Content-type: text/html; charset=UTF-8');
    7. $Me = new MainUser(-1, $MySQL->getConnection());


    Damit werden die Gästebucheinträge ausgelesen:

    Quellcode

    1. while($msg = mysql_fetch_array($posts, MYSQL_ASSOC)){
    2. $usr = new User($msg['user_id'], $MySQL->getConnection());
    3. $pdate = fDate($msg['post_date']);
    4. $user = $msg['user_first_name'] . " " . $msg['user_last_name'] . "<br><div id=\"rtitle\">&lt;" . $msg['right_name'] . "&gt;</div>";
    5. $post_msg = nl2br($msg['post_message']);
    6. if($i % 2 == 0){
    7. $fid = "firstBox";
    8. }else{
    9. $fid = "secondBox";
    10. }
    11. if(isset($msg['edit_date'])){
    12. $etimes = $msg['edit_times'];
    13. $edate = fDate($msg['edit_date']);
    14. $eauthor = $msg['author_first_name'] . " " . $msg['author_last_name'];
    15. $rights = "";
    16. if($Me->getID() > 0){
    17. $rights .= "<div id=\"rights\" align=\"right\">";
    18. if($Me->Can->EditPosts() == "all" ||
    19. ($Me->Can->EditPosts() == "all_same" && $usr->Can->getRightPreority() <= $Me->Can->getRightPreority()) ||
    20. ($Me->Can->EditPosts() == "all_under" && $usr->Can->getRightPreority() < $Me->Can->getRightPreority()) ||
    21. ($Me->Can->EditPosts() == "own" && $Me->getID() == $usr->getID())) {
    22. $rights .= "<img src=\"images/edit.png\" />";
    23. $rights .= $usr->getUsername(); //Das ist die Prüfzeile um die es unten geht.#############################################!!!!!!!!!!!!!!!!
    24. $rights .= $Me->Can->getRightPreority();
    25. }
    26. if($Me->Can->DeletePosts() == "all" ||
    27. ($Me->Can->DeletePosts() == "all_same" && $usr->Can->getRightPreority() <= $Me->Can->getRightPreority()) ||
    28. ($Me->Can->DeletePosts() == "all_under" && $usr->Can->getRightPreority() < $Me->Can->getRightPreority()) ||
    29. ($Me->Can->DeletePosts() == "own" && $Me->getID() == $usr->getID())) {
    30. $rights .= "<img src=\"images/delete.png\" />";
    31. }
    32. $rights .= "</div>";
    33. rghts;
    34. }
    35. $emsg = <<<edit_message
    36. <div id="emsg">
    37. Dieser Eintrag wurde bereits $etimes mal editiert, zuletzt von &raquo;$eauthor&laquo; ($edate)
    38. </div>
    39. edit_message;
    40. }else{$emsg = "";}
    41. echo <<<html
    42. <div id="$fid">
    43. <div id="msg_title">
    44. <div id="postDate">$pdate</div>
    45. $rights
    46. <div id="username">$user</div>
    47. </div>
    48. <div id="msg_view">
    49. $post_msg
    50. </div>
    51. $emsg
    52. </div>\n
    53. html;
    54. $i++;
    55. }
    Alles anzeigen


    Meine Datenbank ist so aufgebaut:
    Tabelle: user
    - id, Benutzername, Kennwort, Email, Vorname, Nachname, Rechteid
    Tabelle: posts
    - id, user_id, text, erstelldatum, edit_id
    Tabelle: edits
    - id, user_id, anzahl_der_änderungen, letztes_änderungs_datum
    Tabelle: rights
    - id, name, preoritet, (enumerationsspalten für die jeweiligen rechte)

    Also bei jedem Aufruf wird immer ein Objekt von der Klasse MainUser erstellt, welche von der Klasse User erbt.
    Beim Auslesen der Gästebucheinträge wird wieder ein Objekt erstellt von der Klasse User.

    Und beim Ausgeben passiert was seltsames.

    Ändere ich bei den einträgen die Userid auf 1, 2, 2(also erster Eintrag vom Benutzer mit der ID 1, 2ter eintrag vom Benutzer mit der id 2 und 3ter Eintrag vom Benutzer mit der ID 2), dann bekomme ich als ergäbnis auf der webseite angezeigt, Erster Beitrag vom Benutzer 1, zweiter Beitrag vom benutzer 1 und dritter beitrag vom benutzer 2,

    wen ich den ersten eintrag auf den Benutzer mit der ID 2 ändere, den zweiten eintrag auf benutzer id 1 und den dritten wieder auf benutzer mit der id 2 setze, dann bekomme ich beim erstem Eintrag das ergebnis vom richtigm benutzer beim zweitem Eintrag vom falschem und beimdrittem eintrag wieder vom richtigem, usw.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ViktorM ()