2013-03-27 3 views
0

Любой, кто может указать новичку php в правильном направлении? Он не будет обновлять базу данных, и я не могу понять это. Я получаю статью, которую хочу изменить, и поставлю ее в форме, и использую файл update1.php для обновления базы данных.mysql update script

Получение статьи:

<?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_* функции и начать использовать mysqli или PDO и подготовленные заявления со связанными значениями или вы будете сталкиваться SQL injection attacks.

Во-вторых, на данный момент измените значение mysql_query($query) на mysql_query($mysql_query) и удалите скобки вокруг фактического запроса и оператора матрицы при настройке переменной. Вы пытаетесь выполнить запрос проведен в $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); 
+0

Спасибо. Я обещаю посмотреть на проблему с атаками SQL-инъекций! – user2216783

+0

Я сделал ваши изменения, но он все еще не работает. Я печатаю $ ingress в скрипте, и он показывает изменения, которые я делаю в форме. Так что, я думаю, это то, как выложено UPDATE, и это проблема. Не могли бы вы написать его совсем по-другому? – user2216783

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_ * функция не должен действительно быть использована в настоящее время. Взгляните на mysqli или PDO.
  • Вы не дезинфицируете свой вход, прежде чем вставлять его в базу данных. Это не хорошая идея - вы полностью раскрываете атаки SQL-инъекций. Вам следует избегать строк и целых целых чисел в виде целых чисел. Если вы следуете первому предложению и используете PDO или mysqli, изучите использование подготовленных операторов.

Надеюсь, что это поможет!

1

Пожалуйста, найдите SQL-инъекции и избежите ваших значений из $ _POST, пожалуйста :) - И Javascript-redirect можно заменить на серверную 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» с Update-Statement. Но вы отправляете переменную «$ query» в функцию mysql_query. Не следует ли отправить переменную $ mysql_query в функцию mysql_query? Может быть, лучше имена переменных могут быть полезны :)

1

Я не знаю, является ли это причиной, но вы используете разные кавычки в двух файлах.

В получении:

"' . $getid . '"' 

И заходящего

WHERE artikkelID='$id'" 

Что тип данных artikkelID?

Если это ИНТ первый будет работать как двойные кавычки не является строкой цитаты, но «группировка» цитаты, которые могут быть использованы, чтобы иметь столбцы с зарезервированными словами имена

Последняя не будет работать, как единый quote Является строковой цитатой, и вы не можете использовать строку для столбца int.

Например

Я мог бы запросить в Int столбец как этот

WHERE id > "20" 

, но не так, как это

WHERE id > '20' 

В то время как для строки столбца

WHERE name = "Hello World" 

Попробовал бы T o сопоставить столбец имен с столбцом Hello World, а не строку Hello World