Gegevens van formulier naar MySQL: Lukt niet!

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jasper Verelst

Jasper Verelst

19/08/2014 18:17:05
Quote Anchor link
Hallo

Ik probeer al enige tijd een formulier te maken waarbij de ingeputte gegevens naar een MySQL-database gezonden worden. Ondanks enkele tutorials lukt het me niet want ik krijg blijkbaar geen verbinding met de database.
Hieronder post ik de twee files die beide op de wampserver staan.

Wat doe ik fout?

Misschien moet ik aanpassingen doen in phpMyAdmin? Ik gebruik de gewone comm.server met als referenties localhost, root en zonder paswoord. Ik maakte een database jvdatabase met een tabel met twee kolommen.

Het invulformulier (.php)
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
<head>
<title></title>
</head>
<body>
<h1>A small example page to insert some data in to the MySQL
database using PHP</h1>
<form action="send.php" method="post">
Firstname: <input type=
"text" name="Firstname" value=""><br>
<br>
Lastname: <input type="text" name="Lastname" value=""><br>
<br>
<input type="submit" name="submit"></form>
</body>
</html>


PHP-file voor de aansluiting met de database (.php)
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
<?php

$hostname
="localhost";
$database="jvdatabase";
$username="root";
$password="";

$link = mysql_connect($hostname, $username, $password);
if (!$link) {
die('Connection failed: ' . mysql_error());
}

else{
     echo "Connection to MySQL server " .$hostname . " successful!
"
. PHP_EOL;
}


$db_selected = mysql_select_db($database, $link);
if (!$db_selected) {
    die ('Can\'t select database: ' . mysql_error());
}

else {
    echo 'Database ' . $database . ' successfully selected!';
}



if (isset($_POST['submit']))(

$sql="INSERT INTO formulier1 (FirstName, LastName)
VALUES ('$_POST'[Firstname]','$_POST'[Lastname]')"
;

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}

echo "1 record added";

mysql_close($link);

?>



Hopelijk kan iemand me helpen.
Bedankt en groetjes!
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 19/08/2014 19:29:42 door - Ariën -
 
PHP hulp

PHP hulp

23/04/2024 11:28:01
 
Erwin H

Erwin H

19/08/2014 18:23:31
Quote Anchor link
Wat is de foutmelding die je krijgt?
 
Jasper Verelst

Jasper Verelst

19/08/2014 18:34:26
Quote Anchor link
Wel ik krijg niet echt een foutmelding, het probleem is dat de gegevens die ik invoer niet aankomen in de tabel die ik aanmaakte in phpMy Admin. Ze verdwijnen wel wanneer ik op submit druk.
 
Erwin H

Erwin H

19/08/2014 19:01:00
Quote Anchor link
Volgens mij moet je wel een foutmelding krijgen, want je query is fout:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$sql
="INSERT INTO formulier1 (FirstName, LastName)
VALUES ('$_POST'[Firstname]','$_POST'[Lastname]')"
;
?>

Zie je die enkele quotes tussen $_POST en de blokhaak openen (beide keren)? Die quotes horen daar niet.
 
- Ariën  -
Beheerder

- Ariën -

19/08/2014 19:31:52
Quote Anchor link
Verder ben je gevoelig voor SQL-injection, en kan je makkelijk gehacked worden.
Bescherm je $_POST-variabelen (en normaal ook $_GET en $_COOKIE) met mysql_real_escape_string().

Wat ik ook kan aanraden is om de MySQLi-functies te gebruiken. De MySQL-functies zullen over enkele jaren verladen tijd zijn, waarbij MySQLi het stokje overneemt.
 
Jasper Verelst

Jasper Verelst

19/08/2014 19:46:51
Quote Anchor link
Alvast bedankt voor de tips.

Jammer genoeg blijven de data die ik input op het invulformulier nu op de pagina staan, ze verhuizen nog steeds niet naar de database.

Enig idee wat hiervan de oorzaak kan zijn, en/of hoe ik dit kan oplossen?
 
- Ariën  -
Beheerder

