Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Insert into und weiterleitung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Insert into und weiterleitung

    Hallo zusammen,
    wie ich schon gelesen habe wurde dies schon mehrfach angesprochen aber ich bekomme es einfach nicht hin.

    Folgendes ist mein Problem.
    Ich habe ein Formular welches sich als Modul öffnet.
    Nun kann ich dort neu Datensätz erzeugen. Das Funktioniert auch.
    Nur wenn ich nach dem Speicher wieder auf auf die index Seite komme und dort ein refresh ausführe wird der selbe Datensatz nochmal in die Datenbank geschrieben aber das möchte ich gerne verhindern.
    Aber wie?.

    Folgendes habe ich Versucht.
    <?php
    header("irgend was");
    exit();
    ?>

    aber ohne Erfolg.

    Anbei die Daten
    index.php
    PHP-Code:
    <!DOCTYPE html>
    <html lang="de">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="">
    <title>Menge & Preise anlegen</title>
    <link rel="stylesheet" type="text/css" href="../css/bootstrap.css.php">
    <link rel="stylesheet" type="text/css" href="../css/auswahl.css">
    <script type="text/javascript" src="../js/ie10-viewport-bug-workaround.js"></script>
    <script type="text/javascript" src="../js/ie-emulation-modes-warning.js"></script>
    <style type="text/css" id="holderjs-style"></style>
    <style>
        #test-list { list-style-type: none; margin: 0 3px 3px 4px; padding: 0; width: 100%; }
        #test-list li { margin: 3px 3px 3px 0; padding: 1px; float: left; width: 150px; height: 130px; font-size: 12px; text-align: center;  cursor: pointer;  }
        .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { background: #FCEFA1;}
        </style>
    </head>
    <body role="document">
    <div class="container theme-showcase" role="main">
    <?php $page 'preise'; include('../navigation/navi1.php');?>
     <div class="container">
     <?php include("../breadcrumbs.php"); ?>
    <div class="panel panel-default">
      <div class="panel-body">
       
      <div class="container-fluid">
      <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title "><!-- Button, der das Modal aufruft -->
    <button class="btn btn-default btn-sm glyphicon glyphicon-plus" data-toggle="modal" data-target="#meinModal">
    </button>
    <!-- Modal -->
    <div class="modal fade" id="meinModal" tabindex="-1" role="dialog" aria-labelledby="meinModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Schließen</span></button>
            <h4 class="modal-title" id="meinModalLabel">Anlegen eines neuen Preises</h4>
          </div>
          <div class="modal-body">
           <?php include("neu.php"); ?>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Schließen</button>
          </div>
        </div>
      </div>
    </div>&nbsp;&nbsp;Menge & Preise</h3>  
        </div>
      <div class="panel-body">
    <?php include('uebersicht.php'); ?>
     </div>
    </div>
    </div>
    </div><?php include('../footer.php'); ?>
    <script type="text/javascript" src="../js/tooltip-viewport.js"></script>
    </body>
    </html>
    neu.php
    PHP-Code:
    <?php
    //##################################
    // //Alle Fehler anzeigen
    //##################################
    ini_set("display_errors",true);
    error_reporting(E_ALL);
              
    //#####################################################
    // Neuen Datensatz anlegen
    //#####################################################
         
    if (isset($_POST['Neu'])){

    // Zuweisung des SQL Statements
          
    $id              $_POST['id'];
              
    $menge          $_POST['menge'];
         
    $preis          $_POST['preis']; 
              
              
           
    $sql_U "INSERT INTO `xxx_datenbank`.`preise` (`id`, `menge`, `preis`) VALUES (NULL, '$menge', '$preis');";
                          
    //###############################################################################
    // // Herstellen der Verbindung und Datenübernahme 
    //###############################################################################
    $con_U mysql_connect('xxx','xxx','xxx');
    if (!
    $con_U) { die('Es konnte keine Verbindung hergestellt werden' mysql_error());}          
    mysql_select_db(xxx_datenbank',$con_U);   
    mysql_query("SET names '
    utf8'");
    $result=mysql_query($sql_U, $con_U);
    if (!$result) {
             die('
    Es konnte kein Datensatz hinzugefügt werden' . mysql_error());
          
           }
           mysql_close($con_U);
    }
    ?>
      <div class="panel panel-default">
      <div class="panel-heading"></div>
      <div class="panel-body"> 
    <?php 
    //###############################################################################
    // // Formular
    //###############################################################################
    ?>
    <form action="index.php" class="form-horizontal" role="form" method="POST">
      <div class="form-group">
        <input type="text" style="display:none" name="id" id="" value="">
        <label for="eingabefeldMenge" class="col-sm-2 control-label">Menge:</label>
        <div class="col-sm-10">
        <input name="menge" type="text" class="form-control" id="menge" value="" />
        </div></div>
        <div class="form-group">
        <label for="eingabefeldPreise" class="col-sm-2 control-label">Preis:</label>
        <div class="col-sm-10">
        <input name="preis" type="text" class="form-control" id="preis" value=""/>
        </br>
       <button type="submit" class="btn btn-default btn-ms" name="Neu" id="Neu">
      <span class="glyphicon glyphicon-saved"></span>Speichern
    </button></div></div>
    </form>
    </div>
    </div>
    </html>


  • #2
    Mit header weiterleiten ist schon ok, man muss es nur richtig machen. Da du uns aber nicht erklärst, wo das Problem genau liegt oder was passiert bzw. nicht passiert ...

    Außerdem ist dein HTML-Code schwer kaputt! Wenn du neu.php includest, darf darin natürlich kein </html> drin sein.

    Und: du verstößt gegen das EVA-Prinzip.
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Danke für deine Antwort.

      Also ich bin jetzt soweit das die Weiterleitung funktioniert.
      Nun ist nur noch mein Problem wenn der Datensatz den ich gerade Eingetragen habe in der Tabelle angezeigt wird und jemand oben mit Browser auf refresh oder Taste F5 drückt das der Datensatz ein weiters mal in die Datenbank geschrieben wird. Wie kann ich das verhindern.

      Kommentar


      • #4
        Dann scheint aber deine Weiterleitung nicht zu funktionieren.
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          Doch es schein so.

          Ich habe es jetzt so gelöst.

          PHP-Code:
          <?php
          //##################################
          // //Alle Fehler anzeigen
          //##################################
          ini_set("display_errors",true);
          error_reporting(E_ALL);
                    
          //#####################################################
          // Neuen Datensatz anlegen
          //#####################################################
               
          if (isset($_POST['Neu'])){
             echo 
          '<html><head>';
             echo 
          '<meta http-equiv="refresh" content="0; URL=index.php">';
             echo 
          '</head><body></body></html>';
          // Zuweisung des SQL Statements
                    
          $id              $_POST['id'];
                    
          $menge          $_POST['menge'];
                    
          $preis          $_POST['preis']; 
                    
                    
                 
          $sql_U "INSERT INTO `xxx_datenbank`.`preise` (`id`, `menge`, `preis`) VALUES (NULL, '$menge', '$preis');";
                                
          //###############################################################################
          // // Herstellen der Verbindung und Datenübernahme 
          //###############################################################################
          $con_U mysql_connect('xxx','xxx','xx');
          if (!
          $con_U) { die('Es konnte keine Verbindung hergestellt werden' mysql_error());}          
          mysql_select_db('xxx_datenbank',$con_U);   
          mysql_query("SET names 'utf8'");
          $result=mysql_query($sql_U$con_U);
          if (!
          $result) {
                   die(
          'Es konnte kein Datensatz hinzugefügt werden: ' mysql_error());
                 }

                 
          mysql_close($con_U);    
                 
          //echo ("<meta http-equiv='refresh' content='0; url=index.php'>");
                 // exit;      
          }    
          ?>
            <div class="panel panel-default">
            <div class="panel-heading"></div>
            <div class="panel-body"> 
          <?php 
          //###############################################################################
          // // Formular
          //###############################################################################
          ?>
          <form action="" class="form-horizontal" role="form" method="POST">
            <div class="form-group">
              <input type="text" style="display:none" name="id" id="" value="">
              <label for="eingabefeldMenge" class="col-sm-2 control-label">Menge:</label>
              <div class="col-sm-10">
              <input name="menge" type="text" class="form-control" id="menge" value="" />
              </div></div>
              <div class="form-group">
              <label for="eingabefeldPreise" class="col-sm-2 control-label">Preis:</label>
              <div class="col-sm-10">
              <input name="preis" type="text" class="form-control" id="preis" value=""/>
              <br>
             <button type="submit" class="btn btn-default btn-ms" name="Neu" id="Neu">
            <span class="glyphicon glyphicon-saved"></span>Speichern
          </button></div></div>
          </form>
          </div>
          </div>

          Kommentar


          • #6
            Das ist Müll!!!

            Diese Datei wird ja per include eingebunden und damit produzierst du dann kaputtes HTML. Auch wenn es scheinbar funktioniert, ist das Schrott!

            Halte dich an das EVA-Prinzip und alles wird gut.
            Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

            Kommentar


            • #7
              Kannst du mir das Bitte erklären.

              Kommentar


              • #8
                Das Aktivieren des Error-Reporting und das Speichern der Daten gehört ganz an den Anfang der Seite und nicht mittendrin.

                Siehe z.B. http://phpforum.de/forum/showthread.php?t=221678
                Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                Kommentar


                • #9
                  Es fängt ja auch schon damit an das dieses Script auf den Webservern mit der neusten PHP Version nicht laufen wird.

                  http://php.net/manual/de/function.mysql-connect.php

                  Roten Kasten beachten!

                  Kommentar


                  • #10
                    Wo ist denn header()?

                    Deine index.php includet die neu.php in der dein Formular enthalten ist.
                    Das Formular sendet die Daten beim Abschicken an die index.php.
                    -> Datenverarbeitung von der neu.php in die index.php packen
                    -> header('location:index.php'); mit in die Datenverarbeitung packen.

                    Ohne Header wird der Request mit den Werten aus der Formulareingabe jedes mal beim refresh mit versendet.



                    Standardtext für die Datenbankverbindung:
                    Die mysql_* Erweiterung ist veraltet und wird in der nächsten PHP-Version entfernt. Zudem ist deine Query anfällig für SQL-Injections (aktuell nicht, aber falls du Variablen in dein Insert nimmst).
                    Durch einen Wechsel auf mysqli_* oder PDO greifst du aufdie modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections wirken.
                    Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm
                    Relax, you're doing fine.
                    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                    Kommentar

                    Lädt...
                    X