2017-10-09 70 views
0

我正在創建一個簡單的PHP和SQL來執行列表應用程序。我的問題是,每次我編輯一行時,它會創建另一行,而不是隻編輯現有行。下面是一些從的index.php代碼:每次我編輯一行時,它會創建另一行

<?php 

$current_date = date("Y-m-d"); 

if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 

$task = isset($_POST['task']) ? $_POST['task'] : null; 
$importance = isset($_POST['importance']) ? $_POST['importance'] : null; 
$due_date = isset($_POST['due_date']) ? $_POST['due_date'] : null; 
$order = isset($_POST['order']) ? $_POST['order'] : null; 

if(isset($task,$importance,$due_date,$user_name)){ 
$sql = "INSERT INTO tasks (task, importance, due_date, user_name) VALUES ('$task', '$importance', '$due_date', '$user_name')"; 

$result = mysqli_query($connection, $sql) or die(mysqli_error($connection)); 

} 

} 

?> 

<?php 
while($column = mysqli_fetch_assoc($result)){ 
?> 
<tr><td><?php echo $column["task"]?></td><td class="<?php echo $column["importance"] ?>"><?php echo $column["importance"]?></td><?php if($column["due_date"]<$current_date){echo '<td class="overdue">';}else{echo '<td class="not_overdue">';} ?><?php echo $column["due_date"]?></td><td><?php echo "<a href='edit.php?id=".base64_encode($column['task_id'])."'>Edit</a>" ?></td><td><?php echo "<a href='delete_one.php?id=".base64_encode($column['task_id'])."' onclick=\"return confirm('Are you sure?')\">Delete</a>" ?></td></tr> 
<?php 
} 
?> 

下面是一些從edit.php代碼:

<?php 

if($_GET['id'] != ""){ 

$task_id = $_GET['id']; 

$task_id = base64_decode($task_id); 

$sql = "SELECT * FROM tasks WHERE task_id='$task_id'"; 

$result = mysqli_query($connection, $sql) or die(mysqli_error($connection)); 

} 

?> 

<?php 
} 
?> 

<?php 

if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 

$task = isset($_POST['task']) ? $_POST['task'] : null; 
$importance = isset($_POST['importance']) ? $_POST['importance'] : null; 
$due_date = isset($_POST['due_date']) ? $_POST['due_date'] : null; 

if(isset($task,$importance,$due_date)){ 

$sql = "UPDATE tasks SET task='$task', importance='$importance', due_date='$due_date' WHERE task_id='$task_id'"; 

$result = mysqli_query($connection, $sql) or die(mysqli_error($connection)); 

} 

} 

?> 

誰能告訴我什麼,我做錯了什麼?

+3

假設你有一個'insert'的地方,你應該有'update'的地方。 –

+0

這是否意味着舊記錄**和**新記錄都在數據庫中?只能用觸發器 –

+0

@GordonLinoff edit.php中沒有任何插入語句。 – Julian

回答

0

在你的edit.php文件上,Form標籤應該有一個Action指向edit.php來更新。

0

我通過刪除edit.php上的表單動作解決了這個問題。原文:

<form method="post" action="index.php"> 

新:

<form method="post"> 

我加入一個重定向到該代碼塊上edit.php底部:

<?php 

if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 

$task = isset($_POST['task']) ? $_POST['task'] : null; 
$importance = isset($_POST['importance']) ? $_POST['importance'] : null; 
$due_date = isset($_POST['due_date']) ? $_POST['due_date'] : null; 

if(isset($task,$importance,$due_date)){ 

$sql = "UPDATE tasks SET task='$task', importance='$importance', due_date='$due_date' WHERE task_id='$task_id'"; 

$result = mysqli_query($connection, $sql) or die(mysqli_error($connection)); 

header('Location: index.php'); 

} 

} 

?> 
0

我想,在經過對TASK_ID edit.php你有一個表單來編輯值,在這種形式下,動作部分應該更新爲edit.php。

相關問題