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



## Nicolas Kiessling (22. August 2012)

Hallo zusammen,

Ich habe mir ein Formular erstellt mit dem ich eine Datenbank füllen kann und eine Seite die diese Daten dann anzeigt nun möchte ich aber noch die Funktion ändern und löschen mit einbauen nur leider weiß ich nicht wie ich das dann machen soll es soll ja alles auf der Basis von einem Formular sein vielleicht könntet ihr mir helfen.


mfg Nicolas


----------



## Yaslaw (22. August 2012)

Mit einem Knopf ändern kommst du weider auf das Eingabeformular wo du über PHP die Werte schon vorabfüllst.
Mit einem Knopf löschen schickst du ein DELETE-Query an die Datenbank.

Nachtrag:
Leider ist deine Anfrage sehr ungenau. Wie sollen wir dir helfen? Was willst du genau wissen? Ist dir nicht klar wie du auf der Seite einen weiteren Button erstellst oder wie du mit der DB kommunizieren musst oder sonstwas?
ev. kannst du mal etwas Code zeigen damit wir dir helfen können wie da noch was rein muss.


----------



## Nicolas Kiessling (22. August 2012)

Also das schreiben in die Datenbank habe ich schon nur mir fehlt die Funktion wie ich das löschen und ändern kann also Daten in die Datenbank eintragen und über die Website anzeigen nur ich weiß nicht wie ich das ändern und löschen kann.also vom code her weiß ich nicht wieter


----------



## Yaslaw (22. August 2012)

```
//TODO: $id auslesen
$sql = "DELETE FROM mytable WHERE id={$id};";
mysql_query($sql);
```

Und für die Änderungen brauchst du den SQL-Befehl UPDATE.

Des weiteren gilt immer noch. Zeig doch etwas Code. Damit kannst du uns helfen dir zu helfen.


----------



## Nicolas Kiessling (22. August 2012)

Ja welchen Code willst du sehen habe ja einmal den HTML und einmal den PHP code


----------



## Yaslaw (22. August 2012)

Den wo du nicht weisst was du damit machen sollst.


----------



## Nicolas Kiessling (22. August 2012)

```
<?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.");



$sql = "SELECT id, anrede, vorname, nachname, strasse, plz, wohnort, kennzeichen, fsk,

datum FROM adressen";



$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>

</tr>


<?php

while ($adr = mysql_fetch_array($adressen_query)){

?>

<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>

</tr>

<?php

}

?>



</table>
```



Und hier soll ein Button wo man die Einträge ändern und löschen kann.


----------



## ComFreek (22. August 2012)

Mach doch noch zwei Spalten in die Tabelle mit zwei Links zu jeweils "Editieren" und "Löschen" rein.


----------



## Yaslaw (22. August 2012)

So, als erste habe ich mal dein Code formatriert und hier im Forum in PHP-Tags gesetzt, damit man ihn lesen kann. Nebenbei habe ich die Zeilenausgabe in den PHP-Code genommen. Vereinfacht mMn die lesbarkeit um einiges:
a) den SQL-Teil in PHP formatieren: Heredoc-Syntax
b) Die Complex (Curly) Syntax anwenden um die Strings zusammenzusetzen. Das reduziert das Chaos mit öffnenden und schliessenden Anführungszeichen und den Verbindungs-Punkten


```
<?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.");

$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>
	</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>
	</tr>
HTML;
}
?>
```

So, nun zu deiner Frage.
Zuerst mal den Titel der Tabelle um eine weitere Spalte ergänzen

```
<th scope="col">Funktionen</th>
```
Dann an gleicher Position in der Zeilenausgabe die Buttons oder ein Link hinzufügen. Hier einen Link auf die eigene Seiten mit einem action-Attribut und der id

```
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;
}
```

Anschliessend noch die action ausprogrammieren. Dazu nach dem mysql_select_db den folgenden Code enfügen

