mysql更新脚本

时间:2013-03-27 22:24:15

标签: php

任何人都可以指出一个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 个答案:

答案 0 :(得分:1)

要使用mysql_*函数开始停止并开始使用mysqliPDO以及带有限定值的预准备语句,您将面临SQL injection attacks

其次,现在将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);

答案 1 :(得分: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,请查看使用预准备语句。

希望有所帮助!

答案 2 :(得分:1)

请查找SQL-Injections并从$ _POST中转义您的值,请:) - 我猜,Javascript-redirect可以替换为带有“header”的服务器端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);

你有一个带有Update-Statement的变量“$ mysql_query”。但是你向mysql_query函数发送一个变量“$ query”。你不应该将$ mysql_query变量发送到mysql_query函数吗?也许更好的变量名称可能会有所帮助:)

答案 3 :(得分:1)

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

获得:

"' . $getid . '"'

在设置中

WHERE artikkelID='$id'"

artikkelID的数据类型是什么?

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

最后一个不能用作单引号是字符串引用,你不能将字符串用于int列。

例如

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

WHERE id > "20"

但不喜欢这个

WHERE id > '20'

而对于字符串列

WHERE name = "Hello World"

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