2016-08-13 19 views
0

Für Ereignisliste Seite. Nach dem Einfügen Datensatz in Db ich erfassen letzte ID mitWarum erstellt UPDATE einen neuen Datensatz?

//Store ID[LAST] 
    $ID = mysqli_insert_id($db); 

Als nächstes zeigt die Seite Ereignis für das einfache Lesen formatiert. Dann kann der Benutzer den Artikel zur Veröffentlichung mit 2 Schaltflächen halten oder freigeben: Entwurf, Veröffentlichen. Ich benutze Submits Tasten für jeden:

//Check ID value (use for testing) 
    echo "<p>ID = ".$ID."</p>\n"; 

    echo "<form action='".$_SERVER['PHP_SELF']."' method='GET'> 
    <input type='submit' name='submitDraft' value='Draft' /> 
    <input type='submit' name='submitPublish' value='Publish' /> 
    </form>"; 

Jetzt verwende ich bedingte, um Datensatz entsprechend ausgewählten Knopf zu aktualisieren. (Hinweis connect.php ist enthalten, dass verwaltet Passwörter und Verbindungsanweisung.)

if (isset($_REQUEST["submitDraft"])) { 
    include('includes/connect.php'); 
    $sql="UPDATE sessions SET postit='0' WHERE ID='$ID'"; 
    if (mysqli_query($db, $sql)) { 
      echo "Record updated successfully"; 
     } else { 
      echo "Error updating record: " . mysqli_error($db); 
     } 

     mysqli_close($db); 
    } 

    if (isset($_REQUEST["submitPublish"])) { 
    include('includes/connect.php'); 
    $sql="UPDATE sessions SET postit='1' WHERE ID='$ID'"; 
    if (mysqli_query($db, $sql)) { 
      echo "Record updated successfully"; 
     } else { 
      echo "Error updating record: " . mysqli_error($db); 
     } 

     mysqli_close($db); 
    } 

Mein Problem ist, UPDATE-Anweisung neuen Datensatz Tabelle hinzufügt, sollte aber denselben Datensatz aktualisieren. Was ist mein Fehler bitte.

+0

Müssen Sie ID für jeden Datensatz in der Tabelle eindeutig sein? –

+0

Haben Sie einen Trigger für diese Tabelle definiert? – Rahul

+0

@Jay Patel ja - ID muss eindeutig sein. – parboy

Antwort

0

Ich löse dies. Da das Formular die ganze Seite erneut einreicht, wird jedesmal insert statement ausgeführt und ein neuer Datensatz hinzugefügt. Dieser Datensatz wird ebenfalls aktualisiert, so dass UPDATE als neuer Datensatz hinzugefügt wird. Wirklich INSERT machen neue Datensatz und UPDATE ändern 'Postit' Feld in der gleichen Zeit. Um zu beheben, füge ich bedingte wenn $_REQUEST not equal submitDraft or submitPublish then INSERT hinzu, sonst überspringe es INSERT. Ich sehe auch die gleiche Antwort von @Jay Patel und @ SBA. Vielen Dank an beide

1

Ich denke, Sie sollten die letzte Einfüge-ID in einem Sitzungswert halten und verwenden, wenn der Benutzer auf Entwurf oder Veröffentlichen klickt, da die Einfügung von Daten und Ereignissen Entwurf oder Veröffentlichung zu unterschiedlichen Zeiten auftreten.

//Store ID[LAST] 
$_SESSION['ID'] = mysqli_insert_id($db); 

if(isset($_SESSION['ID'])){ 
    $ID=$_SESSION['ID']; 
    //Check ID value (use for testing) 
    echo "<p>ID = ".$ID."</p>\n"; 
    } 


echo "<form action='".$_SERVER['PHP_SELF']."' method='GET'> 
<input type='submit' name='submitDraft' value='Draft' /> 
<input type='submit' name='submitPublish' value='Publish' /> 
</form>"; 

if (isset($_REQUEST["submitDraft"])) { 
include('includes/connect.php'); 
if(isset($_SESSION['ID'])){ 
    $ID=$_SESSION['ID']; 
    } 
$sql="UPDATE sessions SET postit='0' WHERE ID='$ID'"; 
if (mysqli_query($db, $sql)) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . mysqli_error($db); 
    } 

    mysqli_close($db); 
} 

if (isset($_REQUEST["submitPublish"])) { 
include('includes/connect.php'); 
if(isset($_SESSION['ID'])){ 
    $ID=$_SESSION['ID']; 
    } 
$sql="UPDATE sessions SET postit='1' WHERE ID='$ID'"; 
if (mysqli_query($db, $sql)) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . mysqli_error($db); 
    } 

    mysqli_close($db); 
} 
+0

Die Einstellung der SESSION-Variable fügt immer noch einen neuen Datensatz hinzu. Überprüfen Sie die ID-Wert-Test-Inkremente ++ jedes Mal, wenn Sie auf Entwurf oder Veröffentlichen klicken. – parboy

+0

@parboy versuchen, die Verbindung einmal am oberen Rand der Seite einzubeziehen, so dass keine neue Verbindung hergestellt wird, wenn auf die Veröffentlichen- oder Entwurfsschaltfläche geklickt wird. Update sollte nicht zu Dateneinfügung führen, also setzen Sie Verbindung oben und lassen Sie sehen – SBA

Verwandte Themen