2013-03-27 94 views
0

任何人都可以將php新手指向正確的方向?它不會更新數據庫,我無法弄清楚。我得到我想要更改的文章並將其放入表單中,並使用「update1.php」文件更新數據庫。mysql更新腳本

獲取相應的文章:

<?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> 

所有幫助感激!

回答

1

對於使用mysql_*功能,並開始使用mysqliPDO和準備的語句與綁定值,也將面臨SQL injection attacks開始停止

其次,現在將mysql_query($query)更改爲mysql_query($mysql_query),並在設置變量時從實際查詢和死語句周圍刪除括號。您正在嘗試運行$query舉行的查詢,但更新查詢實際上是舉行$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); 
+0

謝謝。我保證看看SQL注入攻擊問題! – user2216783 2013-03-28 08:05:18

+0

我做了您的更改,但仍然無效。我在腳本中打印$ ingress,它顯示了我在表單中做的更改。所以我想這是如何佈置更新是這個問題。你會用一種非常不同的方式來寫嗎? – user2216783 2013-03-28 08:17:42

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」而不是「$查詢」。

mysql_query($mysql_query); 

短短几方指出過:

  • 的mysql_ *函數真不該現在使用。看看mysqliPDO
  • 在將數據插入數據庫之前,您並沒有對輸入進行清理。這是而不是的一個好主意 - 你將自己對SQL注入攻擊敞開大門。您應該轉義字符串並將整數轉換爲整數。如果您遵循第一個建議並使用PDO或mysqli,請查看使用準備好的語句。

希望有幫助!

1

請查找SQL注入並從$ _POST轉義您的值,請:) - 我猜,Javascript重定向可以替換爲帶有「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); 

你有一個變量「$ mysql_query」與更新語句。但是你發送一個變量「$ query」給mysql_query函數。不應該將$ mysql_query變量發送到mysql_query函數嗎?也許更好的變量名稱可能會有所幫助:)

1

我不知道這是否是原因,但是您在兩個文件中使用了不同的引號。

在越來越:

"' . $getid . '"' 

而且在設置

WHERE artikkelID='$id'" 

什麼數據類型是artikkelID?

如果它是一個int,第一個將作爲雙引號不是字符串的報價,但一個「分組」報價可用於有保留字名稱的列

最後將不是單一的工作報價是一個字符串報價,並且不能使用字符串作爲int列。

例如

我可以查詢這樣

WHERE id > "20" 

int列,但不喜歡這個

WHERE id > '20' 

而對於字符串列

WHERE name = "Hello World" 

會嘗試Ť o將名稱列與Hello World列匹配,而不是Hello World字符串