我正在尝试创建一个表单,其中所有内容都是从用户的上一个条目中填写的。它假设由用户选择"更新"链接。但是表格根本没有填写。 我现在已经试图解决这个问题2天但我似乎无法弄明白。非常感谢一些帮助,谢谢!
up.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>
up1.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>
答案 0 :(得分:0)
基于有限的信息我可以从你的帖子中找到我认为我发现了问题:
从 up.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; ?>" />
现在,当用户点击该链接时,它会发布表单并使用post var up22
加载 up1.php 。
对 up1.php
的更改$sql1 = "SELECT * FROM emp WHERE primeID = '".$_POST['up22']".'";
进一步更新代码: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);
使用命名数组,您不必担心变量的顺序。