2014-07-11 121 views
1

所以我进一步进入我的学习,并跑进这个问题:从我的索引页编辑记录与PHP

更新记录,我能够插入和删除,但努力更新它们。

因此,这显示的链接记录,以更新或删除:

<?php 
$result = mysqli_query($con,"SELECT * FROM items"); 

$y = 'id'; 

while($row = mysqli_fetch_array($result)) { 
    echo $row['added'] . $row['content'] . $row[$y]; 

    echo "<br>"; 

    echo "Mark as complete"; 

    echo "<br>"; 

    echo "<a href='delete.php?id=" . $row['id'] . "'>Delete Item</a>"; 

    echo "<br>"; 

    echo "<a href='update.php?id=" . $row['id'] . "'>Edit Item</a>";  

    echo "<br>"; 
    echo "<br>";  

} 

mysqli_close($con); 
?> 

当用户点击编辑经过该项目,这是很好的ID,但我的形式更新记录时举止异常,提交按钮似乎已经消失,但如果我删除了PHP确实出现,这里是更新形式:

<form action="insertupdate.php" method="post"> 
Content: <input type="text" name="content"> 
<input type="hidden" name="id" value='<?php $_POST ('id'); ?>'> 
<button>dsfsd</button> 
</form> 

这里用于更新的剧本,但它似乎并没有被进行更改:

mysqli_query($con,"UPDATE items SET content='blah blah blah' WHERE id=id"); 

if (isset($_POST['content'])) { 
    mysqli_query($con,"UPDATE items SET content='".mysqli_real_escape_string($con, $_POST['content'])."' WHERE id=".($_POST['id'])); 
} 

header('Location: index.php'); 

mysqli_close($con); 
+0

错误的位检查会帮助你很多。你也很容易受到SQL注入槽'$ _POST ['id']'的影响。 – Vatev

+0

我正在学习PHP,所以我相当新。目前安全问题不是问题,因为这是一个本地项目供我学习。 – stack

+0

出于调试的目的,通过在查询后添加以下内容来打印MySQL错误消息:'或die(mysqli_error($ con));' – entiendoNull

回答

1

更换

<input type="hidden" name="id" value='<?php $_POST ('id'); ?>'> 
<button>dsfsd</button> 

通过

<input type="hidden" name="id" value="<?php echo $_POST['id']; ?>" /> 
<input type="submit" value="Valid" /> 

你的脚本没有得到ID,所以它永远不会工作。

您所查询:

mysqli_query($con, "UPDATE items SET content = '".mysqli_real_escape_string($con, $_POST['content'])."' WHERE id = ".intval($_POST['id'])); 

intval()将其转换成$_POST['id']一些,所以你一定会字符串或特殊字符将不被输入。

+0

并且更新文件中的php看起来不正确? – stack

+0

那里好眼睛。现在的问题是OP如何测试按钮,因为他的代码会失败并带有致命错误。 – Vatev

+0

@stack:我制作并编辑。 – djidi

0

我以前总是这样得到这样的错误。幸运的是,MySQL中有一些非常好的错误处理。加入这个else条件中,如果与查询:

if (isset($_POST['content'])) { 
     mysqli_query($con,"UPDATE items SET content='".mysqli_real_escape_string($con, $_POST['content'])."' WHERE id='".($_POST['id'])."'"); 
    } else { 
     mysqli_error($con); 
    } 

哦,直接解决您的问题,它看起来像你需要周围的查询的ID部分报价:

mysqli_query($con,"UPDATE items SET content='".mysqli_real_escape_string($con, $_POST['content'])."' WHERE id='".($_POST['id'])."'"); 
+0

嗯,我的脚本仍然没有更新记录,它传递了id,它显示没有错误,但仍然没有改变项目的内容... – stack