Php 如何将mysql\u insert\u id()传递给$\u POST或form action?
我有一个表单页面,其中提交了一个插入或更新查询,具体取决于ID的存在/不存在(当有ID时,它用于检索记录和预填充表单)。在任何一种情况下,处理都是在form.php中进行的,因此表单的操作就是它本身(Php 如何将mysql\u insert\u id()传递给$\u POST或form action?,php,mysql-insert-id,Php,Mysql Insert Id,我有一个表单页面,其中提交了一个插入或更新查询,具体取决于ID的存在/不存在(当有ID时,它用于检索记录和预填充表单)。在任何一种情况下,处理都是在form.php中进行的,因此表单的操作就是它本身(action=“/form.php”>)。我的问题是,当form.php重新加载post submit时,URL的ID为空,因此页面进入“插入”模式,而不是“更新”模式。解决这个问题的最佳实践方法是什么 我应该在“如果”中添加什么运算符/条件 if(isset($\u GET['ID'])和&is_
action=“/form.php”>
)。我的问题是,当form.php重新加载post submit时,URL的ID为空,因此页面进入“插入”模式,而不是“更新”模式。解决这个问题的最佳实践方法是什么
if(isset($\u GET['ID'])和&is_numeric($\u GET['ID']){
form.php?ID=
)
或者
$newID=mysql\u insert\u id();
…[剪断]。。。
通常的做法应该是将数据发布与数据显示分开。这可以防止在用户首次到达页面时意外添加内容,以及在用户点击刷新时意外重复发布内容
此外,保持逻辑的独立性使代码在将来更具可读性和可维护性
您可能应该寻找的方法是:
view.php?ID=<record to view> // Only displays a record already in the DB
add.php // The add record form with action="process_add.php"
process_add.php?Field1=<>&Field2=<>... // Receives data from add.php, puts it in
// the database and then forwards back to
// view.php or add.php as you see fit.
view.php?ID=//只显示数据库中已有的记录
add.php//使用action=“process\u add.php”添加记录表单
process_add.php?Field1=&Field2=…//从add.php接收数据,将其放入
//数据库,然后转发回
//view.php或add.php。
EDIT:虽然我在process\u add.php上有GET参数,但它们只是用来证明它们是被传递的。它们应该作为POST参数发送到实际实现中。下面是这样一个代码示例,使用模板。
基于传递id思想的CRUD应用
但不知道,为什么需要传递新生成的id
<?
mysql_connect();
mysql_select_db("new");
$table = "test";
if($_SERVER['REQUEST_METHOD']=='POST') { //form handler part:
$name = mysql_real_escape_string($_POST['name']);
if ($id = intval($_POST['id'])) {
$query="UPDATE $table SET name='$name' WHERE id=$id";
} else {
$query="INSERT INTO $table SET name='$name'";
}
mysql_query($query) or trigger_error(mysql_error()." in ".$query);
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
exit;
}
if (!isset($_GET['id'])) { //listing part:
$LIST=array();
$query="SELECT * FROM $table";
$res=mysql_query($query);
while($row=mysql_fetch_assoc($res)) $LIST[]=$row;
include 'list.php';
} else { // form displaying part:
if ($id=intval($_GET['id'])) {
$query="SELECT * FROM $table WHERE id=$id";
$res=mysql_query($query);
$row=mysql_fetch_assoc($res);
foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v);
} else {
$row['name']='';
$row['id']=0;
}
include 'form.php';
}
?>
谢谢Rikudo。我已经重温了我之前的一些帖子,并在可能的情况下进行了更新。否则,为什么投票被否决?我的问题不合法/有用吗?p.s.谢谢修复马歇尔。(我尝试了几次添加此评论)不知道,我没有投反对票,但投了赞成票以保持平衡。这个问题非常有效。谢谢tdk001。事实上,当form.php比现在更简单时,我本来有一个单独的process.php,所以我会继续将INSERT&UPDATE查询移回。不过,我必须将mysql_INSERT_id从process.php传递到form.php,所以提交后,我将始终处于上次编辑/创建记录的编辑模式。CheersGET方法不应用于存储数据。Thx Col。我使用GET是因为我有时会从摘要视图页面(所有记录)访问form.php使用“编辑记录”链接;否则,我会从“新记录”链接进入form.php。我认为@Col.shrapanel对于处理页面是有意义的,他是对的。get
可以转到view.php
或add.php
,但从add.php
到proces时应该使用POST
s_add.php
。啊,是的,我明白了(没有双关语;)…我在提交formCheers时使用了$\u POST,这里有很多要消化的内容。现在,由于我可能要从form.php中删除处理,我还没有想到我要做什么POST submit,所以我可能根本不需要传递mysql\u insert\u id。也就是说,我可能只需要返回到summary视图,正如我上面提到的,我可以从该视图她编辑了一个现有的记录,或者启动了一个新的记录。再次感谢Col。我肯定可以从你的代码中学习一些语法,并改进我迄今为止的工作。很高兴你喜欢它。我相信你也可以得到一些想法,比如在未设置、零或pozitie时使用模板或3向使用id
<? include TPL_TOP ?>
<form method="POST">
<input type="text" name="name" value="<?=$row['name']?>"><br>
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="submit"><br>
<a href="?">Return to the list</a>
</form>
<? include TPL_BOTTOM ?>
<? include TPL_TOP ?>
<a href="?id=0">Add item</a>
<? foreach ($LIST as $row): ?>
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
<? endforeach ?>
<? include TPL_BOTTOM ?>