Mit php,html und ,mysql Datenbank löschen und ändern


Nicolas Kiessling

Grünschnabel
PHP:
<?php
$mysqlhost="localhost"; // MySQL-Host angeben
$mysqluser="111"; // MySQL-User angeben
$mysqlpwd="111"; // Passwort angeben
$mysqldb="111"; // Gewuenschte Datenbank angeben
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die ("Verbindungsversuch fehlgeschlagen");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
//Datensatz löschen
if($_GET['action'] == 'delete'){
    //SQL-Injections verhindern
    $id = mysql_escape_string($_GET['id']);
    $sql = "DELETE FROM adressen WHERE id = {$id}";
    mysql_query($sql);
}
$sql = <<<SQL
SELECT
    id,
    anrede,
    vorname,
    nachname,
    strasse,
    plz,
    wohnort,
    kennzeichen,
    fsk,
    datum
FROM
    adressen;
SQL;

$adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");
$anzahl = mysql_num_rows($adressen_query);
echo "Anzahl der Datensätze: {$anzahl}";
?>

<table border="0" cellspacing="10" cellpadding="20">
    <tr>
        <th scope="col">ID</th>
        <th scope="col">Anrede</th>
        <th scope="col">Vorname</th>
        <th scope="col">Nachname</th>
        <th scope="col">Strasse</th>
        <th scope="col">PLZ</th>
        <th scope="col">Wohnort</th>
        <th scope="col">Kennzeichen</th>
        <th scope="col">Fuehrerscheinklassen</th>
        <th scope="col">Datum</th>
        <th scope="col">Funktionen</th>
    </tr>
<?php
while ($adr = mysql_fetch_array($adressen_query)){
    echo <<<HTML
    <tr>
        <td>{$adr['id']}</td>
        <td>{$adr['anrede']}</td>
        <td>{$adr['vorname']}</td>
        <td>{$adr['nachname']}</td>
        <td>{$adr['strasse']}</td>
        <td>{$adr['plz']}</td>
        <td>{$adr['wohnort']}</td>
        <td>{$adr['kennzeichen']}</td>
        <td>{$adr['fsk']}</td>
        <td>{$adr['datum']}</td>
        <td><a href='?action=delete&id={$adr['id']}'>delete</a></td>
    </tr>
HTML;
}
?>
Das ist der aktuelle code der immer die Fehler anzeigt

Das ist der aktuelle Code um die Daten aus der Datenbank anzuzeigen mit dem Befehl zum ändern und zum löschen.
 
Zuletzt bearbeitet von einem Moderator:

Hanner72

Mitglied
Hallo,

Der Beitrag ist schon eine Weile her aber ich brauche genau dieses Script.
Bei mir funktioniert alles, kann jedoch nur löschen und nicht ändern. Hab dazu auch im Code nichts gefunden.
Kann mir da jemand helfen damit ich die Daten auch ändern kann?

Danke im Voraus.

LG
Johann
 

Hanner72

Mitglied
Hallo!

Erstmal Danke für Infos. Ich bin leider kein Programmierer oder dergleichen aber trotzdem brauch ich hin und wieder ein eigenes Script.
Dieses Script brauch ich in unserer Firma um Adressdaten von Hotels,Gasthäuser etc. zu speichern damit unsere Monteure unterwegs leichter ein Zimmer finden.

Ich hab Eure Empfehlungen befolgt und jsGrid installiert.

Das DemoScript laut diesem Video läuft einwandfrei mit meiner MySQL Datenbank. ->

Dann hab ich es an meine Daten angepaßt, jedoch werden keine Daten von der Datenbank angezeigt.
Hab alles mögliche probiert, gefühlte 1000 mal auf Fehler überprüft. Ich komm nicht drauf.
Vielleicht könnte mal einer von Euch kurz drüberschauen ob Euch was auffällt.

