填写上一个数据库条目中的表单字段 - PHP


filling in form fields from previous database entry - php

我正在尝试创建一个表单,其中所有内容都是从用户以前的条目中填写的。它应该由用户选择"更新"链接来工作。但是,该表格根本没有填写。我已经试图弄清楚 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