2016-04-02 17 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"); 
} 

?> 

そして、2番目のスクリプト:

<?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); 
      } 
    } 

} 
?> 

私の質問は - どのように私は呼び出すことができます"Delete"ボタンをクリックして "deleteSelected"関数を呼び出すと、指定されたIDを持つカテゴリが削除されますか?後

+0

'if(isset(xxx)){関数を呼び出す}' - *一言で言えば* –

答えて

2

まず、Webページのライフサイクルを覚えています。

最初にページを起動すると、既定のデータでページを構築する以外の操作は必要ありません。

ユーザーが何らかのデータを入力して[送信]ボタンを押すと、ユーザーが実際に何かしたことを知り、そのページがあなたに送信されたことを知りたいと思います。

スクリプトの最上部にPHPコードを入れて、ページが最初に読み込まれたときにリンクがクリックされたときではなく、処理のためにページが送信されたときにのみtrueになるようにします。メニュー。

元のコードにも多くのエラーがありますので、最初に気がついたときにコードを変更する前に、このすべてをよく見てください。

<?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での私の最初の経験の一つです、私はあなたのすべてのアドバイスを心に留めようとします。今度はあなたのコードを試して、私がボタンを押すと、次のようになります:致命的なエラー:定義されていないメソッドを呼び出しています:: prepare() – artur47wien

+0

うん、 '$ cat = new category($ conn); ' – RiggsFolly

+0

Thx :)多分あなたはもう1つのタスクで私を助けることができます。 。私が持っている: '/ *この機能は、すべてのカテゴリをカウントし、それを返します* /' \t 'パブリック関数countAll(){' \t \t '$クエリ= 'カテゴリSELECT * FROM';' \t \t '$ STMT =の$ this - > conn->($クエリ)を調製;' \t \t '$ stmt->実行();' \t \t '$カウント= $ stmt->をrowCount();' \t \t 'return $ count;' \t '}' コードからdに変更する必要があるものカテゴリの数量を表示しますか? – artur47wien

1

"のrequire_once( '../のconfig/database.phpで');":

if ($_POST['id'] && $_POST['delete']) deleteSelected((int) $_POST['id'] ); 
関連する問題