Hier die index.php
PHP:
<!DOCTYPE html>
    <html>
    <head>
        <title>Navigation Grid</title>         
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <link rel="stylesheet" type="text/css" media="screen" href="jsgrid/jsgrid.min.css" />
        <link rel="stylesheet" type="text/css" media="screen" href="jsgrid/jsgrid-theme.min.css" />
        <script src="jsgrid/jsgrid.min.js" type="text/javascript"></script>

        <link type="text/css" href="inc/styles.css" rel="stylesheet">

        <style>
            .hide
            {
                display:none;
            }
            </style>
                </head> 
                <body> 

                <br>
                <a href="map.php" class="buttonweiss">Google Map</a><br><br><br>
    
                    <div class="container"> 
            <br />
            <div class="table-responsive"> 
                <h3 align="center">Adressen für Zimmersuchende ;-)</h3>
                <h4 align="center">Hier bitte die Adresse hinzufügen, aktualisieren oder löschen.</h4><br>
                <div id="grid_table"></div>
            </div> 
            </div>
                </body> 
            </html> 
            <script>
            
                $('#grid_table').jsGrid({

                width: "100%",
                height: "870px",

                filtering: true,
                inserting:true,
                editing: true,
                sorting: true,
                paging: true,
                autoload: true,
                pageSize: 20,
                pageButtonCount: 5,
                deleteConfirm: "Willst du die Adresse wirklich löschen?",

                /* pagerFormat: "Seiten: {first} {prev} {pages} {next} {last}       {pageIndex} of {pageCount}",
                pagePrevText: "zurück",
                pageNextText: "nächste",
                pageFirstText: "erste",
                pageLastText: "letzte",
                pageNavigatorNextText: "...",
                pageNavigatorPrevText: "...", */

                controller: {
                    loadData: function(filter){
                        return $.ajax({
                            type: "GET",
                            url: "fetch_data.php",
                            data: filter   
                        });
                },
                insertItem: function(item){
                return $.ajax({
                    type: "POST",
                    url: "fetch_data.php",
                    data:item
                });
                },
                updateItem: function(item){
                return $.ajax({
                    type: "PUT",
                    url: "fetch_data.php",
                    data: item
                });
                },
                deleteItem: function(item){
                return $.ajax({
                    type: "DELETE",
                    url: "fetch_data.php",
                    data: item
                });
                },
                },

                fields: [
                    {
                        name: "id",
                        type: "hidden",
                        css: 'hide'
                    },
                    {
                        name: "voller_name",
                        type: "text",
                        width: 60,
                        validate: "required"
                    },
                    {
                        name: "addresse",
                        type: "text",
                        width: 80,
                        validate: "required"
                    },
                    {
                        name: "mobil",
                        type: "text",
                        width: 30
                    },
                    {
                        name: "tel",
                        type: "text",
                        width: 30
                    },
                    {
                        name: "mail",
                        type: "text",
                        width: 60
                    },
                    {
                        name: "www",
                        type: "text",
                        width: 60
                    },
                    {
                        name: "lat",
                        type: "text",
                        width: 20
                    },
                    {
                        name: "lng",
                        type: "text",
                        width: 20
                    },
                    /* {
                        name: "kategorie",
                        type: "text",
                        width: 30
                    }, */
                    /* {
                        name: "mobil",
                        type: "text",
                        width: 50,
                        validate: function(value)
                            {
                                if(value > 0)
                            {
                                return true;
                            }
                        }
                    }, */
                    {
                        name: "kategorie",
                        type: "select",
                        items: [
                            { Name: "", Id: '' },
                            { Name: "Hotel", Id: 'Hotel' },
                            { Name: "Gasthaus", Id: 'Gasthaus' },
                            { Name: "Privat", Id: 'Privat' }
                        ],
                        valueField: "Id",
                        textField: "Name"
                    },
                    {
                        type: "control"
                    }
                ]

                });

            </script>
und hier die fetch_data.php
PHP:
<?php

require_once('inc/config.inc.php');


$connect = new PDO("mysql:host=$dbserver;dbname=$dbname", $dbuser, $dbpass);

$method = $_SERVER['REQUEST_METHOD'];
    
if($method == 'GET')
{
    $data = array(
    ':voller_name'      => "%" . $_GET['voller_name'] . "%",
    ':addresse'         => "%" . $_GET['addresse'] . "%",
    ':mobil'            => "%" . $_GET['mobil'] . "%",
    ':tel'              => "%" . $_GET['tel'] . "%",
    ':mail'             => "%" . $_GET['mail'] . "%",
    ':www'              => "%" . $_GET['www'] . "%",
    ':lat'              => "%" . $_GET['lat'] . "%",
    ':lng'              => "%" . $_GET['lng'] . "%",
    ':kategorie'        => "%" . $_GET['kategorie'] . "%"
    );

    $query = "SELECT * FROM markers WHERE voller_name LIKE :voller_name AND addresse LIKE :addresse AND mobil LIKE :mobil AND tel LIKE :tel AND mail LIKE :mail AND www LIKE :www AND lat LIKE :lat AND lng LIKE :lng AND kategorie LIKE :kategorie ORDER BY id DESC";
 
    $statement = $connect->prepare($query);
    $statement->execute($data);
    $result = $statement->fetchAll();
    foreach($result as $row)
    {
        $output[] = array(
            'id'            => $row['id'],   
            'voller_name'   => $row['voller_name'],
            'addresse'      => $row['addresse'],
            'mobil'         => $row['mobil'],
            'tel'           => $row['tel'],
            'mail'          => $row['mail'],
            'www'           => $row['www'],
            'lat'           => $row['lat'],
            'lng'           => $row['lng'],
            'kategorie'     => $row['kategorie']
        );
    }

    header("Content-Type: application/json");
    echo json_encode($output);
}

