0

谁能指出php新手正确的方向?它不会更新数据库,我无法弄清楚。我得到我要更改的文章并将其放入表单,并使用“update1.php”文件更新数据库。

获取文章:

<?php
include ('../db_connect.php');

$getid = $_GET['artikkelID'];

$query = mysql_query('SELECT tittel, ingress, publ, tekst, forfatter, bildetekst, photo FROM hovedartikler WHERE artikkelID = "' . $getid . '"');
$rows = mysql_fetch_assoc($query);

$titteldb = $rows['tittel'];
$ingressdb = $rows['ingress'];
$tekstdb = $rows['tekst'];
$forfatterdb = $rows['forfatter'];
$bildetekstdb = $rows['bildetekst'];
$photodb = $rows['photo'];

echo '<form action="update1.php" method="post" enctype="multipart/form-data">

<span>
ArtikkelID 
<input type="text" name="artikkelID" readonly="readonly" size="3" value="' . $getid . '">
</span>

<span style="margin-left: 20px;">
Artikkelens Tittel ( maks 100 tegn)
<input type="text" name="tittel" cols="80" size="50" value="' . $titteldb . '" /><br />
</span>
<br />

Ingress (maks 255 tegn)<br />
<textarea name="ingress" rows="4" cols="60" />' . $ingressdb . '</textarea><br />

Artikkelens tekst (ingen begrensning på antall tegn)<br />
<textarea id="textarea1" name="tekst" size="100%">' . $tekstdb . '</textarea>
<script language="javascript1.2">
generate_wysiwyg("textarea1");
</script>


Skriv inn artikkelens forfatter (maks 50 tegn)<br />
<input type="text" name="forfatter" size="80" cols="80" value="' . $forfatterdb . '" /><br />

Skriv inn tekst til artikkel-bilde<br />
<textarea name="bildetekst" rows="3" cols="60">' . $bildetekstdb . '</textarea><br />

Last opp bilde til bruk i artikkelen<br />
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<input type="file" name="file" size="80" value="' .   $photodb . '" /><br />

<br />
<input type="submit" name="submit" value="Oppdater" />
</form>';   

?>

和更新脚本:

<?php

$id = $_POST['artikkelID'];
$tittel = $_POST['tittel'];
$ingress = $_POST['ingress'];
$tekst = $_POST['tekst'];
$forfatter = $_POST['forfatter'];
$bildetekst = $_POST['bildetekst'];
$pic = $_FILES['file']['name'];



include '../db_connect.php';

if(isset($_POST['Oppdater']))

$mysql_query=("UPDATE hovedartikler SET 
tittel='" . $_POST['tittel'] . "', ingress='" . $_POST['ingress'] . "', tekst='" . $_POST['tekst'] . "', forfatter='" . $_POST['forfatter'] . "', bildetekst='" . $_POST['bildetekst'] . "', file='" . $_FILES['pic'] . "' WHERE artikkelID='$id'")
or die (mysql_error());

mysql_query($query);
echo "Artikkelen er oppdatert!<br/><br/>
Du vil n&aring; automatisk bli dirigert til Admin-forsiden.";

print_r($ingress);

mysql_close();
?>
<script type="text/javascript">
setTimeout("window.location.href='http://mss-seil.no/admin/adminIndex.php'", 3000);
</script>

所有帮助表示赞赏!

4

4 回答 4

1
$mysql_query=("UPDATE hovedartikler SET tittel='" . $_POST['tittel'] . "', ingress='" . $_POST['ingress'] . "', tekst='" . $_POST['tekst'] . "', forfatter='" . $_POST['forfatter'] . "', bildetekst='" . $_POST['bildetekst'] . "', file='" . $_FILES['pic'] . "' WHERE artikkelID='$id'") or die (mysql_error());

请注意,它是“$mysql_query”而不是“$query”。

mysql_query($mysql_query);

也只是一些旁注:

  • 现在不应该真正使用 mysql_* 函数。看看mysqliPDO
  • 在将输入插入数据库之前,您没有对其进行清理。这不是一个好主意——你让自己对 SQL 注入攻击敞开了大门。您应该转义字符串并将整数转换为整数。如果您遵循第一个建议并使用 PDO 或 mysqli,请考虑使用准备好的语句。

希望有帮助!

于 2013-03-27T22:30:04.143 回答
1

请查找 SQL 注入并从 $_POST 中转义您的值,请 :) - 我猜 Javascript 重定向可以替换为带有“标头”的服务器端 PHP 重定向。

$mysql_query=("UPDATE hovedartikler SET 
tittel='" . $_POST['tittel'] . "', ingress='" . $_POST['ingress'] . "', tekst='" . $_POST['tekst'] . "', forfatter='" . $_POST['forfatter'] . "', bildetekst='" . $_POST['bildetekst'] . "', file='" . $_FILES['pic'] . "' WHERE artikkelID='$id'")
or die (mysql_error());

mysql_query($query);

你有一个带有更新语句的变量“$mysql_query”。但是您将变量“$query”发送到 mysql_query 函数。您不应该将 $mysql_query 变量发送到 mysql_query 函数吗?也许更好的变量名会有所帮助:)

于 2013-03-27T22:30:16.787 回答
1

对于开始停止使用mysql_*函数并开始使用mysqliPDO和带有绑定值的准备好的语句,否则您将面临SQL 注入攻击

其次,现在在设置变量时更改mysql_query($query)mysql_query($mysql_query)删除实际查询和 die 语句周围的括号。您正在尝试运行保存的查询,$query但 UPDATE 查询实际上保存在$mysql_query

它应该看起来更像这样:

$mysql_query = "UPDATE hovedartikler SET 
tittel='" . $_POST['tittel'] . "', ingress='" . $_POST['ingress'] . "', tekst='" . $_POST['tekst'] . "', forfatter='" . $_POST['forfatter'] . "', bildetekst='" . $_POST['bildetekst'] . "', file='" . $_FILES['pic'] . "' WHERE artikkelID='$id'";

mysql_query($mysql_query);
于 2013-03-27T22:27:40.680 回答
1

我不知道这是否是原因,但您在两个文件中使用了不同的引号。

在得到:

"' . $getid . '"'

并且在设置中

WHERE artikkelID='$id'"

artikkelID 是什么数据类型?

如果它是一个 int,则第一个将作为双引号起作用,它不是字符串引号,而是一个“分组”引号,可用于包含带有保留字名称的列

最后一个不能用作单引号 IS 字符串引号,并且您不能将字符串用于 int 列。

例如

我可以像这样查询一个 int 列

WHERE id > "20"

但不是这样

WHERE id > '20'

而对于字符串列

WHERE name = "Hello World"

将尝试将名称列与 Hello World 列匹配,而不是 Hello World 字符串

于 2013-03-27T22:32:09.483 回答