Daten in SQL-Datenbank speichern


CreativPur

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem.
Ich möchte Daten in eine Datenbank speichern. Leider funktioniert es nicht.

Mein Form...
PHP:
        <form action="kunden_artikel_anzahl_filialen.php?artikel_anzahl_filialen_speichern" method="post">
            <table class="table table-hover">
                <?php
                    $kunden_nummer = $kunde['kunden_nummer'];
                    $sql = "SELECT filiale_ort, kunden_nummer FROM kunden_filialen WHERE kunden_nummer = $kunden_nummer";
                    foreach ($pdo->query($sql) as $filialen) {
                ?>       
                <tbody>
                    <td>
                        <?php echo $filialen['filiale_ort'] ?>
                    </td>
                    <td>
                        <input type="text" class="form-control" name="artikel_anzahl_filiale[]" />
                        <input type="hidden" class="form-control" name="filiale_ort[]" value="<?php echo $filialen['filiale_ort'] ?>" />
                        <input type="hidden" class="form-control" name="kunden_nummer[]" value="<?php echo $kunden_nummer ?>" />
                        <input type="hidden" class="form-control" name="artikel_nummer[]" value="<?php echo $_POST['artikel_nummer'] ?>" />
                    </td>
                </tbody>
                <?php } ?>   
            </table>
            <div class="col-lg-12">
                <hr />
                <br />
                <button type="submit" class="main_btn">weiter</button>
            </div>
        </form>
Datenübertragung in das Form bzgl. der hidden-Felder funktioniert..
In das leere Feld wird noch die Anzahl eingegeben..

Bildschirmfoto 2020-09-14 um 14.33.28.png

Hier werden die Daten gespeichert...
PHP:
if(isset($_GET['artikel_anzahl_filialen_speichern'])) {
    $error = false;
    $kunden_nummer = $_POST['$kunden_nummer'];
    for ($i = 0; $i < count($_POST['$kunden_nummer']); $i++) {
    $kunden_nummer = $_POST['$kunden_nummer'][$i];
    $artikel_nummer = $_POST['artikel_nummer'][$i];
    $artikel_anzahl_filiale = $_POST['artikel_anzahl_filiale'][$i];
    $filiale_ort = $_POST['filiale_ort'][$i];
        
    $statement = $pdo->prepare("INSERT INTO kunden_artikel_filialen (kunden_nummer, artikel_nummer, filiale_ort, artikel_anzahl_filiale) VALUES (:kunden_nummer, :artikel_nummer, :filiale_ort, :artikel_anzahl_filiale)");
    $result = $statement->execute(array('kunden_nummer' => $kunden_nummer, 'artikel_nummer' => $artikel_nummer, 'filiale_ort' => $filiale_ort, 'artikel_anzahl_filiale' => $artikel_anzahl_filiale));   
    }
}


Hier ist die Datenbank...
Bildschirmfoto 2020-09-14 um 14.22.25.png

seit Tagen suche ich den Fehler...
Es wird einfach nichts in die Datenbank gespeichert.
 

m.scatello

Erfahrenes Mitglied
Wo sind die Debug-Ausgaben? Wenn mich nicht alles täuscht, habe ich dir das schon mal geschrieben:

Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

Und eigentlich solltest du auch wissen, dass "Funktioniert nicht" keine Problembeschreibung ist,
 

CreativPur

Erfahrenes Mitglied
Und was mache ich, wenn keine Fehlermeldung kommen und dennoch keine Daten gespeichert werden ?

PHP:
<?php
error_reporting(-1);
ini_set('display_errors', true);
mysqli_error();
session_start();

include("inc/config.inc.php");
include("../inc/kunden_login.inc.php");
include("../system/head.php");


if(isset($_GET['artikel_anzahl_filialen_speichern'])) {
    $error = false;
    $kunden_nummer = $_POST['$kunden_nummer'];
    for ($i = 0; $i < count($_POST['$kunden_nummer']); $i++) {
    $kunden_nummer = $_POST['$kunden_nummer'][$i];
    $artikel_nummer = $_POST['artikel_nummer'][$i];
    $artikel_anzahl_filiale = $_POST['artikel_anzahl_filiale'][$i];
    $filiale_ort = $_POST['filiale_ort'][$i];
        
    $statement = $pdo->prepare("INSERT INTO kunden_artikel_filialen (kunden_nummer, artikel_nummer, filiale_ort, artikel_anzahl_filiale) VALUES (:kunden_nummer, :artikel_nummer, :filiale_ort, :artikel_anzahl_filiale)");
    $result = $statement->execute(array('kunden_nummer' => $kunden_nummer, 'artikel_nummer' => $artikel_nummer, 'filiale_ort' => $filiale_ort, 'artikel_anzahl_filiale' => $artikel_anzahl_filiale));   
    }
}
?>
<h1>Testseite</h1>
 

m.scatello

Erfahrenes Mitglied
Wenn du keinerlei Fehlermeldungen bekommst, dann stimmt etwas mit dem Server nicht bzw. das Setzen von Error-Reporting und ini_set greift nicht, denn das ist Quatsch:
PHP:
mysqli_error();
Auch das hier:
PHP:
$_POST['$kunden_nummer'];
Außerdem besteht "Richtig debuggen" nicht nur aus dem Aktivieren des Error-Reportings, sondern auch aus der Ausgabe von Variablen. Spätestens dann würde dir nämlich auffallen, dass es $_POST['$kunden_nummer'] nicht gibt.

Wenn du dir selber keine Mühe gibst so einfache Sachen in dein Script einzubauen, dann verschone die Leute in Foren, die dann deine Fehler suchen sollen!
 

CreativPur

Erfahrenes Mitglied
Vielen Dank für deine Denkanstöße...
Habe den Fehler nun beseitigt..

PHP:
if(isset($_GET['artikel_anzahl_filialen_speichern'])) {
    $error = false;
    for ($i = 0; $i < count($_POST['kunden_nummer']); $i++) {
    $kunden_nummer = $_POST['kunden_nummer'][$i];   
    $artikel_nummer = $_POST['artikel_nummer'][$i];
    $artikel_anzahl_filiale = $_POST['artikel_anzahl_filiale'][$i];
    $filiale_ort = $_POST['filiale_ort'][$i];
        
    $statement = $pdo->prepare("INSERT INTO kunden_artikel_filialen (kunden_nummer, artikel_nummer, filiale_ort, artikel_anzahl_filiale) VALUES (:kunden_nummer, :artikel_nummer, :filiale_ort, :artikel_anzahl_filiale)");
    $result = $statement->execute(array('kunden_nummer' => $kunden_nummer, 'artikel_nummer' => $artikel_nummer, 'filiale_ort' => $filiale_ort, 'artikel_anzahl_filiale' => $artikel_anzahl_filiale));   
    }
}