if($method == "POST")
{
 $data = array(
  ':voller_name'  => $_POST['voller_name'],
  ':addresse'  => $_POST['addresse'],
  ':mobil'    => $_POST['mobil'],
  ':tel'    => $_POST['tel'],
  ':mail'    => $_POST['mail'],
  ':www'    => $_POST['www'],
  ':lat'    => $_POST['lat'],
  ':lng'    => $_POST['lng'],
  ':kategorie'   => $_POST['kategorie']
 );

 $query = "INSERT INTO markers (voller_name, addresse, mobil, tel, mail, www, lat, lng, kategorie) VALUES (:voller_name, :addresse, :mobil, :tel, :mail, :www, :lat, :lng, :kategorie)";
 $statement = $connect->prepare($query);
 $statement->execute($data);
}

if($method == 'PUT')
{
 parse_str(file_get_contents("php://input"), $_PUT);
 $data = array(
  ':id'   => $_PUT['id'],
  ':voller_name'   => $_PUT['voller_name'],
  ':addresse'  => $_PUT['addresse'],
  ':mobil'    => $_PUT['mobil'],
  ':tel'    => $_PUT['tel'],
  ':mail'    => $_PUT['mail'],
  ':www'    => $_PUT['www'],
  ':lat'    => $_PUT['lat'],
  ':lng'    => $_PUT['lng'],
  ':type'   => $_PUT['type']
 );
 $query = "
 UPDATE markers
 SET voller_name = :voller_name,
 addresse = :addresse,
 mobil = :mobil,
 tel = :tel,
 mail = :mail,
 www = :www,
 lat = :lat,
 lng = :lng,
 type = :type
 WHERE id = :id
 ";
 $statement = $connect->prepare($query);
 $statement->execute($data);
}

if($method == "DELETE")
{
 parse_str(file_get_contents("php://input"), $_DELETE);
 $query = "DELETE FROM markers WHERE id = '".$_DELETE["id"]."'";
 $statement = $connect->prepare($query);
 $statement->execute();
}

?>
Ich bedanke mich im Voraus für Eure Hilfe.

LG
Johann
 

Sempervivum

Erfahrenes Mitglied

Hanner72

Mitglied
SQL:
-- phpMyAdmin SQL Dump
-- version 4.8.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost:3306
-- Erstellungszeit: 31. Jan 2020 um 13:47
-- Server-Version: 5.6.41-log
-- PHP-Version: 7.2.7

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Datenbank: `#####_adressen`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `markers`
--