```
//Datensatz löschen
if($_GET['action'] == 'delete'){
	//SQL-Injections verhindern
	$id = mysql_escape_string($_GET['id']);
	$sql = "DEELTE FROM adressen WHERE id = {$id}";
	mysql_query($sql);
}
```


----------



## Nicolas Kiessling (22. August 2012)

Schonmal Vielen Dank aber nun bekomme ich Fehler wenn ich die Datei abrufe


```
<?php
$mysqlhost="localhost"; // MySQL-Host angeben
$mysqluser="111"; // MySQL-User angeben
$mysqlpwd="111"; // Passwort angeben
$mysqldb="1111"; // 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 = "DEELTE FROM adressen WHERE id = {$id}";
    mysql_query($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;
}
?>
```


Der Fehler 


Parse error: syntax error, unexpected T_STRING in /var/www/virtual/44444-444.4444/44444/2/index.php on line 16


----------



## sheel (22. August 2012)

Hi


```
$sql
SELECT
    id,
    anrede,
    vorname,
    nachname,
    strasse,
    plz,
    wohnort,
    kennzeichen,
    fsk,
    datum
FROM
    adressen;
SQL;
```
Was soll denn das sein?
Die <<< usw., die Yaslaw oben gezeigt hat, gehören dazu.

edit:

```
$sql = "DEELTE FROM adressen WHERE id = {$id}";
```
DELETE, nicht DEELTE.


----------



## Nicolas Kiessling (23. August 2012)

```
<?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
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;
}
?>
```



So habe das nun mal korrigiert aber es kommen immer noch Fehler mit dehnen ich nicht klar komme.

Errorarse error: syntax error, unexpected T_SL in line 15


----------



## Yaslaw (23. August 2012)

Was soll das?

```
while
while ($adr = mysql_fetch_array($adressen_query)){
```
Wozu das erste while?


----------



## Nicolas Kiessling (23. August 2012)

Ok, ich habe es berichtigt war keine Absicht aber das behebt leider nicht den Fehler in line 15


----------



## Yaslaw (23. August 2012)

Was für eine Version von PHP hast du?
Welches ist bei dir die Zeile 15?


----------



## Nicolas Kiessling (23. August 2012)

leider geht bei mir auf dem Webspace die phpinfo abfrage nicht weiß nicht wie ich da sonst rankomme und die Zeile 15 ist bei mir das $sql = <<<SQL

Weiß denn keiner was der Fehler nun an dem Script ist weiß einfach nicht wie ich weiter verfahren soll.


----------



## sheel (25. August 2012)

Wenn phpinfo nicht geht ist irgendwas mit PHP selbst nicht in Ordnung (oder es ist ausgeschaltet)
Kontaktiere mal deinen Hoster.


----------



## Nicolas Kiessling (25. August 2012)

Die Website teilt mir mit das phpinfo() deaktiviert ist wegen der Sicherheit


----------



## sheel (25. August 2012)

Hast du nach dem <<<SQL ein Leerzeichen oder Tabulator?
Weg damit.


----------



## Nicolas Kiessling (25. August 2012)

ok habe mal das leerzeichen danach weg gemacht nun kommt diese Meldung 
Parse error: syntax error, unexpected $end in line 68

line 68 = ?>


----------



## sheel (25. August 2012)

Zeig bitte mal den aktuellen Code.


----------



## Nicolas Kiessling (25. August 2012)

```
<?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.


----------



## Hanner72 (30. Januar 2020)

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


----------



## ByeBye 284669 (30. Januar 2020)

Dieses Script ist völlig veraltet und wenn überhaupt was bei dir funktioniert, dann benutzt du eine veraltete PHP-Version.


----------



## Sempervivum (30. Januar 2020)

Als Alternative empfehle ich jsGrid:
http://js-grid.comBenutze ich selber bzw. unterstütze jemand anders dabei. Sehr benutzerfreundlich, sieh dir die Demos an.


----------



## Hanner72 (31. Januar 2020)

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*

```
<!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

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 (31. Januar 2020)

