Datensatz mit Hilfe von Variabel Löschen

  • PHP

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    Datensatz mit Hilfe von Variabel Löschen

    Hallo zusammen,

    Ich würde gerne einen Datensatz mit Hilfe einer Variabel löschen:

    PHP-Quellcode

    1. ​if(isset($_REQUEST['pendenzen_loeschen']))
    2. {
    3. $stmt = $db->query("DELETE FROM tbl_pendenzen WHERE ID = '$ba'");
    4. }


    Jedoch Funktioniert dies nicht.
    Kann mir jemand Helfen?
    @schnibli

    probier' das:

    PHP-Quellcode

    1. <?php
    2. if(isset($_REQUEST['pendenzen_loeschen'])){
    3. $stmt = $db->exec("DELETE FROM `tbl_pendenzen` WHERE `ID` = '" . $ba . "'");
    4. }
    5. ?>


    Es muss $db->exec() aufgerufen werden. Methode query() ist nur für SELECT und VIEW Abfragen u.ä. wo man etwas zurückbekommt.

    Außerdem stell noch folgendes sicher:
    - Der Tabellenname ist korrekt?
    - Das Feld "id" ist in der Datenbank wirklich groß Geschrieben ("ID" oder "id" oder "Id"?)
    - Tabellennamen und Spaltennamen gehören immer in Backticks (`tbl_dingsbums`)
    - Verbindung zur Datenbank besteht definitiv?
    - Du hast mit Sicherheit deine Datenbankklasse instanziiert? $db ist tatsächlich ein Objekt der Datenbank-Klasse? Oder greift ->exec direkt auf die statische Methode exec(...) der Klasse PDO zu (PDO::exec, $db = new PDO(...))?
    - Deine Variable $ba ist auch wirklich ein Integer? Also der Wert enthält nur Zahlen? Ich geh' davon aus dass deine Spalte "id" in der Datenbank entweder Byte oder INT ist. Und auto_increment ist sie wohl auch.

    Das da oben ist leider alles an Code was wir von dir haben. Vielleicht hakt es ja noch an anderen Stellen. Falls mein o.g. korrigierter Code das Problem nicht löst, brauchen wir mehr von dir ;)

    @Marcel1997
    2. Fehlt hinter dem DELETE nicht noch ein * oder was du löschen willst?

    Nein. Das "*" (gleichbedeutend mit "Alle Spalten") ist überflüssig weil DELETE FROM ja eh nur dafür da ist, einen gesamten Datensatz zu löschen. Man kann es optional hinzufügen, ja, aber es macht rein logisch betrachtet keinen Sinn.


    Link :thumbup:
    Hello World
    von hier kommt $ba

    PHP-Quellcode

    1. $sql = "SELECT *
    2. FROM tbl_pendenzen
    3. WHERE
    4. AnlagenNr = '".mysql_real_escape_string($_GET['ida'])."'" ;
    5. $erg = $db->query ($sql) or die ("Fehlermeldung=".$db->error());
    6. while(($row = $erg->fetch_assoc()) !== Null){
    7. $ba=$row["ID"];
    8. $bb=$row["AnlagenNr"];
    9. $bc=$row["Datum"];
    10. $bd=$row["Bemerkung"];
    11. }

    Dies Funktioniert ... direkt unten drann ist:
    // Pendenzen loeschen

    PHP-Quellcode

    1. if(isset($_REQUEST['pendenzen_loeschen']))
    2. {
    3. $stmt = $db->exec("DELETE FROM `tbl_pendenzen` WHERE `ID` = '" . $ba . "'");
    4. }
    5. ?>


    Jetzt kommt folgender Fehler:
    Fatal error: Call to undefined method mysqli::exec() in /volume1/web/anlagen/anlagendaten/anlage_allgemein.inc.php on line 157

    Die Verbindung steht da die Daten Abgefrage Funktioniert.

    Verbindung:

    PHP-Quellcode

    1. <?php
    2. include('config.inc.php');
    3. //DB-Verbindungs
    4. $db=mysqli_connect($url,$user,$pass,$dbName);
    5. $db->set_charset('utf8');
    6. if ($db==false){
    7. echo "Keine Verbindung m&ouml;glich!";
    8. exit;
    9. }
    10. //auswahl der DB
    11. $db->select_db($dbName)
    12. or exit ("Datenbank kann nicht ge&ouml;ffnet werden");
    13. ?>
    Hi,

    ah ok, ich dachte du machst es mit PDO. Aber bei dir ist ja mysqli. Probier mal so:

    PHP-Quellcode

    1. <?php
    2. if(isset($_REQUEST['pendenzen_loeschen'])){
    3. $stmt = $db->prepare("DELETE FROM `tbl_pendenzen` WHERE `ID` = '" . $ba . "'");
    4. $stmt->execute();
    5. }
    6. ?>


    Haut's so hin?

    Mach spaßhalber mal ein echo $ba;, ich weiß ja gar nicht was dort drin steht.

    Link :thumbup:
    Hello World
    Super, freut mich :)

    Wenn ich dir noch paar Ideen mitgeben darf: Schreib dir für Zugriffe auf Datenbanken / Ressourcen immer eine eigene Klasse (im MVC wäre das das M (Model)). Zum Abfragen von Datensätzen (SELECT, VIEW, ...), für Datenbankeintragungen (DELETE, INSERT, UPDATE etc..) und für den Verbindungsaufbau würd' ich Methoden erstellen.

    Beispiel:

    PHP-Quellcode

    1. <?php
    2. class DBStuff{
    3. private static $Statements = array();
    4. public static function connect(){
    5. /* ... Code für Verbindungsaufbau ... */
    6. }
    7. public static function query($query){
    8. self::$Statements[] = $query;
    9. /* ... Datenbankabfrage und Ergebnis zurückgeben als Array */
    10. return $row;
    11. }
    12. public static function exec($query){
    13. self::$Statements[] = $query;
    14. /* ... Datenbankeintragungen wie INSERT, DELETE etc.. */
    15. /* ggf. boolean zurückgeben */
    16. }
    17. /* Am Ende deines PHP-Skripts kannst du z.B. den Befehl
    18. * echo implode('<br>', DBStuff::getStatements());
    19. * aufrufen um zu schauen was alles ausgeführt wurde
    20. */
    21. public static function getStatements(){
    22. return self::$Statements;
    23. }
    24. /* Auch Hilfsfunktionen sind denkbar: */
    25. public static function delete($table, $where_val, $where_key = 'id'){
    26. $table = @preg_replace('/\./', '`.`', $table);
    27. $query = "DELETE FROM `" . $table . "` WHERE `" . $where_key . "` = '" . $where_val . "'";
    28. return self::exec($query);
    29. }
    30. }
    31. ?>


    Beim objektorientierten Programmieren geht es mitunter darum, so gut es geht redundanten Code zu vermeiden. Wenn du für jede Datenbankabfrage ne while-Schleife schreiben musst macht das keinen Spaß.

    Wenn noch was ist einfach fragen. Ansonsten kannst du deinen Thread (ganz unten auf der Seite) als Erledigt markieren.

    Link :thumbup:
    Hello World