Geen output van SQL-database bij bepaalde tabel in database
Op dit moment ben ik bezig met een script wat nieuwsartikelen moet verwerken in een databse,
echter loop ik tegen het probleem aan dat op de edit-pagina het script geen output geeft. Als ik in de SQL-query een andere tabelnaam invoer, komt er echter wel volledige output.
De tabelnaam is `artikelen` en bevat de volgende rijen:
- id
- catid
- state
- created
- created_by
- modified
- modified_by
- title
- articletext
- image
- media
Het script om de artikelen te bewerken is als volgt:
<div class="pagetitle">
Nieuws / Artikel bewerken
</div>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$id=$_GET["id"];
function safe($input) {return mysql_real_escape_string($input); }
function output($str) {return htmlspecialchars($str); }
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$title = safe($_POST['title']);
$articletext = safe($_POST['articletext']);
$state = safe($_POST['state']);
$catid = safe($_POST['catid']);
$created = safe($_POST['created']);
$image = safe($_POST['image']);
$media = safe($_POST['media']);
if((trim($title) == '') || (trim($articletext) == '') || (trim($state) == '') || (trim($catid) == '') || (trim($created) == ''))
{
echo "Er zijn één of meerdere verplichte velden leeg.";
}
else
{
$sql = "UPDATE `artikelen` SET title='".$title."', articletext='".$articletext."', state=".$state.", catid=".$catid.", created='".$created."', created_by='".$created_by."', image='".$image."', media='".$media."' WHERE id=".$id."";
$result = mysql_query($sql);
echo "Artikel succesvol toegevoegd!";
}
}
else
{
$id=$_GET["id"];
$sql="SELECT `title`, `articletext`, `state`, `catid`, `modified`, `modified_by`, `created`, `created_by`, `image`, `media` FROM `artikelen` WHERE `id`=".$id."";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
// hier edit-formulier
[code]<?php
}
}
?>
$id=$_GET["id"];
function safe($input) {return mysql_real_escape_string($input); }
function output($str) {return htmlspecialchars($str); }
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$title = safe($_POST['title']);
$articletext = safe($_POST['articletext']);
$state = safe($_POST['state']);
$catid = safe($_POST['catid']);
$created = safe($_POST['created']);
$image = safe($_POST['image']);
$media = safe($_POST['media']);
if((trim($title) == '') || (trim($articletext) == '') || (trim($state) == '') || (trim($catid) == '') || (trim($created) == ''))
{
echo "Er zijn één of meerdere verplichte velden leeg.";
}
else
{
$sql = "UPDATE `artikelen` SET title='".$title."', articletext='".$articletext."', state=".$state.", catid=".$catid.", created='".$created."', created_by='".$created_by."', image='".$image."', media='".$media."' WHERE id=".$id."";
$result = mysql_query($sql);
echo "Artikel succesvol toegevoegd!";
}
}
else
{
$id=$_GET["id"];
$sql="SELECT `title`, `articletext`, `state`, `catid`, `modified`, `modified_by`, `created`, `created_by`, `image`, `media` FROM `artikelen` WHERE `id`=".$id."";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
// hier edit-formulier
[code]<?php
}
}
?>
Gewijzigd op 03/04/2013 18:37:32 door Axel Neve
Je code heb ik even iets 'netter' gemaakt:
echter zie ik geen oorzaak waarom je result leeg blijft.
Kun je eens een echo op $sql doen?
Zo kun je even controlerne of er daad werkelijk een ID word meegestuurd.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
$id = $_GET["id"];
function safe($input){
return mysql_real_escape_string($input);
}
function output($str){
return htmlspecialchars($str);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$title = safe($_POST['title']);
$articletext = safe($_POST['articletext']);
$state = safe($_POST['state']);
$catid = safe($_POST['catid']);
$created = safe($_POST['created']);
$image = safe($_POST['image']);
$media = safe($_POST['media']);
if ((trim($title) == '') || (trim($articletext) == '') || (trim($state) == '') || (trim($catid) == '') || (trim($created) == '')) {
echo "Er zijn één of meerdere verplichte velden leeg.";
} else {
$sql = "
UPDATE artikelen
SET title='" . $title . "',
articletext='" . $articletext . "',
state=" . $state . ",
catid=" . $catid . ",
created='" . $created . "',
created_by='" . $created_by . "',
image='" . $image . "',
media='" . $media . "'
WHERE id=" . $id . "
";
mysql_query($sql);
echo "Artikel succesvol toegevoegd!";
}
} else {
$id = $_GET["id"];
$sql = "
SELECT
title,
articletext,
state,
catid,
modified,
modified_by,
created,
created_by,
image,
media
FROM artikelen
WHERE id=" . $id . "
";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
}
}
?>
$id = $_GET["id"];
function safe($input){
return mysql_real_escape_string($input);
}
function output($str){
return htmlspecialchars($str);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$title = safe($_POST['title']);
$articletext = safe($_POST['articletext']);
$state = safe($_POST['state']);
$catid = safe($_POST['catid']);
$created = safe($_POST['created']);
$image = safe($_POST['image']);
$media = safe($_POST['media']);
if ((trim($title) == '') || (trim($articletext) == '') || (trim($state) == '') || (trim($catid) == '') || (trim($created) == '')) {
echo "Er zijn één of meerdere verplichte velden leeg.";
} else {
$sql = "
UPDATE artikelen
SET title='" . $title . "',
articletext='" . $articletext . "',
state=" . $state . ",
catid=" . $catid . ",
created='" . $created . "',
created_by='" . $created_by . "',
image='" . $image . "',
media='" . $media . "'
WHERE id=" . $id . "
";
mysql_query($sql);
echo "Artikel succesvol toegevoegd!";
}
} else {
$id = $_GET["id"];
$sql = "
SELECT
title,
articletext,
state,
catid,
modified,
modified_by,
created,
created_by,
image,
media
FROM artikelen
WHERE id=" . $id . "
";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
}
}
?>
Toevoeging op 03/04/2013 18:52:20:
Overigns zit ik te kijken, je geeft de melding 'Artikel succesvol toegevoegd' na een wijzig query.
Heb je uberhaupt wel records in je tabel staan?
Nu ga je er gewoon zelf vanuit dat alles goed zal gaan, maar dat zal niet tijd zo zijn. Met het onderdrukken van foutmeldingen wordt het debuggen/onderzoeken al helemaal lastiger.
Lees daarom ook eens:
http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/
Ja, er staan records in de tabel, het toevoegen in de database loopt ook als een zonnetje.
een echo van $sql levert het volgende op:
Code (php)
1
<?php SELECT title, articletext, state, catid, modified, modified_by, created, created_by, image, media FROM artikelen WHERE id=9 ?>
bij een test id van 9
een echo van $result levert op:
eens door dit bij je select query:
en misschien evne kijken of de database iets teruggeeft met deze regel onder de $result = regel:
Waarom de UPDATE wel beveiligen en de SELECT niet. Die is namelijk lek->SQL-injection.
Ik snap dat iedereen zijn kritiek goed bedoelt, maar op dit moment is de TS daar denk ik niet mee geholpen?
Waarschijnlijk is de TS zich er wel van bewust dat dit niet 'veilig' is en dat dingen 'beter' kunnen en heeft hij het nog niet doorgevoerd omdat hij binnen een 'ontwikkeling' zit waarbij dit pas wanneer iets werkt word doorgevoerd?
Of ben ik nu heel cru? ;)
@SanThe Ik zal de SELECT ook gaan beveiligen, eventjes niet aan gedacht
bij het toevoegen van de error-reporting op de pagina zelf blijft ook een foutmelding uit.
Kan ik misschien ergens meekijken op een FTP of iets dergelijks?
Ik kan mij namelijk niet voorstellen dat dit een ingewikkeld probleem is haha!
@Robert, dat kan. Ik zal je de gegevens sturen.
Is de GET wel gevuld?
@ SanThe, Ja, de query ontvangt ook de waarde van de GET (id).
Axel, zie je PM, ik heb het probleem voor je opgelost!:)
@Robert, ik zag het. Super bedankt! :)
En wat was de oorzaak? Wel zo handig om erbij te vermelden.
- Aar - op 03/04/2013 19:38:37:
En wat was de oorzaak? Wel zo handig om erbij te vermelden.
Oorzaak zat hem in een ander bestand.
Kort samengevat: er werden id's gebruikt van een andere tabel die doormiddel van een join en het niet benamen van velden door elkaar heen gingen.