我正在尝试创建一个表单,其中所有内容都是从用户以前的条目中填写的。它应该由用户选择"更新"链接来工作。但是,该表格根本没有填写。我已经试图弄清楚 2 天了,但我似乎无法弄清楚。一些帮助将不胜感激,谢谢!
向上.php
<form method="POST" action="up1.php">
<?php
$connection = mysql_connect("xxxxx","xxxxx","xxxxx")
or die("Could not make connection.");
$db = mysql_select_db("xxxxx")
or die("Could not select database.");
$sql1 = "SELECT * FROM emp ORDER BY primeID DESC ";
$sql_result = mysql_query($sql1) or die("Invalid query: " . mysql_error());
while ($row = mysql_fetch_array($sql_result))
{
$prime = $row["primeID"];
}
?>
<a href="up1.php?up22=<? echo $prime; ?>"target="_self">Update</a>
</form>
向上1.php
<form action="up2.php" method="post">
<?
$connection = mysql_connect("xxxxx","xxxxx","xxxxx")
or die("Could not make connection.");
$db = mysql_select_db("xxxxx")
or die("Could not select database.");
$sql1 = "SELECT * FROM emp WHERE primeID = '$up22'";
$sql_result = mysql_query($sql1)
or die("Invalid query: " . mysql_error());
while ($row = mysql_fetch_array($sql_result))
{
$prime = $row["primeID"];
$a1 = $row["country"];
$a2 = $row["job"];
$a3 = $row["pos_type"];
$a4 = $row["location"];
$a5 = $row["des"];
$a6 = $row["des_mess"];
$a7 = $row["blurb"];
$a8 = $row["restitle"];
$a9 = $row["res"];
$a10 = $row["knowtitle"];
$a11 = $row["know"];
$a12 = $row["mis"];
$a13 = $row["mis_des"];
}
?>
<input name="aa1" value="<? echo $a1; ?>" type="text" id="textfield" size="60">
<input name="a1" type="text" value="<? echo $a2; ?>" id="textfield" size="60">
<input name="a2" type="text" value="<? echo $a3; ?>" id="a2" size="60">
<input name="a4" type="text" value="<? echo $a5; ?>" id="a4" size="60">
</form>
根据我能从你的帖子中获得的有限信息,我想我发现了问题:
从向上开始.php
<a href="up1.php?up22=<? echo $prime; ?>" target="_self">Update</a>
实际发送"GET 请求"(使用查询字符串加载页面)。我们需要重建它:
<a href="JavaScript: void(0)" onclick="this.parentElement.submit()" >Update</a>
现在,此链接将发送表单。但是,我们需要将值发送到$prime
。让我们在表单中使用隐藏的输入。
<input type="hidden" name="up22" value="<? echo $prime; ?>" />
现在,当用户单击链接时,它会发布表单并加载 up1.php 带有 post var up22
。
对 up1 的更改.php
$sql1 = "SELECT * FROM emp WHERE primeID = '".$_POST['up22']".'";
PDO地址
进一步更新代码:PDO 是一种更安全的查询方式。 mysql
查询已弃用。它们不应该再被使用。
将数据库调用替换为以下代码:
function openDBConnection()
{
$name = "xxxxxx";
$pw = "xxxxxx";
$server = "xxxxxxx";
$dbConn = new PDO("mysql:host=$server;dbname=xxx", $name, $pw, , array( PDO::ATTR_PERSISTENT => false));
}
catch( PDOException $Exception )
{
echo "120001 Unable to connect to database.";
}
return $dbConn;
}
function doPDOQuery($sql, $type, $var = array())
{
$db = openDBConnection();
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
if ($type == "prepare")
{
$queryArray = $var;
$sth = $db->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute($queryArray);
}
else if ($type == "query")
{
$sth = $db->query($sql);
}
else
{
echo "Supplied type is not valid.";
exit;
}
if (!$sth)
{
$error = $db->errorInfo();
echo $error;
exit;
}
return $sth;
}
这些函数可用于对数据库进行 PDO 查询。第一个函数打开数据库连接,而第二个函数实际执行查询。不需要调用第一个函数。它在第二个中被称为。
基于您的代码的示例:
$sql1 = "SELECT * FROM emp WHERE primeID = :id";
$sql_result = doPDOQuery($sql1, 'prepare', array(":id" => $_POST['up22']));
while ($row = $sql_result->fetchAll() )
{
//loop through the results.
}
PDO的工作原理如下:PDO不是将php变量传递到SQL字符串中(并冒SQL注入的风险),而是将SQL字符串和变量传递给数据库,让数据库的驱动程序构建查询字符串。
PDO变量可以按名称或索引声明:
- 按名称:使用
:
声明命名变量。SELECT * FROM TABLE WHERE id = :id
.每个密钥必须是唯一的。 - 按索引:使用
?
声明索引变量。SELECT * FROM TABLE WHERE id = ?
包含变量的数组需要传递给 PDO。
命名数组:
array(":id" => 1);
索引数组:
array(1);
使用命名数组,您不必担心变量的顺序。
http://php.net/manual/en/book.pdo.php