我从2015年9月开始学习基本的php,我必须创建一个功能完备的php更新代码的网站。
我现在拥有的是一个包含3行的新闻页面,必须在管理面板中更新每个字段(日期,标题和内容)的提交按钮,因此有3个表格可供3篇新闻文章使用。 / p>
显示字段的[http://i.imgur.com/zFhiDR8.png]图片。
因此,每次创建新行时(即使总会有3行),管理面板中会出现一个新表单。
现在,我遇到的问题是只有最后一个字段得到更新。 例如,我在所有3种形式中键入信息,但只有最后一种形式在按下提交按钮时根据相应的表单获取新闻页面上显示的更新信息。更新的信息也没有添加到数据库中。
如果我在第一个内容字段(inhoud)中输入信息并按更新,则只会检查最后一个表单是否已更新。
考虑一下,这意味着我的代码只检查数据库的最后一个ID,对吧? 为了测试,我在数据库中添加了一个自动递增id为4的新行。结果是只检查第四个id进行更新。 它还在我的错误检查器中说:
“没有记录更新... ...... ...... ID = 9”
这是我能想到的所有信息。
这是我的PHP代码:
<?php
session_start();
if(!isset($_SESSION['gebruiker'])){
header ("Location: admin_login.php");
}
else{
require_once 'db_config.php';
$query = "
SELECT
*
FROM
gip_home_nieuws";
$result = mysql_query($query);
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Geen resultaten gevonden';
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Pagina's updaten</title>
<link href="admin_page1_css.css" rel="stylesheet" type="text/css">
</style>
</head>
<body>
<div id="container">
<div id="cont_header">
<div id="header">
<div id="header_logo"><a href="home.php"><img src="images/logo.png" width="200" height="110"></a></div>
<div id="header_slogan">We secure your future, the easy way</div>
<div id="knop_cont">
<div class="navigatie_knop" id="knop_nieuws"><a href="nieuws.php">Nieuws</a></div>
<div class="navigatie_knop" id="knop_overons"><a href="overons.php">Over ons</a></div>
<div class="navigatie_knop" id="knop_producten"><a href="producten.php">Producten</a></div>
<div class="navigatie_knop" id="knop_winkel"><a href="winkel.php">Winkel</a></div>
<div class="navigatie_knop" id="knop_contact"><a href="contact.php">Contact</a></div>
<div class="navigatie_knop" id="knop_uitloggen"><a href="admin_logout.php">Uitloggen</a></div>
</div>
</div>
</div>
<div id="divider1"></div>
<div id="cont_inhoud">
<div id="contact1">
<div class="contact_titel id="contact1_t>Administratie</div>
<div id="contact1_c">
<form method="post" action="<?php $_PHP_SELF ?>">
<table width="400" border="0" cellspacing="1" cellpadding="2">
<tr>
<?php
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$nieuws_date = $row['nieuws_date'];
$nieuws_titel = $row['nieuws_titel'];
$nieuws_content = $row['nieuws_content'];
?>
<td width="100"></td>
</tr>
<tr>
<td width="100">id</td>
<td><input class="input1" name="form_id" type="text" value="<?=$id?>"></td>
</tr>
<tr>
<td width="100">Datum</td>
<td><input class="input1" name="form_date" type="text" value="<?=$nieuws_date?>"></td>
</tr>
<tr>
<td width="100">Titel</td>
<td><input class="input2" name="form_titel" type="text" value="<?=$nieuws_titel?>"></td>
</tr>
<tr>
<td width="100">Inhoud</td>
<td><textarea class="input3" name="form_content" type="text"><?=$nieuws_content?></textarea></td>
</tr>
<tr>
<td width="100"> </td>
<td> </td>
</tr>
<tr>
<td width="100"> </td>
<td>
<p><input type="submit" name="updaten" value="gegevens updaten"/>
<?php } ?></p>
</td>
</tr>
</table>
</form>
<?php
if(isset($_POST[updaten]))
{
$id2 = $_POST['form_id'];
$nieuws_date2 = $_POST['form_date'];
$nieuws_titel2 = $_POST['form_titel'];
$nieuws_content2 = $_POST['form_content'];
$sql = "
UPDATE
gip_home_nieuws
SET
nieuws_date = '".$nieuws_date2."',
nieuws_titel = '".$nieuws_titel2."',
nieuws_content = '".$nieuws_content2."'
WHERE
id=$id2
";
}
if(!$res = mysql_query($sql)) {
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_affected_rows() == 0) {
echo 'Geen records gegwijzigd. <br />Query: '.$sql;
echo"<a href=\"index.php\">Terug</a";
}
else
{
echo 'Update was succesvol!';
echo"<a href=\"index.php\"<br><br>>Terug</a";
}
?>
</div>
</div>
</div>
<div id="divider2"></div>
<div id="footer">
<div id="cont_footer">
<div id="footer_info">© Belgian Space Industries 2016</div>
</div>
</div>
</div>
<?php } ?>
</body>
</html>
我真的很感激一些帮助!
编辑:看到一些评论的帖子说我不应该使用mysql_ *函数,我被教导使用MYSQL_ *函数。
很抱歉,如果对此存在困惑,但我无法真正做到这一点!
答案 0 :(得分:0)
如果您运行此代码并填写每个文本输入,那么在您提交表单时会发生什么?
<?php
var_dump($_POST)
?>
<form method="POST">
<input type="text" name="foo">
<input type="text" name="foo">
<input type="text" name="foo">
<input type="submit">
</form>
由于上述foo字段中的所有三个字段都具有相同的名称,因此在POST时,只有一个foo输入值可用(它将破坏其他两个)。
您需要通过在循环中创建每个表单来创建三个单独的表单。目前你有一个表单(你的表单html标签环绕着循环)。
你想要更类似于此的东西:
<?php for($i=0; $i<3; $i++ ) { ?>
<form method="POST">
<table>
<tr>
<td>
Foo:
</td>
<td>
<input type="text" name="foo">
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit">
</td>
</tr>
</table>
</form>
<?php } ?>
暂时换掉for。
您至少应该在查询中转义提交的值,以减少sql注入的可能性。
$sql = "
UPDATE
foo_table
SET
bar_field = '".mysql_real_escape_string($bar_value)."',
WHERE
baz_field = $baz_value
";
正如其他人指出的那样,mysql函数在PHP 5.5.0中已弃用,并在PHP 7.0.0中删除。 Mysqli是一个类似的替代扩展。