CREATE TABLE `markers` (
  `id` int(11) NOT NULL,
  `voller_name` varchar(60) CHARACTER SET utf8 NOT NULL,
  `addresse` varchar(80) CHARACTER SET utf8 NOT NULL,
  `mobil` varchar(30) CHARACTER SET utf8 NOT NULL,
  `tel` varchar(30) CHARACTER SET utf8 NOT NULL,
  `mail` varchar(60) CHARACTER SET utf8 NOT NULL,
  `www` varchar(60) CHARACTER SET utf8 NOT NULL,
  `lat` float(10,6) NOT NULL,
  `lng` float(10,6) NOT NULL,
  `kategorie` enum('Hotel','Gasthaus','Privat') CHARACTER SET utf8 NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Indizes der exportierten Tabellen
--

--
-- Indizes für die Tabelle `markers`
--
ALTER TABLE `markers`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT für exportierte Tabellen
--

--
-- AUTO_INCREMENT für Tabelle `markers`
--
ALTER TABLE `markers`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
 

Sempervivum

Erfahrenes Mitglied
Hm, da kann ich auch keinen Fehler entdecken. Dann müssen wir mal ins Debugging einsteigen. Der Standardcode im Controller hat den Nachteil, dass die Antwort vom Server nicht sichtbar ist. Ändere das für das loadData so:
Code:
        controller: {
            loadData: function (filter) {
                var d = $.Deferred();
                $.ajax({
                    type: "GET",
                    url: "fetch_data.php",
                    data: filter
                }).done(function (response) {
                    console.log(response);
                    d.resolve(response);
                    return;
                });
                return d.promise();
            },
Dann wird die Response in der Console ausgegeben.
Und im PHP die Fehleranzeige einschalten: Ganz am Anfang dieses einfügen:
Code:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Und den Header vorüber gehend deaktivieren:
Code:
    //header("Content-Type: application/json");
Dann müssten die Anzeigen in der Console uns Hinweise geben.
 

Hanner72

Mitglied
Hallo,

Danke für deine Bemühungen. Ich hatte leider am Wochenende keine Zeit für das Script (Hausbau ;-)).

Ich hab jetzt die Änderungen von dir wie folgt eingetragen.

in die index.php ab Zeile 69:
PHP:
controller: {
etc.

in die fetch_data.php ab Zeile 3 gleich nach <?php
PHP:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
und ca. Zeile 49
PHP:
//header("Content-Type: application/json");
den header deaktiviert.

Ich hab einen Homepage Server auf den ich per cPanel Zugriff habe. Kann mich auch per Putty verbinden.
Wo kann ich jetzt was sehen?

LG
 

Hanner72

Mitglied
So,
Ich hab jetzt alle Daten rausgelöscht und siehe da! Es funktioniert!
Ich kann was eintragen und wieder ändern.
Das dürfte mit den Daten zu tun gehabt haben.
 

Hanner72

Mitglied
Ich hab meine Daten von einer Exeltabelle so formatiert:

Code:
=WENN(Geocode!A13="";"";"INSERT INTO markers (voller_name, addresse, mobil, tel, mail, www, lat, lng, kategorie) VALUES ('"&Geocode!F13&"', '"&Geocode!D13&", "&Geocode!E13&"', '"&Geocode!I13&"', '"&Geocode!J13&"', '"&Geocode!K13&"', '"&Geocode!L13&"', '"&Geocode!N13&"', '"&Geocode!O13&"', "");")
Es liegt am Import.Wenn ich nichts importiere, sondern in der Tabelle eintrage dann funktionierts.
Kannst du mir sagen wie ich die Daten in die Tabelle bekomme?
 

Sempervivum

Erfahrenes Mitglied
Leider fehlen mir bei diesem Import direkt aus der Excel-Tabelle die Kenntnisse. Kenne da nur den Weg über eine CSV-Datei. Da ich vermute, dass dieser Import nur einmal stattfindet und die Tabelle dann über die Webseite mit jsGrid gepflegt wird, wäre es vielleicht eine Möglichkeit, diesen Weg zu gehen. Andernfalls evtl. diese Frage im Unterforum "Office" stellen.
 

Hanner72

Mitglied
Ich bin jetzt draufgekommen dass das nur mit der PHP Version zu tun hat.
Mit Version 5.4 funktionierts auch mit Daten.
Bei allen Versionen darüber funktionierts nicht.

Kann ich das Script irgendwie umbauen dass es mit 5.6 läuft. Die bräuchte ich weil ich da schon was drauf hab das nur mit dieser Version funktioniert. :rolleyes:
 

Sempervivum

Erfahrenes Mitglied
Du ziehst da inc/config.inc.php ein. Enthält das nur die Verbindung zur Datenbank oder steht da noch mehr drin, was inkompatibel sein könnte?
 

Hanner72

Mitglied
Da steht nur die Verbindung zur Datenbank drin.

PHP:
<?php

// Datenbankeinstellungen eintragen
$dbserver='localhost';
$dbuser='###_kontakt';
$dbpass='###';
$dbname='###_adressen';
$dbtab='markers';

?>
 

Sempervivum

Erfahrenes Mitglied
Wenn da etwas inkompatibel ist, würde ich eigentlich erwarten, dass wir Fehlermeldungen bekommen. Lass uns mal das PHP alleine testen. Versuche das Skript mit den get-Parametern direkt im Browser aufzurufen:
fetch_data.php?voller_name=&addresse=&tel=&mobil=&www=&mail=&lat=&lng=&kategorie=
 

Hanner72

Mitglied
Code:
<br />
<b>Notice</b>:  Undefined variable: output in <b>/home/####/public_html/adressen/fetch_data.php</b> on line <b>50</b><br />
null
Das kommt dabei raus...

Das ist der Code in diesem Bereich:
Zeile 50 ist Zeile 2 in diesem Code-Block
PHP:
    header("Content-Type: application/json");
    echo json_encode($output);
}

if($method == "POST")
{
$data = array(
  ':voller_name'  => $_POST['voller_name'],
  ':addresse'  => $_POST['addresse'],
  ':mobil'    => $_POST['mobil'],
  ':tel'    => $_POST['tel'],
  ':mail'    => $_POST['mail'],
  ':www'    => $_POST['www'],
  ':lat'    => $_POST['lat'],
  ':lng'    => $_POST['lng'],
  ':kategorie'   => $_POST['kategorie']
);

$query = "INSERT INTO markers (voller_name, addresse, mobil, tel, mail, www, lat, lng, kategorie) VALUES (:voller_name, :addresse, :mobil, :tel, :mail, :www, :lat, :lng, :kategorie)";
$statement = $connect->prepare($query);
$statement->execute($data);
}