INSERT INTO
Ik wil de uitkomst van een formulier die gebruikt maakt van POST in de database zetten, alleen blijf ik maar dezelfde error krijgen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$datetime=date("y-m-d h:i:s"); //date time
$sql="INSERT INTO $tbl_name(name, email, comment, datetime)VALUES($name = $_POST['name'], $email = $_POST['email'],
$comment = $_POST['comment'], $datetime)";
$result=mysql_query($sql);
//check if query successful
if($result){
echo "Successful";
echo "<BR>";
// link to view guestbook page
echo "<a href='viewguestbook.php'>View guestbook</a>";
}
else {
echo "ERROR";
}
$sql="INSERT INTO $tbl_name(name, email, comment, datetime)VALUES($name = $_POST['name'], $email = $_POST['email'],
$comment = $_POST['comment'], $datetime)";
$result=mysql_query($sql);
//check if query successful
if($result){
echo "Successful";
echo "<BR>";
// link to view guestbook page
echo "<a href='viewguestbook.php'>View guestbook</a>";
}
else {
echo "ERROR";
}
Foutmelding: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING.
Iemand enig idee hoe ik dit kan oplossen. Volgens een aantal websites zou dit de goede code moeten zijn.
tags om je code heen.
Wat bedoel je met lijn 3 en 5?
Die code raakt kant noch wal.
Zet eens Wat bedoel je met lijn 3 en 5?
Die code raakt kant noch wal.
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
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
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
<html>
<head>
<title>Add guest book</title></head>
<body>
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name=""; // Table name
// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect server ");
mysql_select_db("$db_name")or die("cannot select DB");
$datetime=date("y-m-d h:i:s"); //date time
$sql="INSERT INTO $tbl_name(name, email, comment, datetime)VALUES($name = $_POST['name'], $email = $_POST['email'],
$comment = $_POST['comment'], $datetime)";
$result=mysql_query($sql);
//check if query successful
if($result){
echo "Successful";
echo "<BR>";
// link to view guestbook page
echo "<a href='viewguestbook.php'>View guestbook</a>";
}
else {
echo "ERROR";
}
mysql_close();
?>
</body>
</html>
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
<html>
<head>
<title>Add guest book</title></head>
<body>
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name=""; // Table name
// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect server ");
mysql_select_db("$db_name")or die("cannot select DB");
$datetime=date("y-m-d h:i:s"); //date time
$sql="INSERT INTO $tbl_name(name, email, comment, datetime)VALUES($name = $_POST['name'], $email = $_POST['email'],
$comment = $_POST['comment'], $datetime)";
$result=mysql_query($sql);
//check if query successful
if($result){
echo "Successful";
echo "<BR>";
// link to view guestbook page
echo "<a href='viewguestbook.php'>View guestbook</a>";
}
else {
echo "ERROR";
}
mysql_close();
?>
</body>
</html>
Ik wil dus graag de ingevulde velden: name, email en comment in de db tabel zetten: guestbook.
Gewijzigd op 16/09/2013 18:04:06 door Jan Graneker
- haal de variabelen uit een formulier altijd door mysql_real_escape_string() anders is je formulier niet veilig voor sql-injectie.
- gebruik zoveel mogelijk single quotes (') met een echo, overigens een query zet ik altijd wel tussen double quotes omdat er in de query geheid weer single quotes staan.
- om de huidige datum en tijd op te slaan in je tabel heb je geen PHP date functies nodig. Je kunt gewoon de mysql functie NOW() gebruiken.
- als je een error gooit, geef dan ook mee wat er fout gaat
- mysql_* functies zijn deprecated ofwel verouderd. Je doet er goed aan om met mysqli_* functies te gaan werken.
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
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$comment = mysql_real_escape_string($_POST['comment']);
$sql="INSERT INTO " . $tbl_name . " (name, email, comment, datetime) " .
"VALUES('" . $name . "','" . $name . "','" . $comment . "',NOW())";
$result = mysql_query($sql);
//check if query successful
if($result)
{
echo 'Successfull<br>';
// link to view guestbook page
echo '<a href="viewguestbook.php">View guestbook</a>';
}
else
{
echo 'ERROR: ' . mysql_error();
}
?>
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$comment = mysql_real_escape_string($_POST['comment']);
$sql="INSERT INTO " . $tbl_name . " (name, email, comment, datetime) " .
"VALUES('" . $name . "','" . $name . "','" . $comment . "',NOW())";
$result = mysql_query($sql);
//check if query successful
if($result)
{
echo 'Successfull<br>';
// link to view guestbook page
echo '<a href="viewguestbook.php">View guestbook</a>';
}
else
{
echo 'ERROR: ' . mysql_error();
}
?>
Gewijzigd op 16/09/2013 18:20:47 door Frank Nietbelangrijk
Sorry, INSERT wel.
Gewijzigd op 16/09/2013 18:15:54 door - SanThe -
hehehe ik was net al een tekst aan t kopiëren om onder je neus te schuiven San ;-)
Ik zie heel veel mensen dat ook steeds gebruiken bij SELECT en dat geeft nooit een true return.
Volg idd tutz om bestanden in en uit de db te halen. Op dit punt zit ik vast atm.
De basis-rule om het erin te krijgen heb ik nodig, zodat ik deze kan uitbreiden en naar nog mooie, betere alternatieven kan kijken.
Hoe krijg ik de waarde in de db.
@Frank, bedankt voor je uitleg met daarbij een stukej code. mysql_real_escape_string() ga ik er direct in verwerken!
Gewijzigd op 16/09/2013 18:19:57 door Jan Graneker
Als je Franks code volgt, dan weet je hoe je correct de waarde in de database plaatst.
Werkt prima, de datum heb ik met DESC in goede volgorde gezet, alleenb moet de input nog gecheckt worden. Als ik dat doe nadat de input een Var is geworden dan is het te laat, zoals hier:
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$comment = mysql_real_escape_string($_POST['comment']);
if (empty($name)){
print "Graag uw naam invullen";
}
if(isset($_POST['submit'])) {
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['comment'])) {
print "Je moet wel wat invullen";
}
}
Alleen krijg ik weer een error nadat er is verstuurd.
Ik wil ook graag ook ucfirst en strtolower erbij checken.
Gewijzigd op 17/09/2013 13:28:11 door Jan Graneker
Levi Nijveldt op 17/09/2013 12:51:55:
Bedankt allemaal.
Werkt prima, de datum heb ik met DESC in goede volgorde gezet, alleenb moet de input nog gecheckt worden. Als ik dat doe nadat de input een Var is geworden dan is het te laat, zoals hier:
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$comment = mysql_real_escape_string($_POST['comment']);
if (empty($name)){
print "Graag uw naam invullen";
}
if(isset($_POST['submit'])) {
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['comment'])) {
print "Je moet wel wat invullen";
}
}
Alleen krijg ik weer een error nadat er is verstuurd.
Ik wil ook graag ook ucfirst en strtolower erbij checken.
Werkt prima, de datum heb ik met DESC in goede volgorde gezet, alleenb moet de input nog gecheckt worden. Als ik dat doe nadat de input een Var is geworden dan is het te laat, zoals hier:
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$comment = mysql_real_escape_string($_POST['comment']);
if (empty($name)){
print "Graag uw naam invullen";
}
if(isset($_POST['submit'])) {
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['comment'])) {
print "Je moet wel wat invullen";
}
}
Alleen krijg ik weer een error nadat er is verstuurd.
Ik wil ook graag ook ucfirst en strtolower erbij checken.
En wat is die error?
"Je moet wel wat invullen", dus de velden waren leeg, alleen verstuurd mijn script het wel naar de DB.
Hij mag de gegevens niet in de db zetten als de velden leeg zijn.
1) testen of er input is
2) testen of de input correct is
3) input veilig maken
4) dan de input invoeren
Wat je nu doet is eerst 3, dan 1, dan 2 en dan 4. Dat is dus niet de juiste volgorde. Mocht er helemaal geen input zijn, dan krijg je bij het escapen al een foutmelding om de oren.
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
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
<?php
$error = array();
// Formulier variabelen initialiseren en een default waarde geven.
$name = '';
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// variabelen kopiëren zodat de inhoud na een mislukte validatie weer in het formulier getoond wordt
$name = $_POST['name'];
// Valideren
if(strlen($_POST['name']) < 3)
$error['name'] = 'Vul aub uw naam in';
// als er geen fouten gegenereerd zijn
if(count($error) == 0)
{
// escapen
$name = mysql_real_escape_string($_POST['name']);
// opslaan in de database
$sql="INSERT INTO " . $tbl_name . " (name) " . "VALUES('" . $name . "')";
mysql_query($sql);
// redirecten naar een bedank pagina
header('Location: bedankt.php');
exit;
}
}
?>
<form action="" method="post">
<?php if(isset($error['name'])) echo '<p class="warning">' . $error['name'] . '</p>'; ?>
<input type="text" name="name" value="<?php echo $name; ?>" />
<input type="submit" />
</form>
$error = array();
// Formulier variabelen initialiseren en een default waarde geven.
$name = '';
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// variabelen kopiëren zodat de inhoud na een mislukte validatie weer in het formulier getoond wordt
$name = $_POST['name'];
// Valideren
if(strlen($_POST['name']) < 3)
$error['name'] = 'Vul aub uw naam in';
// als er geen fouten gegenereerd zijn
if(count($error) == 0)
{
// escapen
$name = mysql_real_escape_string($_POST['name']);
// opslaan in de database
$sql="INSERT INTO " . $tbl_name . " (name) " . "VALUES('" . $name . "')";
mysql_query($sql);
// redirecten naar een bedank pagina
header('Location: bedankt.php');
exit;
}
}
?>
<form action="" method="post">
<?php if(isset($error['name'])) echo '<p class="warning">' . $error['name'] . '</p>'; ?>
<input type="text" name="name" value="<?php echo $name; ?>" />
<input type="submit" />
</form>