2016-04-02 3 views
0

я сценарий, как это, чтобы соединиться с базой данных:Вызов функции из класса, нажав на кнопку

<?php 

class Database { 

    public function getConnection() { 
     $result = false; 
     try { 
      $result = new PDO('mysql:host=localhost;dbname=college', 'root', ''); 
     } catch(PDOException $e) { } 
     return $result; 
    } 
} 

$db = new Database(); 
$conn = $db->getConnection(); 
if (!$conn) { 
die("Error connecting to the database"); 
} 

?> 

И второй сценарий:

<?php 
require_once('../config/Database.php'); 
?> 


<form action="" method="post"> 
<label>Category id :</label> 
<input type="text" name="id" id="id" required="required" placeholder="Please  Enter Id"/><br /><br /> 
<input type="submit" value=" Delete " name="delete"/><br /> 
</form> 
</div> 

<?php 
class Category { 
    private $conn; 
    private $id; 
    private $name; 
    private $description; 
    private $created; 

    public function __construct($db) { 
     $this->conn = $db; 
    } 

    /* This function will get the ids of categories as 
    parameters and delete them from database.*/ 

    public function deleteSelected($ids) { 
     $query = 'DELETE FROM categories WHERE id='; 

     if (is_array($ids)) { 
      foreach ($ids as $id) 
       $stmt = $this->conn->prepare($query)->execute($query.$id); 
     } 
     else { 
      $stmt = $this->conn->prepare($query)->execute($query.$ids); 
      } 
    } 

} 
?> 

Мой вопрос - как я могу позвонить «deleteSelected», нажав кнопку «Удалить», чтобы удалить категорию с заданным идентификатором?

+0

'если (Исеть (ххх)) {вызовите функцию}' - * в двух словах * –

ответ

2

Первый помню жизненный цикл веб-страницы.

Сначала вы запустите страницу, и вы не хотите ничего делать, кроме как создать страницу со своими данными по умолчанию.

Затем пользователь вводит некоторые данные и нажимает кнопку отправки, в этом случае вы хотите знать, что пользователь действительно что-то сделал, и страница была отправлена ​​вам, чтобы разобраться с тем, что они сделали.

Так что лучше всего разместить PHP-код в верхней части скрипта и внутри теста, который будет истинным только при отправке страницы для обработки, а не при первой загрузке страницы с кликом по ссылке или меню.

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

<?php 
require_once('../config/Database.php'); 

class Category { 
    private $conn; 
    private $id; 
    private $name; 
    private $description; 
    private $created; 

    public function __construct($db) { 
     $this->conn = $db; 
    } 

    /* This function will get the ids of categories as 
     parameters and delete them from database.*/ 

    public function deleteSelected($ids) { 
     // notice I added a prameter to this query 
     $query = 'DELETE FROM categories WHERE id=?'; 

     // one of the points of using a prepared query is that 
     // you can prepare it once and then execute it many time 
     // with different paramters 

     $stmt = $this->conn->prepare($query); 

     if (is_array($ids)) { 
      foreach ($ids as $id) 
       $stmt->execute([$id]); 
      } 
     } else { 
      $stmt->execute([$ids]); 
     } 
    } 

} 

// did user press submit 
if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    // what button did they press 
    if (isset($_POST['delete'], $_POST['id'])) { 
     // we have been request to delete 
     // and we have an id to control the delete 

     // instantiate the class we need 
     $cat = new Category($conn); 

     // clean up our input before we us it in a SQL query 
     $id = filter_input (INPUT_POST , 'id', FILTER_SANITIZE_NUMBER_INT); 

     // call the method we want to run 
     $cat->deleteSelected($id); 
    } 
} 
?> 


<form action="" method="post"> 
<label>Category id :</label> 
<input type="text" name="id" id="id" required="required" placeholder="Please  Enter Id"/><br /><br /> 
<input type="submit" value="Delete" name="delete"/><br /> 
</form> 
</div> 
+0

Большое спасибо. Это один из моих первых опытов с php, я постараюсь учесть все ваши советы. Теперь я попробовал свой код, и когда я нажимаю кнопку, я получаю: Fatal error: Call to undefined method Database :: prepare() – artur47wien

+0

Yup, typo fixed '$ cat = new Category ($ conn);' – RiggsFolly

+0

Thx много! :) Может быть, вы могли бы помочь мне с еще одной задачей. . У меня есть: '/ * Эта функция будет подсчитывать все категории и вернуть его * /' \t 'общественная функция countAll() {' \t \t '$ запрос = 'SELECT * FROM категорий';' \t \t '$ STMT = $ этом-> conn-> подготовки ($ запроса);' \t \t '$ stmt-> Execute();' \t \t '$ кол = $ stmt-> ROWCOUNT();' \t \t 'return $ count;' \t '}' что мне нужно изменить в коде от вас, чтобы сделать его d isplay количество категорий? – artur47wien

1

После "require_once ('../ конфигурации/database.php');":

if ($_POST['id'] && $_POST['delete']) deleteSelected((int) $_POST['id'] );