problemen met INSERT

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gert Molemans

Gert Molemans

01/06/2016 09:53:29
Quote Anchor link
Hallo Allemaal

Via een form in mijn PHP website zou ik de gegevens willen wegschrijven in mijn database maar ik krijg telkens een foutmelding.

namelijk

Error: INSERT INTO tb_ticket (school, lokaal, urgentie, datum, leerkracht, toestel, soortprob, beschijving, berichtnaar, onderwerp, it) VALUES (Atheneum Maasland - Campus Dilsen, 209, hoog, Wed Jun 01, Tilly, 5, computer_probleem, jfsldfds, Gert Molemans, test, Gert Molemans)
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Maasland - Campus Dilsen, 209, hoog, Wed Jun 01, Tilly, 5, computer_probleem, j' at line 1
lokaal: 209

soort probleem: computer_probleem

toestel: 5

onderwerp: test

beschrijving: jfsldfds

urgentie: hoog

mijn colde is
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
<html>
<head>


</head>
<body>
    <?php
        $conn
= new mysqli('localhost', 'root', '', 'db_helpdesk')
        or die ('Cannot connect to db');
        $datum = date("D M d");
        
        $sql = "INSERT INTO tb_ticket (school, lokaal, urgentie, datum, leerkracht, toestel, soortprob, beschijving, berichtnaar, onderwerp, it) VALUES (Atheneum Maasland - Campus Dilsen, ".$_POST['ddmlokaal'].", ".$_POST['ddmurgentie'].", ".$datum.", Tilly, ".$_POST['txttoestel'].", ".$_POST['ddmsoort_probleem'].", ".$_POST['txtbeschrijving'].", Gert Molemans, ".$_POST['txtonderwerp'].", Gert Molemans)";
        
        if ($conn->query($sql) === TRUE) {
            echo "New record created successfully";
        }
else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }

        
        $conn->close();
    ?>

    <p>lokaal: <?php echo $_POST["ddmlokaal"]; ?> </p>
    <p>soort probleem: <?php echo $_POST["ddmsoort_probleem"]; ?> </p>
    <p>toestel: <?php echo $_POST["txttoestel"]; ?> </p>
    <p>onderwerp: <?php echo $_POST["txtonderwerp"]; ?> </p>
    <p>beschrijving: <?php echo $_POST["txtbeschrijving"]; ?> </p>
    <p>urgentie: <?php echo $_POST["ddmurgentie"]; ?> </p>
</body>
</html>


Ziet iemand wat ik fout doe?
Alvast bedankt

Groeten Gert
Gewijzigd op 01/06/2016 09:54:09 door Gert Molemans
 
PHP hulp

PHP hulp

27/12/2024 06:04:01
 
- SanThe -

- SanThe -

01/06/2016 09:55:51
Quote Anchor link
De tekst moet tussen (enkele) quotes staan.
 
Gert Molemans

Gert Molemans

01/06/2016 10:02:29
Quote Anchor link
Bedankt voor de snelle reactie.
Nu krijg ik nog een andere fout


Notice: Undefined index: txttoestel in C:\xampp\htdocs\helpdesk\ticketopslaan.php on line 12
Error: INSERT INTO tb_ticket (school, lokaal, urgentie, datum, leerkracht, toestel, soortprob, beschijving, berichtnaar, onderwerp, it) VALUES ('Atheneum Maasland - Campus Dilsen', 209, hoog, Wed Jun 01, 'Tilly', , computer_probleem, jfsldfds, 'Gert Molemans', test, 'Gert Molemans')
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Jun 01, 'Tilly', , computer_probleem, jfsldfds, 'Gert Molemans', test, 'Gert Mo' at line 1
lokaal: 209

soort probleem: computer_probleem

toestel:
Notice: Undefined index: txttoestel in C:\xampp\htdocs\helpdesk\ticketopslaan.php on line 24
onderwerp: test

beschrijving: jfsldfds

urgentie: hoog

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
<html>
<head>


</head>
<body>
    <?php
        $conn
= new mysqli('localhost', 'root', '', 'db_helpdesk')
        or die ('Cannot connect to db');
        $datum = date("D M d");
        
        $sql = "INSERT INTO tb_ticket (school, lokaal, urgentie, datum, leerkracht, toestel, soortprob, beschijving, berichtnaar, onderwerp, it) VALUES ('Atheneum Maasland - Campus Dilsen', ".$_POST['ddmlokaal'].", ".$_POST['ddmurgentie'].", ".$datum.", 'Tilly', ".$_POST['txttoestel'].", ".$_POST['ddmsoort_probleem'].", ".$_POST['txtbeschrijving'].", 'Gert Molemans', ".$_POST['txtonderwerp'].", 'Gert Molemans')";
        
        if ($conn->query($sql) === TRUE) {
            echo "New record created successfully";
        }
