任何人都可以指出一个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å 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>
所有帮助表示赞赏!
答案 0 :(得分:1)
要使用mysql_*
函数开始停止并开始使用mysqli或PDO以及带有限定值的预准备语句,您将面临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);
也只是一些旁注:
希望有所帮助!
答案 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字符串