[Opgelost] Een bepaald veld word niet gevult zoals het hoort
Ik ben weer eens begonnen met een scriptje, maar nu heb ik een probleem. Nadat ik een reactie heb geplaatst op een topic, word het thread id-veld in de database niet gevuld. Ik zal even stukken script laten zien.
Code (php)
1
mysql_query("INSERT INTO replies VALUES(NULL,'$_POST[thread]','$_POST[message]','$_POST[author]','$time')");
Het stukje hierboven vult de database nadat het bericht is gepost.
SQL tabellen
Het probleem is: de rest word allemaal wel gevuld, maar "thread" niet. Weet iemand wat er mis is?
~Robert
Gewijzigd op 26/10/2010 17:00:14 door Robert van der Leest
Gewijzigd op 25/10/2010 21:11:01 door Aad B
Ik post in topic "Hallo". Dat topic heeft id 1. Dan moet wanneer de reactie word geplaatst, in het "thread" veld van de reactie "1" komen.
Of ik post in topic "Doei". Dat topic heeft id 2. Wanneer ik daar een reactie plaats, moet in het "thread" veld van de reactie "2" komen. Snapt u?
Heb je de query al naar het scherm ge-echoot om te kijken wat er in dan staat? Klopt de inhoud van de variabelen wel?
Verder is je script lek => SQL-Injection.
Wanneer ik dat probeer, krijg ik helemaal niets dat daar mee te maken heeft. Het enigste wat ik krijg (en wat ook ingesteld was), is een link terug naar het topic nadat ik heb gepost. Over die SQL injectie: ik ga het allemaal nog beveiligen. Ik test het momenteel ook lokaal en wanneer ik een redelijk systeem af heb, zal ik het gaan beveiligen met allerlei trucjes. :)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$qry = "INSERT INTO
replies
(
thread,
message,
author,
time
)
VALUES
(
'".mysql_real_escape_string( $_POST['thread'] )."',
'".mysql_real_escape_string( $_POST['message'] )."',
'".mysql_real_escape_string( $_POST['author'] )."',
NOW()";
if( mysql_query( $qry ) )
{
echo 'Uw bericht is succesvol geplaatst.';
}
else
{
echo 'Er is een fout in de query opgetreden.';
}
?>
$qry = "INSERT INTO
replies
(
thread,
message,
author,
time
)
VALUES
(
'".mysql_real_escape_string( $_POST['thread'] )."',
'".mysql_real_escape_string( $_POST['message'] )."',
'".mysql_real_escape_string( $_POST['author'] )."',
NOW()";
if( mysql_query( $qry ) )
{
echo 'Uw bericht is succesvol geplaatst.';
}
else
{
echo 'Er is een fout in de query opgetreden.';
}
?>
Dit is netter, en er zit goede foutafhandeling in. Ook heb ik van je $time gewoon NOW() gemaakt aangezien ik er vanuit ga dat je bij time iets doet als: $time = date('H:i');, dit kan gewoon binnen mysql zelf.
Persoonlijk zou ik van de kolom "posted" ook de naam gewoon veranderen in dateTime, time of date en daar dan de bijbehorende veld typ gebruiken.
Gewijzigd op 26/10/2010 14:55:05 door Milo S
Ik heb dit nu als "newreply" bestand:
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
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
<?php
/*
Interbasic Discussions
newreply.php
############################
Interbasic v1.0.0
Copyright Tah Zonemaster
Interbasic Discussions 2010
*/
[code]<?php
// First include config.php
include ('../config.php');
// Connecting to the database again
mysql_connect("$db_server", "$db_username", "$db_pass");
mysql_select_db("$db_name");
// Get the current time
$time = date('H:i');
$qry = "INSERT INTO
replies
(
thread,
message,
author,
time
)
VALUES
(
'".mysql_real_escape_string( $_POST['thread'] )."',
'".mysql_real_escape_string( $_POST['message'] )."',
'".mysql_real_escape_string( $_POST['author'] )."',
NOW()";
if( mysql_query( $qry ) )
{
echo 'Reply Posted.<br><a href="../msg.php?id=$_POST[thread]">Return</a>';
}
else
{
echo 'Error while sending information to the database.';
}
?>
/*
Interbasic Discussions
newreply.php
############################
Interbasic v1.0.0
Copyright Tah Zonemaster
Interbasic Discussions 2010
*/
[code]<?php
// First include config.php
include ('../config.php');
// Connecting to the database again
mysql_connect("$db_server", "$db_username", "$db_pass");
mysql_select_db("$db_name");
// Get the current time
$time = date('H:i');
$qry = "INSERT INTO
replies
(
thread,
message,
author,
time
)
VALUES
(
'".mysql_real_escape_string( $_POST['thread'] )."',
'".mysql_real_escape_string( $_POST['message'] )."',
'".mysql_real_escape_string( $_POST['author'] )."',
NOW()";
if( mysql_query( $qry ) )
{
echo 'Reply Posted.<br><a href="../msg.php?id=$_POST[thread]">Return</a>';
}
else
{
echo 'Error while sending information to the database.';
}
?>
de exacte fout te achterhalen, trouwens jij was toch met interBasic gestopt?
je sluit values niet af met een )
Code (php)
1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 14
Maar nu is de "grap" ervan: het werkte eerst wel. Dit is regel 14:
Teun Hesseling op 26/10/2010 15:53:14:
je sluit values niet af met een )
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
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
<?php
// First include config.php
include ('../config.php');
// Connecting to the database again
mysql_connect($db_server, $db_username, $db_pass);
mysql_select_db($db_name);
$qry = "INSERT INTO
replies
(
thread,
message,
author,
time
)
VALUES
(
'".mysql_real_escape_string( $_POST['thread'] )."',
'".mysql_real_escape_string( $_POST['message'] )."',
'".mysql_real_escape_string( $_POST['author'] )."',
NOW()
)";
if( mysql_query( $qry ) )
{
echo 'Reply Posted.<br><a href="../msg.php?id=$_POST[thread]">Return</a>';
}
else
{
echo 'Error while sending information to the database.';
}
?>
// First include config.php
include ('../config.php');
// Connecting to the database again
mysql_connect($db_server, $db_username, $db_pass);
mysql_select_db($db_name);
$qry = "INSERT INTO
replies
(
thread,
message,
author,
time
)
VALUES
(
'".mysql_real_escape_string( $_POST['thread'] )."',
'".mysql_real_escape_string( $_POST['message'] )."',
'".mysql_real_escape_string( $_POST['author'] )."',
NOW()
)";
if( mysql_query( $qry ) )
{
echo 'Reply Posted.<br><a href="../msg.php?id=$_POST[thread]">Return</a>';
}
else
{
echo 'Error while sending information to the database.';
}
?>
Persoonlijk zou ik gewoon database connectie maken in je config file maargoed.
Toevoeging op 26/10/2010 16:19:41:
Wanneer ik het script van Milo van Soest gebruik doet hij het wel, maar dan komen de reactie's niet in het desbetreffende topic. Dit is wat ik op het moment heb:
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
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
<?php
/*
Interbasic Discussions
newreply.php
############################
Interbasic v1.0.0
Copyright Tah Zonemaster
Interbasic Discussions 2010
*/
// First include config.php
include ('../config.php');
// Connecting to the database again
mysql_connect($db_server, $db_username, $db_pass);
mysql_select_db($db_name);
$qry = "INSERT INTO
replies
(
thread,
message,
author,
time
)
VALUES
(
'".mysql_real_escape_string( $_POST['thread'] )."',
'".mysql_real_escape_string( $_POST['message'] )."',
'".mysql_real_escape_string( $_POST['author'] )."',
NOW()
)";
if( mysql_query( $qry ) )
{
echo 'Reply Posted.<br><a href="../msg.php?id=$_POST[thread]">Return</a>';
}
else
{
echo 'Error while sending information to the database.';
}
?>
/*
Interbasic Discussions
newreply.php
############################
Interbasic v1.0.0
Copyright Tah Zonemaster
Interbasic Discussions 2010
*/
// First include config.php
include ('../config.php');
// Connecting to the database again
mysql_connect($db_server, $db_username, $db_pass);
mysql_select_db($db_name);
$qry = "INSERT INTO
replies
(
thread,
message,
author,
time
)
VALUES
(
'".mysql_real_escape_string( $_POST['thread'] )."',
'".mysql_real_escape_string( $_POST['message'] )."',
'".mysql_real_escape_string( $_POST['author'] )."',
NOW()
)";
if( mysql_query( $qry ) )
{
echo 'Reply Posted.<br><a href="../msg.php?id=$_POST[thread]">Return</a>';
}
else
{
echo 'Error while sending information to the database.';
}
?>
Gewijzigd op 26/10/2010 16:17:12 door Robert van der Leest
wat bedoel je precies?
Anywayz, het is al opgelost. Thomas de Roo heeft me geholpen en het werkt nu. Toch iedereen heel erg bedankt voor het helpen! :)
Robert Monden op 26/10/2010 16:59:57:
... het is al opgelost ...
Werkt dit dan ook? Denk zelf van niet namelijk.
Dit lijkt mij beter te werken.
Code (php)
1
2
3
2
3
<?php
echo 'Reply Posted.<br><a href="../msg.php?id=' . $_POST['thread'] . '">Return</a>';
?>
echo 'Reply Posted.<br><a href="../msg.php?id=' . $_POST['thread'] . '">Return</a>';
?>
Quote:
ik ga het allemaal nog beveiligen
Is een foute instelling. Ik snap dat je waarschijnlijk nog niet zo ervaren bent, maar beveiliging hoort aan de basis te liggen van elke applicatie. Eigenlijk moet deze zo ontworpen zijn, dat lekken niet voor kunnen komen. Gebruik dus prepared statements en (waar mogelijk) automatische escapes voor HTML. Iedereen maakt fouten en 1 query niet escapen vergeet je zo. Er bestaat echter software waarmee je met 1 klik alle velden op SQL injection controleert en zo ziet de hacker de fout wel.