填写以前数据库条目的表单字段 - php

时间:2015-01-11 23:40:08

标签: php html mysql database mysqli

我正在尝试创建一个表单,其中所有内容都是从用户的上一个条目中填写的。它假设由用户选择"更新"链接。但是表格根本没有填写。 我现在已经试图解决这个问题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>

1 个答案:

答案 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

进一步更新代码: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