SQL tabel update niet!?
en je database structuur is volgens mij niet goed, je slaagt dubbele gegevens op. Er zitten nog wel enkele fouten in je script.
Is de foutherkenning nu wel goed? Maar ik vind de fouten vreemd. Ik heb problemen met 1 query, en krijg fouten over andere bestanden. Beetje vergezocht voor 1 query of niet?
Toevoeging op 19/06/2011 17:51:50:
lees mijn commentaar in het script
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
67
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
67
<?php
require("include/config.inc.php");
require("login.check.inc.php");
require("include/emoticons.php");
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
# van waar komt RealEscape?
$_POST = RealEscape($_POST);
$_GET = RealEscape($_GET);
$_SERVER = RealEscape($_SERVER);
# geen onnodige vars aanmaken
$id = $_GET['townid'];
# dit is niet correct
if (isset($_POST['comment']) && $_POST['text'] != "")
{
# var buiten quotes, schep hier orde!
$query = "INSERT INTO $tab_townposts (itemid,userid,datestamp,text) VALUES
('".$_POST['itemid']."','".$_POST['userid']."',
NOW(),'".$_POST['text']."')";
# waar is die foutafhandeling?
mysql_query($query);
# zorg ervoor dat je query's duidelijk zijn! (waar haal je $tab_town?!)
$sql_update = "UPDATE ".$tab_town." SET datepost=NOW() WHERE id = '".$id."'";
# Check of query is gelukt
if (($result = mysql_query($sql_update)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($query,mysql_error(),'Fout met database.');
}
else
{
echo 'Bijgewerkt: ' . mysql_affected_rows() . ' rows';
}
}
# de header dient waarvoor?
header("location: ".$_SERVER['PHP_SELF']."?townid=".$_POST['itemid']);
}
?>
require("include/config.inc.php");
require("login.check.inc.php");
require("include/emoticons.php");
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
# van waar komt RealEscape?
$_POST = RealEscape($_POST);
$_GET = RealEscape($_GET);
$_SERVER = RealEscape($_SERVER);
# geen onnodige vars aanmaken
$id = $_GET['townid'];
# dit is niet correct
if (isset($_POST['comment']) && $_POST['text'] != "")
{
# var buiten quotes, schep hier orde!
$query = "INSERT INTO $tab_townposts (itemid,userid,datestamp,text) VALUES
('".$_POST['itemid']."','".$_POST['userid']."',
NOW(),'".$_POST['text']."')";
# waar is die foutafhandeling?
mysql_query($query);
# zorg ervoor dat je query's duidelijk zijn! (waar haal je $tab_town?!)
$sql_update = "UPDATE ".$tab_town." SET datepost=NOW() WHERE id = '".$id."'";
# Check of query is gelukt
if (($result = mysql_query($sql_update)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($query,mysql_error(),'Fout met database.');
}
else
{
echo 'Bijgewerkt: ' . mysql_affected_rows() . ' rows';
}
}
# de header dient waarvoor?
header("location: ".$_SERVER['PHP_SELF']."?townid=".$_POST['itemid']);
}
?>
opmerking: ik heb expres niet alle fouten verbetert.
# van waar komt RealEscape?
Deze functie staat in config.inc.php die bovenaan wordt opgeroepen.
# geen onnodige vars aanmaken
Wat bedoel je hiermee? De pagina haalt hier de ID uit de url omdat die gekozen is op de vorige pagina.
# dit is niet correct
en
# var buiten quotes, schep hier orde!
en
# zorg ervoor dat je query's duidelijk zijn! (waar haal je $tab_town?!)
Dit was al zo, ik heb dit zelf niet gemaakt. Volgens mij overal op de site op deze manier. En omdat ik 1 query toevoeg werkt het niet meer? tab_town wordt uit config gehaald.
# de header dient waarvoor?
De header zorgt er denk ik voor dat als iemand een reactie plaatst hij weer op dezelfde pagina komt met daarbij zijn reactie. De code die je ziet is niet de totaal in de php file. Die is veel langer.
Ik zie zo nog steeds niet wat mijn query fout doet of wat er bij moet.
Toevoeging op 19/06/2011 19:07:10:
De site zal vast niet overal heel netjes zijn. Wat ik wil is dat er gewoon een waarde in een tabel ingevuld wordt als er een reactie wordt geplaatst. Als er een reactie wordt geplaatst wordt deze query uitgevoerd:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if (isset($_POST['comment']) && $_POST['text'] != "")
{$query = "INSERT INTO $tab_townposts (itemid,userid,datestamp,text) VALUES
('".$_POST['itemid']."','".$_POST['userid']."',
NOW(),'".$_POST['text']."')";
mysql_query($query);
?>
if (isset($_POST['comment']) && $_POST['text'] != "")
{$query = "INSERT INTO $tab_townposts (itemid,userid,datestamp,text) VALUES
('".$_POST['itemid']."','".$_POST['userid']."',
NOW(),'".$_POST['text']."')";
mysql_query($query);
?>
Werkte altijd prima. Maar wat ik nu wil is dat er ook een waarde in een andere tabel wordt geplaatst. Dit is de tabel town die wordt genoemd als $tab_town. De datum van het moment van plaatsen moet daarbij geplaatst worden. Deze tabel is van de nieuwsberichten waar zo'n reactie op geplaatst wordt.
De nieuwsberichten hebben een tabel town.
De reacties hebben een tabel town_posts.
Code (php)
1
2
3
4
2
3
4
<?php
$query = "UPDATE ".$tab_town." SET datepost=NOW() WHERE id = '".$id."'";
mysql_query($query);
?>
$query = "UPDATE ".$tab_town." SET datepost=NOW() WHERE id = '".$id."'";
mysql_query($query);
?>
Wat gaat hier dan fout? Ik vraag om een update uit tabel town waarbij de datum wordt geplaatst in datepost. Dan bij het id die actief is op de pagina (het nieuwsbericht).
Toevoeging op 20/06/2011 00:01:28:
Hij doet het! Dan maar zelf opgelost. Ik kwam erachter dat hij het wel deed als ik 9 invulde (id = 9). Daardoor wist ik dat daar de fout zat. Na wat proberen is het dit geworden:
Code (php)
1
2
3
4
2
3
4
<?php
$query = "UPDATE ".$tab_town." SET datepost=NOW() WHERE id = '".$_POST['itemid']."'";
mysql_query($query);
?>
$query = "UPDATE ".$tab_town." SET datepost=NOW() WHERE id = '".$_POST['itemid']."'";
mysql_query($query);
?>
Geen idee waarom het dan POST moet zijn. Voor de rest had ik nog wat errors. Die zijn verdwenen toen ik de afhandeling scripts allemaal heb weggehaald. Het zal vast wat problemen onderscheppen, maar het zorgde bij mij alleen voor meer problemen.