- Ariën -

19/08/2014 19:58:20
Quote Anchor link
Kijk eens naar deze tutorial over goede foutafhandeling, en hoe je queries op moet bouwen:

http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/voorbeeld-1-het-ophalen-van-gegevens/1931/
 
Erwin H

Erwin H

19/08/2014 20:06:12
Quote Anchor link
Jasper Verelst op 19/08/2014 19:46:51:
Enig idee wat hiervan de oorzaak kan zijn, en/of hoe ik dit kan oplossen?

Zolang je niet aangeeft wat je veranderd hebt (en nog beter, de nieuwe code plaatst), nee, geen idee.
Gewijzigd op 19/08/2014 20:06:29 door Erwin H
 
Obelix Idefix

Obelix Idefix

19/08/2014 22:08:43
Quote Anchor link
In je openingspost lees ik dat je problemen hebt met de databaseverbinding maken.
Ben daarom benieuwd wat de controle op regel 9 voor een melding oplevert.
De controle op regel 18 moet je ook een melding opleveren. Welke?
En zoals Erwin H aangeeft, daarna moet je een (fout)melding krijgen op die query.
 
Jasper Verelst

Jasper Verelst

20/08/2014 11:35:33
Quote Anchor link
Vergeef me mijn waarschjnlijk idiote vraag, maar de reden dat ik de data die ik ingeef in het invulformulier niet te zien krijg in mijn aangemaakte tabel in phpMyAdmin wanneer ik op submit heb gedrukt, kan de reden zijn dat ik nog geen website en domeinnaam heb en ik dit dus probeer vanuit enkele losse pagina's die ik op de wamp-server oploadde? Ik meen dit ergens gelezen te hebben, dat er een host voor nodig is?

Greets
 
- Ariën  -
Beheerder

- Ariën -

20/08/2014 11:47:33
Quote Anchor link
Als je WAMPP of een andere lokale webserver hebt zou het al moeten werken. Dat je een domein of externe webhosting nodig hebt staat los van je redenatie.
 
Ivo P

Ivo P

20/08/2014 12:45:50
Quote Anchor link
je geeft nu vooral aan wat er niet gebeurt, maar nauwelijks wat er wel gebeurt.

Je hebt een form voor je staan.

laten we zeggen dat je in de url ziet staan
http://localhost/formulier.php

vraag 1: lijkt je url daar op, of is het iets als c:\data\website\formulier.php

dan vul je iets in, en klik je op de knop.

Wat staat er nu in de urlbalk van de browser?
Wat staat er nu op het scherm?
 
Jasper Verelst

Jasper Verelst

20/08/2014 13:06:40
Quote Anchor link
Ah zo ok dat is dus het probleem niet.

Ik heb de tutorial geraadpleegd en bovenaan een stuk code toegevoegd.
Nu krijg ik volgende foutmelding (eronder zet ik nogmaals mijn volledige code).

Error: ' . $error . '
' . $sql . ''; } else { return $text; } } $username = "root"; $password = ""; $hostname = "localhost"; //connection to the database $dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL"); echo "Connected to MySQL
"; //select a database to work with $selected = mysql_select_db("jvdatabase",$dbhandle) or die("Could not select examples"); $sql="INSERT INTO probeersel (FirstName, LastName, Age) VALUES ($_POST['firstname'], $_POST['lastname'], $_POST['age'])"; // escape variables for security $firstname = mysqli_real_escape_string($con, $_POST['firstname']); $lastname = mysqli_real_escape_string($con, $_POST['lastname']); $age = mysqli_real_escape_string($con, $_POST['age']); if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } echo "1 record added"; mysql_close($dbhandle); ?>

send.php-file

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
45
46
47
48
49
<?php

    ini_set('display_errors',0); // 1 == aan , 0 == uit
    error_reporting(E_ALL | E_STRICT);


    define('DEBUG_MODE',false);  // true == aan, false == uit

 
    function showSQLError($sql,$error,$text='Error')
    {

        if (DEBUG_MODE)
        {

            return  '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
        }

        else
        {
            return $text;
        }
    }
  

