SQL abfrage aus Datenbank

Mal eine weitere frage.

Kann ich die operationen in einer klasse erstellen und diese aufrufen?
Ich habs mal so versucht:

PHP:
.
.
.
    class operationen {

function markieren() {
 
    $auswaehlen = "SELECT Markiert FROM Liste WHERE id =".$_GET["id"]."";
$auswahl = $verbindung->query($auswaehlen) or die($verbindung->error);
$row = $auswahl->fetch_assoc();
   
    if($row['Markiert'] == '0') {
    $update = "UPDATE Liste SET Markiert ='1' WHERE id =".$_GET["id"]."";
 
    } else {
    $update = "UPDATE Liste SET Markiert ='0' WHERE id =".$_GET["id"]."";
    }
     mysqli_query($verbindung, $update);
   
}
.
.
.
    if(isset($_GET["action"]) && $_GET["action"] == "mark" && isset($_GET["id"])) {

    $del = new operationen();
    $del->markieren();
    }

Bekomme dabei folgende fehlermeldung:
Code:
 Uncaught Error: Call to a member function query() on null.....


Ich glaube der verbindet sich nicht hier mit der Datenbank:
PHP:
$auswahl = $verbindung->query($auswaehlen) or die($verbindung->error);

Außerhalb meiner Klasse habe ich ja am Anfang eine Verbindung mit:
PHP:
$verbindung = mysqli_connect($host, $user, $password);
die noch nicht geschlossen ist.

Auch wenn ich in der Klasse nochmal neu verbinde, geht es nicht.

Wenn ich zur Probe einfach echo ausgebe, wie:
PHP:
class operationen {
 
function markieren() {
 
    echo "test";
    
}
dann wird dies auch ausgegeben.
 
Zuletzt bearbeitet:
Die steht ganz oben in meiner php datei.

PHP:
$verbindung = mysqli_connect($host, $user, $password);
.
.
.
    class operationen {

function markieren() {
 
    $auswaehlen = "SELECT Markiert FROM Liste WHERE id =".$_GET["id"]."";
$auswahl = $verbindung->query($auswaehlen) or die($verbindung->error);
$row = $auswahl->fetch_assoc();
  
    if($row['Markiert'] == '0') {
    $update = "UPDATE Liste SET Markiert ='1' WHERE id =".$_GET["id"]."";
 
    } else {
    $update = "UPDATE Liste SET Markiert ='0' WHERE id =".$_GET["id"]."";
    }
     mysqli_query($verbindung, $update);
  
}
.
.
.
    if(isset($_GET["action"]) && $_GET["action"] == "mark" && isset($_GET["id"])) {

    $del = new operationen();
    $del->markieren();
    }
 
Ich glaube, in PHP kannst du innerhalb von Funktionen auf globale Variablen nur dann zugreifen, wenn du
PHP:
function foo() {
  global $verbindung:

  /* ... */
}
schreibst.

Wenn du auf sauberen Code aus bist, würde ich von globalen Variablen abraten und noch einige Änderungen mehr vorschlagen. Etwa greifst du auf $_GET innerhalb der Klasse zu. Das ist i. Allg. sehr enges Coupling.
 
Zuletzt bearbeitet:
Ich würde die Verbindung gleich dem Konstruktor übergeben. Weil ich da noch nicht so sattelfest bin, habe ich einen Test gemacht:
Code:
class Operationen
{
    public function __construct($conn)
    {
        $this->conn = $conn;
    }
    public function oneop($id)
    {
        var_dump($id);
        var_dump($this->conn);
    }
}
$op = new Operationen('theconn');
$op->oneop('7');
 
@Sempervivum
Kann man so machen, allerdings würde ich soetwas nur dann machen, wenn ich die Variable in mehreren Funktionen benötige. Ansonsten würde ich Funktionsparameter bevorzugen.
 
Zurück