Datenbank übergabe über ein Textareafeld ausführen

BlaueLampe

Grünschnabel
Hallo zusammen,
ich baue mir gerade eine Console wo ich über ein Textarea Feld in die Datenbank Schreiben, Ändern und Löschen kann.
Ich probiere schon seit Stunden rum und schaffe es einfach nicht zum laufen zu bringen.

Verwende php7.4 und php8.0

Hier mein Code den ich in das Textfeld eingebe
PHP:
 $set = array(
    'titel' => 'Ich bin ein Titel',
    'vorschau' => 'Ich bin eine Vorschau',
    'text' => 'Ich bin der Haupttext'
);
$where = array(
    'id' => 2
);
$other = '';
$c2dDB->update('blog', $set, $where, $other);


Hier mein Textareafeld
PHP:
<form name="console" method="post" action="index.php?seite=console&amp;action=run">
<p><textarea name="mysqli" id="codeEditorInhalt" class="textarea codeFormat" rows="0" cols="0"><?php if (isset($_POST['mysqli'])) { print $_POST['mysqli']; } ?></textarea></p>
<div class="clean-button">&nbsp;</div>
<p><input type="submit" value="Ausf&uuml;hren" class="button" /></p>
</form>
<script type="text/javascript">loadCodeEditor('codeEditorInhalt','php')</script>


und jetzt sollte er mir eigentlich die änderung durchführen
PHP:
if (isset($_GET['action']) && $_GET['action'] == "run") {

$query = $_POST['mysqli'];

if ($query) {
    print '<div class="okay">Der Befehl wurde erfolgreich ausgeführt:<br />' . $_POST['mysqli'] . '</div>';
} else {
    print '<div class="error">Der Befehl konnte nicht erfolgreich ausgeführt werden</div>';
}

}


Am Schluss sagt er mich auch das er es Erfolgreich geändert hätte aber es hat in der Datenbank nicht gemacht
VAR_DUMP() ausgabe
PHP:
var_dump($_POST['mysqli']);

string(161) "$set = array( 'titel' => 'Ich bin ein Titel', 'vorschau => 'Ich bin eine Vorschau', 'text' => 'Ich bin der Haupttext' ); $where = array( 'id' => '2' ); $other = ''; $c2dDB->update('blog', $set, $where, $other);"


Ich hoffe Ihr könnt mir helfen.
mit freundlichen Grüssen
 

Yaslaw

alter Rempler
Moderator
Was ist die BlackBox namens $c2dDB?
In diesem ersten Block sehe ich nix, was aus dem Textfeld genommen wird. Ich sehe auch nicht, was das bezwecken soll.

$query ist der Inhalt aus dem Form. Nachher schaust du, ob die Variabel gefüllt ist oder nicht. Und wenn ja, dann gibst dzu zurück, dass ein Befehl ausgeführt wurde. Stimmt aber nicht. Er wird nirgens ausgeführt.

UInd irgendwo vorher füllst du deinen array $set in die Variable $mysqli. Keine Ahnung wo, aber der Vardump hat den Inhalt von $set.

Grundsätzlich fehlt viel Code um zu verstehen was da abgehen soll.
 

BlaueLampe

Grünschnabel
Sorry, habe es vergessen mit dazu zu schreiben.
Das ist meine Datenbankklasse. ( $c2dDB = new db(); )

Hier der Komplette Code der Consolen-Datei:
PHP:
<?php

$c2dDB = new db();

if (isset($_GET['action']) && $_GET['action'] == "run") {
$query = $_POST['mysqli'];

if ($query) {
    print '<div class="okay">Der Befehl wurde erfolgreich ausgeführt:<br />' . $_POST['mysqli'] . '</div>';
} else {
    print '<div class="error">Der Befehl konnte nicht erfolgreich ausgeführt werden</div>';
}

}

