2016-04-02 13 views
0

ich Skript wie diese haben mit Datenbank zu verbinden:Aufruf Funktion aus einer Klasse durch Klicken auf eine Schaltfläche

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

?> 

und das zweite Skript:

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

} 
?> 

Meine Frage ist - wie kann ich anrufen die "deleteSelected" -Funktion durch Klicken auf "Löschen" -Taste, so dass es die Kategorie mit der angegebenen ID löscht?

+0

'if (isset (xxx)) {rufen Sie die Funktion}' - * auf den Punkt gebracht * –

Antwort

2

zuerst den Lebenszyklus einer Web-Seite erinnern.

Zuerst starten Sie die Seite und Sie möchten nichts anderes tun, als die Seite mit den Standarddaten zu erstellen.

Dann gibt der Benutzer einige Daten ein und drückt die Senden-Schaltfläche, in diesem Fall möchten Sie wissen, dass der Benutzer tatsächlich etwas getan hat und die Seite an Sie gesendet wurde, um mit dem umzugehen, was sie getan haben.

So ist es am besten, PHP-Code an der Spitze des Skripts und innerhalb eines Tests, der nur wahr ist, wenn eine Seite zur Verarbeitung eingereicht wird, und nicht wenn die Seite zuerst von einem Klick auf einen Link oder geladen wird Speisekarte.

Außerdem gibt es viele Fehler in Ihrem ursprünglichen Code, so dass Sie besser alles sehen sollten, bevor Sie Ihren Code mit dem ersten, was Sie bemerken, ändern.

<?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

Vielen Dank. Das ist eine meiner ersten Erfahrungen mit PHP, ich werde versuchen, alle deine Ratschläge zu beachten. Jetzt habe ich Ihren Code ausprobiert und wenn ich den Knopf drücke, bekomme ich: Fataler Fehler: Aufruf zu undefinierter Methode Datenbank :: prepare() – artur47wien

+0

Yup, Tippfehler behoben '$ cat = neue Kategorie ($ conn);' – RiggsFolly

+0

Thx viel! :) Vielleicht könntest du mir mit einer weiteren Aufgabe helfen. . Ich habe: '/ * Diese Funktion alle Kategorien zählen wird und schicken Sie es * /' \t 'public function countAll() {' \t \t '$ query = 'SELECT * FROM Kategorien';' \t \t '$ stmt = $ this-> conn-> prepare ($ query);' \t \t '$ stmt-> execute();' \t \t '$ count = $ stmt-> rowCount();' \t \t 'return $ count;' \t '}' was muss ich im Code ändern, um es d zu machen Wieviele Kategorien? – artur47wien

1

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

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