else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }

        
        $conn->close();
    ?>

    <p>lokaal: <?php echo $_POST["ddmlokaal"]; ?> </p>
    <p>soort probleem: <?php echo $_POST["ddmsoort_probleem"]; ?> </p>
    <p>toestel: <?php echo $_POST["txttoestel"]; ?> </p>
    <p>onderwerp: <?php echo $_POST["txtonderwerp"]; ?> </p>
    <p>beschrijving: <?php echo $_POST["txtbeschrijving"]; ?> </p>
    <p>urgentie: <?php echo $_POST["ddmurgentie"]; ?> </p>
</body>
</html>


Groeten en bedankt
Gert
 
- SanThe -

- SanThe -

01/06/2016 10:08:16
Quote Anchor link
$_POST['txttoestel'] zal niet bestaan.
Je hebt nog steeds tekst in de query zonder (enkele) quotes.
Data uit een formulier is gevaarkijk.
Altijd userinput beveiligen.
 
Ramon van Dongen

Ramon van Dongen

01/06/2016 10:34:51
Quote Anchor link
Ook je POST variabelen moeten nog tussen quotes staan. Daarnaast moet je ze ook escapen.

dus:
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
<?php
$sql
= "INSERT INTO tb_ticket (school, lokaal, urgentie, datum, leerkracht, toestel, soortprob, beschijving, berichtnaar, onderwerp, it)
VALUES (
    'Atheneum Maasland - Campus Dilsen'
,     '"
.mysqli_real_escape_string($conn, $_POST['ddmlokaal'])."'
,     '"
.mysqli_real_escape_string($conn, $_POST['ddmurgentie'])."'
,     '"
.mysqli_real_escape_string($conn, $datum)."'
,     'Tilly'
,     '"
.mysqli_real_escape_string($conn, $_POST['txttoestel'])."'
,     '"
.mysqli_real_escape_string($conn, $_POST['ddmsoort_probleem'])."'
,     '"
.mysqli_real_escape_string($conn, $_POST['txtbeschrijving'])."'
,     'Gert Molemans'
,     '"
.mysqli_real_escape_string($conn, $_POST['txtonderwerp'])."'
,     'Gert Molemans'
)"
;
 
Thomas van den Heuvel

Thomas van den Heuvel

01/06/2016 12:50:47
Quote Anchor link
Wat @Ramon hierboven doet lijkt mij ook verstandig uit oogpunt van leesbaarheid: schrijf je query over meerdere regels uit.

Deze hoef je trouwens niet eerst in een aparte variabele op te slaan, maar kan rechtstreeks in je query, bijvoorbeeld als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$conn
->query(
    "INSERT INTO table (
        a, b, c, d
    ) VALUES (
        '"
.$conn->real_escape_string($_POST['a'])."',
        '"
.$conn->real_escape_string($_POST['b'])."',
        '"
.$conn->real_escape_string($_POST['c'])."',
        '"
.$conn->real_escape_string($_POST['d'])."'
    )"

);
?>

En als je 3x real_escape_string() hebt uitgetypt heb je hier waarschijnlijk ook genoeg van en schrijf je een klein wrappertje voor MySQLi om hier sneller mee te werken.
Gewijzigd op 01/06/2016 12:52:08 door Thomas van den Heuvel
 
Ramon van Dongen

Ramon van Dongen

01/06/2016 12:53:47
Quote Anchor link
Thomas van den Heuvel op 01/06/2016 12:50:47:
En als je 3x real_escape_string() hebt uitgetypt heb je hier waarschijnlijk ook genoeg van en schrijf je een klein wrappertje voor MySQLi om hier sneller mee te werken.
CTRL+C en CTRL+V?
 
Ward van der Put
Moderator

Ward van der Put

01/06/2016 13:18:07
Quote Anchor link
Ctrl+D met de D van duplicate en dupliceren: maakt in sommige editors een kopie van de huidige regel. :D
 
Ramon van Dongen

Ramon van Dongen

01/06/2016 13:32:14
Quote Anchor link
Ja dat werkt Ward (in Notepad++). Handig!
 
Gert Molemans

Gert Molemans

02/06/2016 17:21:06
Quote Anchor link
Heel fel bedankt allemaal
ik ga het morgen eens uit proberen.

Groeten Gert
 
Gert Molemans

Gert Molemans

06/06/2016 14:31:34
Quote Anchor link
Het is gelukt

Allemaal heel erg bedankt

Groeten Gert
 



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.