Gegevens van formulier naar MySQL: Lukt niet!
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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>
<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)
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
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);
?>
$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!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 19/08/2014 19:29:42 door - Ariën -
Wat is de foutmelding die je krijgt?
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.
Code (php)
1
2
3
4
2
3
4
<?php
$sql="INSERT INTO formulier1 (FirstName, LastName)
VALUES ('$_POST'[Firstname]','$_POST'[Lastname]')";
?>
$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.
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.
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?
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
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.
Greets
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.
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?
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)
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
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);
?>
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
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.
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.
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
Type in je browser eens gewoon alleen localhost.
Jasper Verelst op 20/08/2014 13:23:58:
Ivo
Er staat het volgende:
file:///C:/wamp/www/form.php
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
Mag ik jullie alvast bedanken voor jullie hulp en razendsnelle feedback.
Van harte! 'En mss tot snel ;)
Mvg