[Opgelost] Een bepaald veld word niet gevult zoals het hoort

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert van der Leest

Robert van der Leest

25/10/2010 21:07:01
Quote Anchor link
Hoi, allemaal!
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)
PHP script in nieuw venster Selecteer het PHP script
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
id     thread     message     author     posted

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
 
PHP hulp

PHP hulp

23/11/2024 09:26:09
 
Aad B

Aad B

25/10/2010 21:10:10
Quote Anchor link
Je schrijft eerst thread id-veld maar later lijkt het toch weer alleen het thread veld te zijn, wat bedoel je nu ? Als het om het id-veld gaat: staat het op de juiste manier op auto-increment ?
Gewijzigd op 25/10/2010 21:11:01 door Aad B
 
Robert van der Leest

Robert van der Leest

25/10/2010 21:17:35
Quote Anchor link
Het is "thread". :) Het gaat wel om een id, maar het id word bepaald door de plaats waar de reactie is geplaatst. Voorbeeld:
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?
 
Obelix Idefix

Obelix Idefix

25/10/2010 21:26:07
Quote Anchor link
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?
 
Robert van der Leest

Robert van der Leest

25/10/2010 21:48:12
Quote Anchor link
De inhoud van de variablen kloppen wel. Als ik het ga echoën, krijg ik hetzelfde als dat ik heb ingevult. Dit heb ik geprobeerd voor de echo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// Blablabla
echo '"$_POST[thread]"';
// Blabla
?>
 
- SanThe -

- SanThe -

25/10/2010 22:19:56
Quote Anchor link
Wat doen al die quotes daar?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// Blablabla
echo $_POST['thread'];
// Blabla
?>


Verder is je script lek => SQL-Injection.
 
Robert van der Leest

Robert van der Leest

26/10/2010 11:38:32
Quote Anchor link
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. :)
 
Milo S

Milo S

26/10/2010 14:52:44
Quote Anchor link
Maak gewoon een nette query, dit gaat nergens over..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.';    
}

?>


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
 
Robert van der Leest

Robert van der Leest

26/10/2010 15:33:25
Quote Anchor link
Wanneer ik een reactie plaats met het script, krijg ik dit: "Error while sending information to the database."
Ik heb dit nu als "newreply" bestand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.';    
                }

?>
 
Thomas de Roo

Thomas de Roo

26/10/2010 15:37:39
Quote Anchor link
Echo $qry eens en probeer eens met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo mysql_error();
?>

de exacte fout te achterhalen, trouwens jij was toch met interBasic gestopt?
 
Teun Hesseling

Teun Hesseling

26/10/2010 15:53:14
Quote Anchor link
je sluit values niet af met een )
 
Robert van der Leest

Robert van der Leest

26/10/2010 16:10:37
Quote Anchor link
Dit is de MySQL error die ik krijg:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysql_connect("$db_server", "$db_username", "$db_pass");
 
- SanThe -

- SanThe -

26/10/2010 16:15:51
Quote Anchor link
Teun Hesseling op 26/10/2010 15:53:14:
je sluit values niet af met een )
 
Milo S

Milo S

26/10/2010 16:16:32
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.';    
}

?>


Persoonlijk zou ik gewoon database connectie maken in je config file maargoed.
 
Robert van der Leest

Robert van der Leest

26/10/2010 16:16:40
Quote Anchor link
Oh, sorry. Ik dacht dat hij het tegen Thomas de Roo had. Ik zal het nu even proberen te fixen met wat Teun Hesseling zei. Oh, ik lees net de reactie hierboven: bedankt. :) Ik zal het uittesten.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.';    
    }

?>
Gewijzigd op 26/10/2010 16:17:12 door Robert van der Leest
 
Teun Hesseling

Teun Hesseling

26/10/2010 16:36:33
Quote Anchor link
wat bedoel je precies?
 
Robert van der Leest

Robert van der Leest

26/10/2010 16:59:57
Quote Anchor link
De reactie's komen niet op de goede plaats.

Anywayz, het is al opgelost. Thomas de Roo heeft me geholpen en het werkt nu. Toch iedereen heel erg bedankt voor het helpen! :)
 
- SanThe -

- SanThe -

26/10/2010 17:11:38
Quote Anchor link
Robert Monden op 26/10/2010 16:59:57:
... het is al opgelost ...


Werkt dit dan ook? Denk zelf van niet namelijk.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 echo 'Reply Posted.<br><a href="../msg.php?id=$_POST[thread]">Return</a>';
?>


Dit lijkt mij beter te werken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 echo 'Reply Posted.<br><a href="../msg.php?id=' . $_POST['thread'] . '">Return</a>';
?>
 
Pim -

Pim -

26/10/2010 18:36:12
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.