> Ich bin leider kein Programmierer oder dergleichen


Dafür hast Du das aber sehr ordentlich aus der Doku heraus gezogen und umgesetzt!

Ich habe mit Mockaroo  - Random Data Generator and API Mocking Tool | JSON / CSV / SQL / Excel eine Dummytabelle entspr. deinem Code erzeugt und siehe da: Sie wird einwandfrei angezeigt.

Hast Du die Spaltennamen genau überprüft?

Poste mal die Struktur deiner Tabelle, z. B. Screenshot von PHPMyAdmin.


----------



## Hanner72 (31. Januar 2020)

```
-- 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 (31. Januar 2020)

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:

```
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:

```
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
```
Und den Header vorüber gehend deaktivieren:

```
//header("Content-Type: application/json");
```
Dann müssten die Anzeigen in der Console uns Hinweise geben.


----------



## Hanner72 (3. Februar 2020)

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:

```
controller: {
```
etc.

in die fetch_data.php ab Zeile 3 gleich nach <?php

```
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
```

und ca. Zeile 49 

```
//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


----------



## Sempervivum (3. Februar 2020)

> Wo kann ich jetzt was sehen?


Sieh dir die Console deines Browsers an. Dort sollte jetzt die Antwort vom Server sichtbar sein, möglicher Weise auch Fehlermeldung(en).


----------



## Hanner72 (3. Februar 2020)

Das ist das einzige was kommt.


----------



## Hanner72 (3. Februar 2020)

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 (3. Februar 2020)

Ich hab meine Daten von einer Exeltabelle so formatiert:


```
=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 (3. Februar 2020)

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 (3. Februar 2020)

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.


----------



## Sempervivum (3. Februar 2020)

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 (3. Februar 2020)

Da steht nur die Verbindung zur Datenbank drin.


```
<?php

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

?>
```


----------



## Sempervivum (3. Februar 2020)

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 (3. Februar 2020)

```
<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

```
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);
}
```


----------



## Sempervivum (3. Februar 2020)

Das kann ich mir nur so erklären, dass diese Tabelle leer ist.


----------



## Sempervivum (3. Februar 2020)

Lass mal mögliche Fehler beim Datenbankzugriff ausgeben:

```
$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);
    var_dump($statement->errorInfo()); // <-- hier
    $result = $statement->fetchAll();
