php - 从 Mysql 数据库中检索数据,显示在表单上,​​并允许用户使用 PHP 进行更新

标签 php sql-update

我对 PHP 很陌生。我有一个页面,我希望用户能够在其中输入引文,然后将该信息传递给查询数据库的 php 脚本,以表单形式返回信息,然后允许用户更新任何字段以那种形式返回。

我有三个问题:

1) 数据返回时,只返回字段中的第一个单词。许多字段包含多个单词。

2) 当用户更改字段中的数据时,数据库不会更新。

3) 我似乎不知道如何让表单域像输入数据时那样显示。

下面是查询和返回数据的代码,供用户在必要时查看和更新​​:

<?php  


mysql_connect("***************", "*********", "****") or die(mysql_error()); 
mysql_select_db("***********") or die(mysql_error()); 

$searchterm= $_POST['searchterm'];

$query = "SELECT Citation, Category, Overview, Facts, Decision, Keywords, Link     FROM     cases WHERE citation = '$searchterm'";

$result  = mysql_query($query);

while ($row = mysql_fetch_assoc($result))
{
    echo "<form action=".$_SERVER['PHP_SELF']." method=post>" .
         "Case Citation: <input type=text name=Citation value={$row['Citation'] }><br>" .
     "Category: <input type=text name=Category value={$row['Category'] }><br>" . 
     "Overview: <input type=text name=Overview value={$row['Overview'] }><br>" . 
     "Case Facts: <input type=text name=Facts value={$row['Facts'] }><br>" . 
     "Decision: <input type=text name=decision value={$row['Decision'] }><br>" . 
     "Keywords: <input type=text name=Keywords value={$row['Keywords'] }><br>" . 
     "Weblink: <input type=text name=Link value={$row['Link'] }><br>" . 
     "<input type=submit name=submit value=Update>" .
     "</form>";
} 

//when they click submit
if (isset($_POST['submit'])) { 

$Citation=$_POST['Citation'];
$Category=$_POST['Category'];
$Overview=$_POST['Overview'];
$Facts=$_POST['Facts'];
$Decision=$_POST['Decision'];
$Keywords=$_POST['Keywords'];
$Link=$_POST['Link'];

$update = "UPDATE IGNORE cases SET citation='$citation', category='$category', overview='$overview', facts='$facts', decision='$decision', keywords='$keywords', link='$link' WHERE citation = '%$searchterm%'";
$add = mysql_query($update);

} 
  ?>

这是我用来添加数据的表单:

<form action="process.php" method="post"> 
Case Citation: <input type="text" name="citation" size=128><br> 
Category: <input type="text" name = "category" size=56><br> 
Overview: <textarea class="textarea" cols="96" row="8" name = "overview"> </textarea><br> 
Case Facts:  <textarea class="textarea" cols="96" row="8" name = "facts"></textarea><br>
Decision:  <input type="text" name = "decision" size=56><br>
Keywords: <textarea class="textarea" cols="96" row="8" name = "keywords"></textarea><br>
Web Link: <input type="text" name = "link" size=128><br>
<input type="submit" value="Submit"> 
</form> 

这是将信息保存到数据库的代码:

<? 
  $citation=$_POST['citation']; 
  $category=$_POST['category']; 
  $overview=$_POST['overview']; 
  $facts=$_POST['facts']; 
  $decision=$_POST['decision']; 
  $keywords=$_POST['keywords']; 
  $link=$_POST['link']; 
  mysql_connect("*************", "************", "*********") or die(mysql_error()); 
  mysql_select_db("************") or die(mysql_error()); 
  mysql_query("INSERT INTO `cases` VALUES ('$citation', '$category', '$overview', '$facts', '$decision', '$keywords', '$link')"); 
  Print "Your information has been successfully added to the database.  Add case page will automatically reload."; 

?> 

最佳答案

您的第一个(可能还有其他...)问题是由您构建表单的方式引起的:

echo "<form action=".$_SERVER['PHP_SELF']." method=post>" .
     "Case Citation: <input type=text name=Citation value={$row['Citation'] }><br>" .
 "Category: <input type=text name=Category value={$row['Category'] }><br>" . 
 "Overview: <input type=text name=Overview value={$row['Overview'] }><br>" . 
 "Case Facts: <input type=text name=Facts value={$row['Facts'] }><br>" . 
 "Decision: <input type=text name=decision value={$row['Decision'] }><br>" . 
 "Keywords: <input type=text name=Keywords value={$row['Keywords'] }><br>" . 
 "Weblink: <input type=text name=Link value={$row['Link'] }><br>" . 
 "<input type=submit name=submit value=Update>" .
 "</form>";

请注意,所有属性的值均未加引号,因此在 html 中,其中一个输入可能如下所示:

Decision: <input type=text name=decision value=this is some text from that field><br>

那不是有效的 html。

您应该引用所有值并准备/转义它们以便在 html 中使用:

 'Decision: <input type=text name=decision value="' . htmlspecialchars($row['Decision']) . '"><br>' . 
 etc.

除此之外,您还有一个 sql 注入(inject)问题,您应该通过切换到 PDO(或 mysqli)和带有绑定(bind)变量的准备语句来解决。

请注意,如果您的值之一包含例如 ' 字符,sql 注入(inject)问题不仅会让您处于危险之中,而且还很容易使您的 sql 无效。

关于php - 从 Mysql 数据库中检索数据,显示在表单上,​​并允许用户使用 PHP 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14464891/

相关文章:

php - 我需要将阿拉伯语数据存储到mysql中

PHP 数据不会添加到表中

php - 引用 - 如何在 SimpleXML 中处理命名空间(名称中带有冒号的标签和属性)?

sql - 如何使用表 B 中的信息更新表 A 中的列

json - jsonb 字段中的 PostgreSQL 重命名属性

php echo emoji 变成问号,但是粘贴到这里就可以了

php - 使用用户名或电子邮件登录

php - 为了不覆盖列值而给 MySQL 更新的默认值?

sql - 此更新有什么问题?

postgresql - 仅在列存在时执行更新