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 glaube, in PHP kannst du innerhalb von Funktionen auf globale Variablen nur dann zugreifen
Kann man machen, würde ich aber vermeiden. Als Funktionsparameter oder als Member der Klasse ist das sinnvoller.
Bisher sehe ich auch noch nicht den Sinn dieser Klasse.
 
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