$username = "root";
$password = "";
$hostname = "localhost";

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
 or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";

//select a database to work with
$selected = mysql_select_db("jvdatabase",$dbhandle)
  or die("Could not select examples");

$sql="INSERT INTO probeersel (FirstName, LastName, Age)
VALUES ($_POST['firstname'], $_POST['lastname'], $_POST['age'])"
;

// escape variables for security
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$age = mysqli_real_escape_string($con, $_POST['age']);

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}

echo "1 record added";

mysql_close($dbhandle);
?>


form.php-file

<html>
<body>

<form action="send.php" method="post">
Firstname: <input type="text" name="firstname">
Lastname: <input type="text" name="lastname">
Age: <input type="text" name="age">
<input type="submit" name="submit">
</form>

</body>
</html>

Mvg
 
Ivo P

Ivo P

20/08/2014 13:12:28
Quote Anchor link
waar is nu de foutmelding?

Verder:
je bouwt een query op op regel 35/36
daarna escape je een paar vars die vervolgens natuurlijk nooit meer in de query-string terecht komen.

Daarna voer je de query uit.
Escapen en uitvoeren doe je via mysqli

De verbinding met de database is gebouwd met mysql. (zonder i)

dus waar komt $con vandaan.

Ook heel handig trouwens om bovenaan je error reporting uit te zetten.....

Toevoeging op 20/08/2014 13:15:31:

heb je nog een antwoord op mijn vraag over "localhost"?

Ik heb het idee dat je php helemaal niet uitgevoerd wordt.
 
- SanThe -

- SanThe -

20/08/2014 13:20:09
Quote Anchor link
Wat is dit?

Error: ' . $error . '
' . $sql . ''; } else { return $text; } } $username = "root"; $password = ""; $hostname = "localhost"; //connection to the database $dbhandle..............

Dat komt uit de function en is pure php. De function wordt niet eens aangeroepen. Staat php wel aktief?



Or die() is geen foutafhandeling maar een sterfgeval.

Je gebruikt in het begin mysql_ functies en opeens stap je over op mysqli_ dat gaat natuurlijk niet.

Regel 39 t/m 41 slaan nergens op. Je probeert iets te beveiligen terwijl het in de vorige regel al in een variabele is gezet die zo de database in gaat. Daarbij zet je het beveiligde in nieuwe variabelen die je nooit meer gebruikt.
 
Jasper Verelst

Jasper Verelst

20/08/2014 13:23:58
Quote Anchor link
Ivo

Er staat het volgende:

file:///C:/wamp/www/form.php

Wanneer ik klik komt het volgende in de URL-balk:

file:///C:/wamp/www/send.php
 
- SanThe -

- SanThe -

20/08/2014 13:25:32
Quote Anchor link
Type in je browser eens gewoon alleen localhost.
 
Ivo P

Ivo P

20/08/2014 13:33:21
Quote Anchor link
Jasper Verelst op 20/08/2014 13:23:58:
Ivo

Er staat het volgende:
file:///C:/wamp/www/form.php


dan hoef je dus niet verder te zoeken.
Die vraag stel ik natuurlijk niet voor niets.

Je roept nu in je browser gewoon een stuk tekst aan vanaf je harde schijf.

PHP vereist dat het uitgevoerd wordt. Dat regelt een webserver (apache) voor je.

via het hyper text transfer protocol (http) spreek je die webserver aan.

http://servernaam/
en als de server op de pc zelf staat, voldoet "localhost" vaak als servername
 
Jasper Verelst

Jasper Verelst

20/08/2014 14:30:16
Quote Anchor link
Ok geweldig, ik zie het idd, er komen nu ook errors tevoorschijn. Dan probeer ik het script verder juist te krijgen. Zoals jullie al gemerkt hebben ben ik volop in de leerfase.

Mag ik jullie alvast bedanken voor jullie hulp en razendsnelle feedback.
Van harte! 'En mss tot snel ;)

Mvg
 



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.