<form name="console" method="post" action="index.php?seite=console&amp;action=run">
<p><textarea name="mysqli" id="codeEditorInhalt" class="textarea codeFormat" rows="0" cols="0"><?php if (isset($_POST['mysqli'])) { print $_POST['mysqli']; } ?></textarea></p>
<div class="clean-button">&nbsp;</div>
<p><input type="submit" value="Ausf&uuml;hren" class="button" /></p>
</form>
<script type="text/javascript">loadCodeEditor('codeEditorInhalt','php')</script>


Und Hier habe ich noch die Datenbank Klasse
PHP:
class db {

    protected $showErrors = true;

    public function __construct() {
        $this->conn = @new mysqli(GLOBAL_HOST, GLOBAL_USER, GLOBAL_PASS, GLOBAL_DB);
     
        if ($this->conn->connect_error) {
            die($this->showSQLError('Verbindung zur MySQL-Datenbank nicht möglich!', $this->conn->connect_errno, $this->conn->connect_error));
       
        }
        $this->conn->set_charset('utf8');
    }

    public function mySQLVersion() {
        return mysqli_get_server_info($this->conn);
    }

    public function createTable($tableName, $fields, $primaryKey = false){
        if(($tableName) && (count($fields)) > 0){
            $query = 'CREATE TABLE IF NOT EXISTS `' . GLOBAL_PRAEFIX . $tableName . '`(';
            foreach ($fields as $key => $value) {
                $query .= '`' . $key . '` ' . $value . ', ';
            }
         
            if($primaryKey) $query .='PRIMARY KEY (`' . $primaryKey . '`)';
            else $query = substr ($query, 0, -2);
            $query .= ');';
         
            $this->res($query);
        }
    }

    public function alterTable($tableName, $fields){
         $query = 'ALTER TABLE ' . GLOBAL_PRAEFIX . $tableName;
         foreach ($fields as $key => $value) {
            $query .= ' ADD `' . $key . '` ' . $value . ', ';
        }
        $query .= substr ($query, 0, -2);
        $this->res($query);
    }

    public function truncateTable($tableName){
        $query = 'TRUNCATE TABLE ' . GLOBAL_PRAEFIX . $tableName;
        $this->res($query);
    }

    public function dropTable($tableName){
        $query = 'DROP TABLE ' . GLOBAL_PRAEFIX . $tableName;
        $this->res($query);
    }
 
    public function res($query) {
        return $this->conn->query($query);
    }

    public function escapeString($string) {
        return $this->conn->escape_string($string);
    }

    public function numRows($res) {
        return mysqli_num_rows($res);
    }

    public function fetchRow($res) {
        return mysqli_fetch_row($res);
    }

    public function fetchAssoc($res) {
        return mysqli_fetch_assoc($res);
    }

    public function fetchArray($res) {
        return mysqli_fetch_array($res);
    }

    function result($res, $row, $field = 0) {
        $res->data_seek($row);
        $datarow = $res->fetch_array();
        return $datarow[$field];
    }

    public function setSelect($select){
        if ($select == '*'){
            return $select;
        } else {
            if (is_array($select)) {
                $sel = '';
                foreach ($select as $key) {
                    $sel .= '`' . $key . '`,';
                }
                return substr($sel, 0, -1);
            } else {
                return '`' . $select . '`';
            }
        }
    }

    public function setWhere($where) {
        if (is_array($where)) {
            if (count($where) > 0) {
                $ret = ' WHERE ';
                foreach ($where as $key => $val) {
                   $ret .= $key . '=\'' . $this->escapeString($val) . '\' AND ';
                }
                return substr($ret, 0, -5);
            } else {
                return false;
            }
        } else {
            if ($where == true) {
                return ' WHERE ' . $where;
            } else {
                return false;
            }
        }
    }

    public function select($select, $tableName, $where, $other){
        $sql = 'SELECT ' . $this->setSelect($select) . ' ';
        $from = ' FROM ' . GLOBAL_PRAEFIX . $tableName;
        $where = $this->setWhere($where);
   
        $sql .= $from . ' ' . $where . ' ' . $other;

        return $this->res($sql);
    }
 