```


----------



## Hanner72 (3. Februar 2020)

Hab den Server wieder umstellen müssen   

Wenn ich jetzt 
fetch_data.php?voller_name=&addresse=&tel=&mobil=&www=&mail=&lat=&lng=&kategorie= 
eingebe dann kommt folgendes im Browser

```
NULL
```

und das in der Console mit deinem Code


----------



## Sempervivum (3. Februar 2020)

Hast Du schon den var_dump aus meinem Posting #42 eingebaut? Ich nehme mal an, in Wirklichkeit ist die Tabelle nicht leer?


----------



## Hanner72 (3. Februar 2020)

var_dump ist drin:



In der Tabelle sind 442 Datensätze die werden auch angezeigt, aber nur wenn die php-Version stimmt.


----------



## Sempervivum (3. Februar 2020)

Dann müsste eigentlich im Fehlerfall das var_dump etwas anzeigen - aber anscheinend nur NULL. Ich habe die vage Vermutung, dass es an der Kategorie liegen könnte. Das ist ein enum und es könnte Probleme machen, wenn die Werte nicht genau passen.


----------



## Hanner72 (3. Februar 2020)

Moment mal...
Ich hatte deinen controller zwischenzeitlich deaktiviert, jetzt wieder aktiviert und dann kommt in der Console folgendes:



In der Kategorie staht überall Gasthaus (bis auf den 1. Datensatz wo Hotel steht). Hab ich per Import in die SQL geschrieben, damit überall etwas drinnensteht.


----------



## Sempervivum (3. Februar 2020)

Das sind jetzt die Ausgaben von dem console.log. D. h. dies scheint jetzt nicht der Fehlerfall zu sein.


----------



## Hanner72 (3. Februar 2020)

Das kommt aber nur wenn die PHP-Version 5.4 ist.

Bei 5.6 kommt da nix.


----------



## Sempervivum (3. Februar 2020)

Ja, wir müssen das für 5.6 untersuchen. Und da wird wirklich überhaupt kein Fehler angezeigt?


----------



## Hanner72 (3. Februar 2020)

Nein, nur das komische "Violation"


----------



## Sempervivum (3. Februar 2020)

Das Violation sagt mir jetzt nichts. Entscheidend ist, was das Skript beim Direktaufruf unter PHP 5.6 mit eingeschalteter Fehleranzeige und errorInfo() ausgibt.


----------



## Hanner72 (3. Februar 2020)

Also bei PHP 5.6 und eingeschalteter Fehleranzeige
steht im Browser wenn ich diesen Link eingebe

```
http://###.at/adressen/fetch_data.php?voller_name=Danner&addresse=Palfau&tel=0664810&mobil=465231&www=www.fsde.at&mail=fdsfdsdf&lat=5454&lng=543543&kategorie=Gasthaus
```
das aus:

```
<br />
<b>Notice</b>:  Undefined variable: output in <b>/home/strabags/public_html/adressen/fetch_data.php</b> on line <b>50</b><br />
null
```
und in der Console steht einfach NIX. Keine Fehlermeldung etc., einfach NIX.


----------



## Sempervivum (3. Februar 2020)

Hast Du es, immer unter 5.6, auch mit leeren GET-Parametern versucht:
http://###.at/adressen/fetch_data.php?voller_name=&addresse=&tel=&mobil=&www=&mail=&lat=&lng=&kategorie=
Andernfalls ist der Filter wirksam und wenn die Werte nicht genau stimmen, hat man keine Treffer.


----------



## Hanner72 (3. Februar 2020)

Hab jetzt unter 5.6 mit leeren Parametern probiert,

Hier kommt eine leere weisse Seite. 
Console NIX.


----------



## Sempervivum (3. Februar 2020)

Will mir nicht in den Kopf, dass das errorInfo nichts ausgibt. Lass auch mal das $result anzeigen mit var_dump():

```
$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);
    var_dump($statement->errorInfo());
    $result = $statement->fetchAll();
    var_dump($result); // <-- hier
    $output = array();
    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);
}
```


----------



## Hanner72 (3. Februar 2020)

Keine Änderung. Wieder das gleiche.
Das einzige was er sagt ist dass das favicon fehlt.   

Bei 5.4 haut er jetzt alles raus... also da stehen sämtliche Daten...


----------



## Sempervivum (3. Februar 2020)

Jetzt stehe ich ratlos davor. Die Tabelle ist gefüllt, aber es kommen unter 5.6 bei der Abfrage keine Datensätze heraus. Und errorInfo gibt auch nichts aus.


----------



## Hanner72 (3. Februar 2020)

Wenn ich voll schnell und oft die Seite aktualisiere kommt immer ganz kurz eine Fehlermeldung und da steht:


```
Resource interpreted as Document but transferred with MIME Type application/json: "http://###.at/adressen/fetch_data.php?voller_name=&addresse=&tel=&mobil=&www=&mail=&lat=&lng=&kategorie="
```

Vielleicht hilft ja das weiter...


----------



## Sempervivum (3. Februar 2020)

Ja, das kommt, weil das Skript den Header für JSON einstellt. Denke, das hat nichts zu bedeuten.


----------



## Sempervivum (3. Februar 2020)

Leider habe ich keinen Zugriff auf ein PHP mit Version 5. Mein Hoster hat es eingestellt und bei meiner lokalen DB ist es zu umständlich, es umzustellen.


----------



## Hanner72 (4. Februar 2020)

Hab dir was geschrieben falls zu Zeit findest.  :BitteBitteDanke:


----------

