Anzeige

Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.

Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern. | PSD-Tutorials.de

Erstellt von tai, 20.02.2010.

  1. tai

    tai Noch nicht viel geschrieben

    Dabei seit:
    26.12.2008
    Beiträge:
    9
    Geschlecht:
    männlich
    Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.
    Hallo! Ich versuche mich gerade an einem Newsscript und habe dabei ein Problem. Eigentlich funktioniert ja alles sehr gut, genau so wie ich es mir vorstelle. Nur sobald ich einen Eintrag absende, dieser erfolgreich in die Datenbank gespeichert wird und ich dann auf Aktualisieren klicke, habe ich den unschönen Effekt das der Eintrag nochmal gespeichert wird. Nun meine Frage, wie kann ich das verhindern? Wie wird das im allgemeinem gemacht?

    Hier noch mein Code:

    PHP:
    1. <?php
    2.     session_start();
    3.  
    4.     if (!isset($_SESSION['ok']) || $_SESSION['ok'] !== true) {
    5.         header('Location: start.php');
    6.     }
    7.  
    8.     session_regenerate_id($delete_old_session = true);
    9.  
    10.     $key = mysql_connect("", "", "") or die ("Keine Verbindung möglich");
    11.  
    12.     mysql_select_db("");
    13.  
    14.     if (isset($_POST['absenden'])) {
    15.         //stripslashes wegen eingeschalteten Magic Quotes.
    16.         if (isset($_POST['name']) && !is_array($_POST['name']) && $_POST['name'] != '') {
    17.             $name = htmlspecialchars(stripslashes($_POST['name']));
    18.         }
    19.         if (isset($_POST['titel']) && !is_array($_POST['titel']) && $_POST['titel'] != '') {
    20.             $titel = htmlspecialchars(stripslashes($_POST['titel']));
    21.         }
    22.         if (isset($_POST['intern']) && !is_array($_POST['intern']) && $_POST['intern'] != '') {
    23.             $intern = htmlspecialchars(stripslashes($_POST['intern']));
    24.             if ($intern == 'nein') {
    25.                 $intern = '0';
    26.             } else {
    27.                 $intern = '1';
    28.             }
    29.         }
    30.         if (isset($_POST['nachricht']) && !is_array($_POST['nachricht']) && $_POST['nachricht'] != '') {
    31.             $nachricht = nl2br(htmlspecialchars(stripslashes($_POST['nachricht']), ENT_QUOTES));
    32.         }
    33.  
    34.         $datumsql = date('d.m.Y');
    35.         $namesql = mysql_real_escape_string($name);
    36.         $titelsql = mysql_real_escape_string($titel);
    37.         $nachrichtsql = mysql_real_escape_string($nachricht);
    38.  
    39.                 $sql = "INSERT INTO news
    40.                       (intern, datum, name, ueberschrift, nachricht)
    41.                       VALUES
    42.                       ('$intern', '$datumsql', '$namesql', '$titelsql', '$nachrichtsql')";
    43.  
    44.                         $daten_schreiben = mysql_query($sql);
    45.  
    46.                         if ($daten_schreiben) {
    47.                             echo 'Daten wurden geschrieben';
    48.                             }
    49.     }
    50. ?>
    51.  
    52. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    53. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    54.  
    55. <head>
    56.     <title>News schreiben</title>
    57.  
    58.     <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
    59.     <meta name="description" content="" />
    60.     <meta name="author" content="" />
    61.     <meta name="keywords" content="" />
    62.  
    63.     <link href="style.css" type="text/css" rel="stylesheet" />
    64.     <link href="favicon.ico" type="image/x-icon" rel="shortcut icon" />
    65. </head>
    66.  
    67. <body>
    68.     <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
    69.  
    70.      <input type="text" name="name" value="Ihr Name" /><br />
    71.      <input type="text" name="titel" value="Titel" /><br />
    72.      <input type="radio" name="intern" value="nein" checked="checked" /> &Ouml;ffentlich
    73.      <input type="radio" name="intern" value="ja" /> Intern<br />
    74.      <textarea name="nachricht">Ihre Nachricht...</textarea><br />
    75.      <input type="submit" name="absenden" value="Absenden" />
    76.  
    77.      </form>
    78. </body>
    79. </html>
    Und wenn ich schon dabei bin, wie setze ich am besten eine Kommentar Funktion um? So das zu jedem News-Eintrag Kommentare abgegeben werden können. An was meine Ideen hier scheitern ist die Zuordnung der Kommentare zum Richtigen News-Eintrag.

    Danke!
     
    #1      
  2. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.
    #2      
  3. tai

    tai Noch nicht viel geschrieben

    Dabei seit:
    26.12.2008
    Beiträge:
    9
    Geschlecht:
    männlich
    Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.
    AW: Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.

    Sehr nett, danke. Wie schaut es bei dieser Methode dann mit dem "Zurück"-Button aus? Werden dadurch die Daten nicht neu gesendet?
     
    #3      
  4. jens260181

    jens260181 Schmarotzer

    Dabei seit:
    29.05.2006
    Beiträge:
    82
    Geschlecht:
    männlich
    Ort:
    Quellcode
    Software:
    Notepad
    Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.
    AW: Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.

    dann mach ne session. wenn z.b. $_SESSION['sql'] == 1 ist, dann schreibe nix in die datenbank
     
    #4      
  5. tai

    tai Noch nicht viel geschrieben

    Dabei seit:
    26.12.2008
    Beiträge:
    9
    Geschlecht:
    männlich
    Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.
    AW: Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.

    Wenn ich eine weitere Session anlegen, sagen wir wie bei deinem Beispiel [sql], hat diese dann die gleiche Session-ID wie die Session [ok](siehe mein Code ganz oben)? $_SESSION ist sozusagen ein Assoziatives Array? Aber wie soll ich das dann lösen wenn jemand zwei Newseinträge hintereinander schreiben will?:)
     
    #5      
  6. jens260181

    jens260181 Schmarotzer

    Dabei seit:
    29.05.2006
    Beiträge:
    82
    Geschlecht:
    männlich
    Ort:
    Quellcode
    Software:
    Notepad
    Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.
    AW: Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.

    beispiel: 1 news mit reloadsperre

    1. news absenden
    2. prüfe ob session['blabla'] == 1 ist
    2.1 wenn ja, breche ab
    2.2 wenn nein, speichere
    2.2.1 nach dem speichern session['blabla'] = 1 setzen

    was auch möglich wäre, es gibt eine headline. richtig? sagen wir ja, kann auch was anderes sein, was i.dR. einmal vorkommt.

    beispiel headline. nach dem absenden prüfen, ob session['blabla'] == md5('POST[headline']) ist. wenn ja, breche ab, ansponsten speichere die news und setze session['blabla'] = md5('POST[headline'])

    so vergleichst du den md5-hashwert. stimmt er überein, wurde die news schon geschrieben, wenn nicht, darf gespeichert werden.
     
    #6      
  7. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.
    AW: Bei Aktualisieren erneutes Senden der Daten an SQL Datenbank verhindern.

    nein ;)
     
    #7      
x
×
×