Модели баз данных Php

#php #oop #class #object #model

#php #ооп #класс #объект #Модель

Вопрос:

 <?php
 class ann {

      public function __construct($context, $orgs_id, $created_at) {
         $this->context = $context;
         $this->orgs_id = $orgs_id;
         $this->created_at = $created_at;
     }

     function create(){
         $createann = mysql_query("INSERT INTO anns(context,
 orgs_id, created_at)
 VALUES('$this->context',
 $this->orgs_id, '$this->created_at'");
         if($createann) echo "Duyuru Başarıyla Eklendi"; else echo "Duyuru
 Eklenemedi";
     }
     function read($id){
         $readann = mysql_query("SELECT * FROM anns WHERE id = $id");
         $context = mysql_result($readann,0, "context");
         $orgs_id = mysql_result($readann,0, "orgs_id");
         $created_at = mysql_result($readann,0,
 "created_at");

         $ann = new ann($context, $orgs_id, $created_at);

         return $ann;
     }
     function update($id, $context){
         $updateann = mysql_query("UPDATE anns SET context =
 '$context' WHERE id = $id");
         if($updateann) echo "Update success"; else echo
 "Update failed";
     }
     function delete($id){
         $deleteann = mysql_query("DELETE FROM anns WHERE id
 = $id");
         if($deleteann) echo "Delete success"; else echo "Delete not success";
     }
     //crud fonksiyonlari burda bitiyor 
}

?>
  

Здесь что-то не так с нашей логикой, но мы очень новички в php. Мы пытались создать rails-подобные модели, но, по-моему, что-то в нашей нотации class-object неверно. Итак, код не сработал. Мы даже не можем создать какой-либо объект с его помощью.
Спасибо вам, ребята

Комментарии:

1. Комментарий вашего кода внизу удаляет закрывающий } для класса. Эта ошибка только в сообщении?

2. да, это была просто ошибка в сообщении, спасибо, что указали

3. спасибо за предупреждения о внедрении, но мы используем фильтр до того, как строки поступят для создания объекта.

Ответ №1:

context orgs_id и created_at должны быть сначала должны быть объявлены как общедоступные, частные или защищенные, прежде чем вы будете их использовать.

В вашем create методе вы не фильтруете пользовательский ввод. Это может привести к SQL-инъекции вашего приложения, вам всегда нужно фильтровать пользовательский ввод. Используйте либо mysql_real_escape_string, либо подготовленный statment с помощью PDO.

Вы можете ознакомиться с этим руководством.

Ответ №2:

две вещи (которые, возможно, применимы только к вашему приведенному здесь образцу кода):

  1. В вашем примере вы не закрываете свой класс, потому что последнее «}» закомментировано.
  2. Вы никогда не открывали соединение с вашей базой данных, поэтому запрос завершится ошибкой.

Ответ №3:

несколько наблюдений:

объявление атрибутов в конструкторе возможно, но это не элегантно. Я бы предпочел сделать:

 class ann {
  private $context;
  private $orgs_id;
  

оператор «->» не будет работать внутри строки. Вам нужно будет объединить запрос:

 "INSERT INTO anns(context,orgs_id, created_at) VALUES('".$this->context."',".$this->orgs_id".", '".$this->created_at."'"
  

но будьте осторожны при sql-инъекции

Остальное должно быть в порядке! Удачи.

Комментарии:

1. Вы можете использовать объектные операторы внутри строк, если обернете их в {} например, «Значение свойства равно {$object-> свойство}»;

2. Здесь также есть очень хороший учебник о хороших методах ООП на PHP: phpfreaks.com/tutorial/oo-php-part-2-boring-oo-principles