2016-04-15 62 views
3

我试图创建一个使用html格式更新mysql数据的php页面时出现了一个奇怪的问题。使用php和表格更新mysql数据

这个想法是创建一个页面,该页面从我拥有的“新闻”表中检索所有行,并将所有数据作为“默认”值插入到HTML表单中,以便在更改之前查看已经写入的内容无论我想用这种形式。每个表格都是专门为检索的每一行数据生成的。

为此,我使用POST方法和两个php文件,一个名为“updateNews.php”,用于检索数据和呈现表单,另一个名为“newsUpdater.php”,用于注入更新后的数据。

我在这里有两个问题。其一,表单不会发布表单中写入的新数据,而是发布发布为“默认”的原始数据。我想这是我的表单代码中的一个问题。我想我不会将“默认”值编码。

第二个问题很奇怪。我以相反的顺序从“新闻”表中检索行,但是当我“提交”与特定行关联的表单时,它会从第一行中发布数据,而不是我感兴趣的行。

这是我的代码中的第一个PHP文件,检索数据并呈现形式:

<html> 

<head>   
    <?php 
     include "connectToNews.php"; 
     mysqli_set_charset($conToNews,"utf8"); 
     $query = mysqli_query ($conToNews, "SELECT * FROM news ORDER BY id DESC"); 

    ?> 

</head> 

<body> 

    <?php 

     while ($newsArray = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
      echo "<form action='newsUpdater.php' method='post' enctype='multipart/form-data'>"; 
      echo "<p>".$newsArray['id']."</p><br>"; 
      echo "<input name='Id' type='hidden' value='".$newsArray['id']."'>"; 
      echo "<input class='input' name='Fecha' type='text' value='".$newsArray['fecha']."'><br>"; 
      echo "<textarea class='textarea' name='Headline' type='text'>".$newsArray['headline']."</textarea><br>"; 
      echo "<textarea class='textarea' name='Story' type='text'>".$newsArray['story']."</textarea><br>"; 
      echo "<input type='submit' value='Actualizar'><br><br><br>"; 
      echo "</form>"; 
     } 
    ?> 

</body> 
</html> 

所以,你可以看到,我使每个现有行新<Form>。我使用2 <input>标签和2 <textarea>标签。其中一个<input>标签被隐藏,并且具有与特定行数据相关联的“Id”信息。在任何情况下,我使用“回声”与此Id数据来验证正在检索好(是)。我使用“value”属性将检索到的文本设置为<input>标记中的默认文本。 在<textarea>标签中,我使用开始标签和结束标签之间的空格来定位“默认”文本。

在这一点上,一切都呈现好吧,我得到的,因为有行中的“新闻”表和多种形式,当我按下提交按钮,它带我到第二个PHP文件。

第二个php文件是“数据更新程序”。该代码是faollowing:

<html> 

<head> 
    <?php 
     $Id=$_POST['Id']; 
     $Fecha=$_POST['Fecha']; 
     $Headline=$_POST['Headline']; 
     $Story=$_POST['Story']; 

     echo "<p>".$Id."</p><br>"; 
     echo "<p>".$Fecha."</p><br>"; 
     echo "<p>".$Headline."</p><br>"; 
     echo "<p>".$Story."</p><br>"; 

     include "connectToNews.php"; 
     mysqli_set_charset($conToNews,"utf8"); 
     $query=mysqli_query ($conToNews, "UPDATE news SET fecha='$Fecha' headline='$Headline' story='$Story' WHERE id='$Id'"); 
    ?> 
</head> 

<body> 
    <?php 
     echo "<p>News updated</p><br>"; 
     echo "<p><a href='updateNews.php'>Go back to form</a></p>"; 
    ?> 
</body> 
</html> 

正如你所看到的,I'm保存发布数据“$ _ POST [‘什么’]”到4个变量,只是为了有一个更容易的时间书面方式未来的MySQL查询。

然后,我回应这个变量来检查什么信息真的被传递。这就是奇怪的地方,因为无论我在表单中编辑哪一行或者我在表单中写什么,我的“新闻”表中的第一行都会显示呈现的文本。

的另一个问题是,如果获取到相关的更新过程中的“OK”消息方面,数据从不保存到“新闻”表。虽然我可能是错的,因为我真的将第1行的原始文本注入第1行,而不管我真的想要编辑哪一行。

你能读我的代码,并告诉我,如果你们看不出什么问题。

谢谢!

回答

3

在更新查询更新的列必须用逗号分隔,这就解释了为什么你的数据不被更新。

你没有确切知道查询失败的原因,以及为什么你没有测试查询是否真正起作用。

它总是一个非常好的主意来测试所有MYSQLI_调用的结果,所以我会补充。那么这将显示一条错误信息,这将有助于在bebugging

$query=mysqli_query ($conToNews, 
     "UPDATE news SET fecha='$Fecha', 
         headline='$Headline', 
         story='$Story' 
     WHERE id='$Id'"); 


if ($query === FALSE) { 
    echo mysqli_error($conToNews); 
    exit; 
} 

你在这个代码中的一些SQL注入的问题,你应该阅读How can I prevent SQL injection in PHP?

+0

感谢RiggsFolly,即做到了! –

+0

完成!再次感谢。 –