    public function insert($tableName, $data, $other) {
        $sql = 'INSERT INTO ' . GLOBAL_PRAEFIX . $tableName;
        $columns = '(';
        $values = ' VALUES(';

        foreach ($data as $field => $value) {
            $columns .= '`' . $field . '`,';
            $values .= '\'' . $this->escapeString($value) . '\',';      
        }
     
        $columns = substr($columns, 0, -1);
        $values = substr($values, 0, -1);
        $columns .= ')';
        $values .= ')';

        $sql .= $columns . $values . ' ' . $other;
     
        return $this->res($sql);
    }

    public function updateSort($tableName, $set, $where, $other) {
        $query = 'UPDATE ' . GLOBAL_PRAEFIX . $tableName . ' ';
        $s = 'SET ';
     
        foreach ($set as $key => $value) {
            $s .= '' . $key . '=' . $this->escapeString($value) . ',';
        }

        $query .= substr($s, 0, -1);
        $query .= $this->setWhere($where);
        $query .= $other;
        $this->res($query);
    }
 
    public function update($tableName, $set, $where, $other) {
        $query = 'UPDATE ' . GLOBAL_PRAEFIX . $tableName . ' ';
        $s = 'SET ';
     
        foreach ($set as $key => $value) {
            $s .= '`' . $key . '`=\'' . $this->escapeString($value) . '\',';
        }
        $query .= substr($s, 0, -1);
        $query .= $this->setWhere($where);
        $query .= $other;
        $this->res($query);
    }

    public function delete($tableName, $where, $other) {
        $query  = 'DELETE FROM ' . GLOBAL_PRAEFIX . $tableName;
        $query .= $this->setWhere($where);
        $query .= $other;
        $this->res($query);
    }

    public function showSQLError($message, $error_number, $error_message) {
        if ($this->showErrors) {
            $error = '<p style="color: #777; display: block; text-align: center; padding: 30px; font: normal 12px Monospace; line-height: 20px;">';
            $error .= 'Fehler -> Vorgang gestoppt/abgebrochen!';
            $error .= '<br />';
            $error .= $message;
            $error .= '<br />';
            $error .= '<br />';
            $error .= '--';
            $error .= '<br />';
            $error .= '<br />';
            if (!empty($error_number)) {
                $error .= '#'.$error_number;
                $error .= '<br />';
            }
            $error .= $error_message;
            $error .= '</p>';

            return $error;
        }
    }

    public function close() {
        mysqli_close($this->conn);
    }

}

?>

Gruss
 
Zuletzt bearbeitet:

BlaueLampe

Grünschnabel
Ok, dachte allein das es über das Textarea übergeben wird, wird es ausgeführt was es ja eigentlich tun sollte.
PHP:
$set = array(
    'titel' => 'Ich bin ein Titel',
    'vorschau' => 'Ich bin eine Vorschau',
    'text' => 'Ich bin der Haupttext'
);
$where = array(
    'id' => 2
);
$other = '';
$c2dDB->update('blog', $set, $where, $other);

Wie kann ich es dann Programmieren das es dann funktioniert?
 

Yaslaw

alter Rempler
Moderator
Ich habe noch den Null Durchblick.
In deinem $set hast du ja nix aus dem Formular drin. Da musst du den Formularinhalt irgendwie auswerten.
Aber du willst ja ein SQL-Statement im Formular eingeben. Dass passt nicht auf deine update-Funktion.
 

BlaueLampe

Grünschnabel
Habe es jetzt ein bisschen umgeschrieben, habe jetzt in meiner Datenbank Klasse dies hinzugefügt:
PHP:
public function console($query) {
        return mysqli_query($this->conn, $query);
    }

Wenn ich jetzt die eingabe so mache geht es
PHP:
UPDATE blog SET titel = 'Ich bin ein Titel', vorschau = 'Ich bin eine Vorschau', text = 'Ich bin der Haupttext' WHERE id = 2

kann es vieleicht sein dass das array und die $ Zeichen nicht richtig übergeben werden?