probleem met update naar datebase
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 'Joep', achternaam='van kaahei', ' at line 2.
dit is hier regel 4
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$query = "UPDATE spelers SET afbeelding='".$_POST['afbeelding']."',
voornaam='".$_POST['voornaam']."',
achternaam='".$_POST['achternaam']."',
gebdatum='".$_POST['gebdatum']."',
straat='".$_POST['straat']."',
huisnr='".$_POST['huisnr']."',
postcode='".$_POST['postcode']."',
plaats='".$_POST['plaats']."',
telefoon='".$_POST['telefoon']."',
email='".$_POST['email']."',
club='".$_POST['club']."',
caramboles='".$_POST['caramboles']."',
moyenne='".$_POST['moyenne']."',
hoogste='".$_POST['hoogste']."'
WHERE id='".$_GET['id']."'";
mysqli_query($con,$query) or die(mysqli_error($con));
echo '<h4>De wedstrijd is gewijzigd</h4>
Klik <a href="index.php">HIER</a> om terug te gaan';
?>
$query = "UPDATE spelers SET afbeelding='".$_POST['afbeelding']."',
voornaam='".$_POST['voornaam']."',
achternaam='".$_POST['achternaam']."',
gebdatum='".$_POST['gebdatum']."',
straat='".$_POST['straat']."',
huisnr='".$_POST['huisnr']."',
postcode='".$_POST['postcode']."',
plaats='".$_POST['plaats']."',
telefoon='".$_POST['telefoon']."',
email='".$_POST['email']."',
club='".$_POST['club']."',
caramboles='".$_POST['caramboles']."',
moyenne='".$_POST['moyenne']."',
hoogste='".$_POST['hoogste']."'
WHERE id='".$_GET['id']."'";
mysqli_query($con,$query) or die(mysqli_error($con));
echo '<h4>De wedstrijd is gewijzigd</h4>
Klik <a href="index.php">HIER</a> om terug te gaan';
?>
in de database staat d' Joep.
En als ik die ' weg haal werkt het wel
Gewijzigd op 05/04/2014 02:13:10 door Niek Kasius
$_POST en $_GET in 1 formulier?
Is het niet standaard dat je als method kiest voor get of post?
Obelix en Idefix op 05/04/2014 08:35:51:
Is je nog nooit verteld dat je de input moet beveiligen?
Yes, hier op mijn werkkamer gaan nu de zwaailichten en sirenes af omdat er hier sprake is van een mogelijkheid tot SQL-injection. Iedereen kan je query manipuleren met kwalijke gevolgen....
Beveilig daarom je $_POST (en $_GET en $_COOKIE) gegevens mysql_real_escape_string()
En los van het gevaar op manipulatie: ook een simpele, terechte ' in je invoer kan dan geem kwaad meer
Quote:
Is je nog nooit verteld dat je de input moet beveiligen?
$_POST en $_GET in 1 formulier?
Is het niet standaard dat je als method kiest voor get of post?
$_POST en $_GET in 1 formulier?
Is het niet standaard dat je als method kiest voor get of post?
Dus
WHERE id heb ik niet nodig blijkbaar, want ik het nu heb geprobeerd zonder en dat werkt.
Bij het posten en bewerken heb ik wel mysqli_real_escape_string staan, maar dat het in edite ook moest had ik geen id van.
Maar nu werkt het goed.
Bedankt allemaal
Ik heb dat zelfde script nu gekopieerd om het te gebruiken in mijn gastenboek, Natuurlijk wel alles aan gepast en dat werkt wel Alleen niet wat ik wil de datum voeg die automatisch toe met NOW() dat is geen probleem, Maar ik heb in de database een veld toegevoegd genaamd wijzig_datum.
En nu wil dat niet lukken.
Krijg een dit in editen.php.
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 ' email, bericht, ' at line 1
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$query = "UPDATE berichten SET naam,
email,
bericht,
wijzig_datum
VALUES '".mysqli_real_escape_string($con,$_POST['naam'])."',
'".mysqli_real_escape_string($con,$_POST['email'])."',
'".mysqli_real_escape_string($con,$_POST['bericht'])."',
NOW()";
mysqli_query($con,$sql) or die(mysqli_error($con));
{
echo '<h4>Het bericht is gewijzigd, je word nu terug gestuurd</h4>'; header("Refresh: 2; URL=index.php");
}
?>
$query = "UPDATE berichten SET naam,
email,
bericht,
wijzig_datum
VALUES '".mysqli_real_escape_string($con,$_POST['naam'])."',
'".mysqli_real_escape_string($con,$_POST['email'])."',
'".mysqli_real_escape_string($con,$_POST['bericht'])."',
NOW()";
mysqli_query($con,$sql) or die(mysqli_error($con));
{
echo '<h4>Het bericht is gewijzigd, je word nu terug gestuurd</h4>'; header("Refresh: 2; URL=index.php");
}
?>
En in wijzigen zit de INSERT INTO en die gaat via de form naar editen.php waar die de UPDATE uitvoerd, En dat werk asl ik die wijzig_datum en NOW weg laat.
Ik heb die VALUES ook al weg gelaten maar het werkt niet.
het werkt wel als de wijzig_datum handmatg invoer via de form.
dus het moet aan NOW() liggen
vreemd genoeg is dat regel 2 van jouw query. Maar zoals Aar aangeeft: de syntax van een update query is anders dan wat jij probeert.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
//wat hij heeft
UPDATE berichten SET naam,
email,
bericht,
...
//wat hij zou moeten hebben
UPDATE berichten
SET naam = ...., email = ...
UPDATE berichten SET naam,
email,
bericht,
...
//wat hij zou moeten hebben
UPDATE berichten
SET naam = ...., email = ...
Na naam moet dus een waarde komen voor die kolom en aangezien die waarde ontbreekt geeft de parser daar al een foutmelding. De fout zit dus op regel 1 al (de komma staat op regel 1).
Gewijzigd op 01/05/2014 10:14:00 door Erwin H
Zoals onderander de wijzig_datum veranderd in wijzigen (ja ook in de database) en naam = 'naam', enz, enz.
Maar het werkt niet met NOW(). Ik kan natuurlijk die wijzig datum ook weg laten, alleen weet je dan niet meer wanneer iets gewijzigd is
Dus heb ik het maar zo gedaan:
dit is wijzigen.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
39
40
41
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
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['naam']) ||
empty($_POST['email']) ||
empty($_POST['bericht']) ||
empty($_POST['wijzigen']))
{
echo '<H1>Error!!!!!</h1><h3>Je hebt een of meerdere velden ingevuld!</h3>';
}
else
{
mysqli_query($con,"INSERT INTO berichten (id,
naam = 'naam',
email = 'email',
bericht = 'bericht',
wijzigen = 'wijzigen'
)
VALUES (''
naam='".mysqli_real_escape_string($con,$_POST['naam'])."',
email='".mysqli_real_escape_string($con,$_POST['email'])."',
bericht='".mysqli_real_escape_string($con,$_POST['bericht'])."',
wijzigen='".mysqli_real_escape_string($con,$_POST['wijzigen'])."'
WHERE id='".mysqli_real_escape_string($con, $_GET['id'])."')");
}
}else
{
$query = mysqli_query($con,"select naam, email, bericht, wijzigen FROM berichten WHERE id='".mysqli_real_escape_string($con, $_GET['id'])."'");
while($log = mysqli_fetch_object($query)){
?>
<div id="content">
<center>
<div id="poster">
<form method="POST" action="editen.php?actie=&id=<?=(int)$_GET['id'];?>" name="form">
<div class="screen">
<div class="row">
<label>Naam:</label>
<input type="text" name="naam" value="<?php echo"$log->naam"; ?> size="40" maxlength="60">
</div>
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['naam']) ||
empty($_POST['email']) ||
empty($_POST['bericht']) ||
empty($_POST['wijzigen']))
{
echo '<H1>Error!!!!!</h1><h3>Je hebt een of meerdere velden ingevuld!</h3>';
}
else
{
mysqli_query($con,"INSERT INTO berichten (id,
naam = 'naam',
email = 'email',
bericht = 'bericht',
wijzigen = 'wijzigen'
)
VALUES (''
naam='".mysqli_real_escape_string($con,$_POST['naam'])."',
email='".mysqli_real_escape_string($con,$_POST['email'])."',
bericht='".mysqli_real_escape_string($con,$_POST['bericht'])."',
wijzigen='".mysqli_real_escape_string($con,$_POST['wijzigen'])."'
WHERE id='".mysqli_real_escape_string($con, $_GET['id'])."')");
}
}else
{
$query = mysqli_query($con,"select naam, email, bericht, wijzigen FROM berichten WHERE id='".mysqli_real_escape_string($con, $_GET['id'])."'");
while($log = mysqli_fetch_object($query)){
?>
<div id="content">
<center>
<div id="poster">
<form method="POST" action="editen.php?actie=&id=<?=(int)$_GET['id'];?>" name="form">
<div class="screen">
<div class="row">
<label>Naam:</label>
<input type="text" name="naam" value="<?php echo"$log->naam"; ?> size="40" maxlength="60">
</div>
en dit in editen.php
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$query = "UPDATE berichten SET naam='".mysqli_real_escape_string($con,$_POST['naam'])."',
email='".mysqli_real_escape_string($con,$_POST['email'])."',
bericht='".mysqli_real_escape_string($con,$_POST['bericht'])."',
wijzigen='".mysqli_real_escape_string($con,$_POST['wijzigen'])."'
WHERE id='".mysqli_real_escape_string($con, $_GET['id'])."'";
mysqli_query($con,$query) or die(mysqli_error($con));
?>
$query = "UPDATE berichten SET naam='".mysqli_real_escape_string($con,$_POST['naam'])."',
email='".mysqli_real_escape_string($con,$_POST['email'])."',
bericht='".mysqli_real_escape_string($con,$_POST['bericht'])."',
wijzigen='".mysqli_real_escape_string($con,$_POST['wijzigen'])."'
WHERE id='".mysqli_real_escape_string($con, $_GET['id'])."'";
mysqli_query($con,$query) or die(mysqli_error($con));
?>
Gewijzigd op 01/05/2014 16:02:47 door Niek Kasius
met dan in de opsomming van de kolommen ineens een stel values
en dan toch weer een VALUES () stuk
Met als klap op de vuurpijl een WHERE (in een insert query!!)
De update query uit het laatste blok ziet er wel aardig uit
En in editen zou ik ook een VALUES moeten hebben met SET naam = 'naam' enz, enz er voor omdat NOW() anders niet weet waar die voor dient
En als ik regel 5 verander in NOW() krijg ik een syntax error
Gewijzigd op 01/05/2014 18:41:38 door Niek Kasius
https://dev.mysql.com/doc/refman/5.5/en/update.html
en
https://dev.mysql.com/doc/refman/5.5/en/insert.html
Want er klopt echt geen reet van wat je allemaal doet.
ik heb dit in post.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
mysqli_query($con,"INSERT INTO berichten (id,
naam,
email,
bericht,
datum)
VALUES ('',
'".mysqli_real_escape_string($con,$_POS['naam'])."',
'".mysqli_real_escape_string($con,$_POST['email'])."',
'".mysqli_real_escape_string($con,$_POST['bericht'])."',
NOW()) ");
}
?>
mysqli_query($con,"INSERT INTO berichten (id,
naam,
email,
bericht,
datum)
VALUES ('',
'".mysqli_real_escape_string($con,$_POS['naam'])."',
'".mysqli_real_escape_string($con,$_POST['email'])."',
'".mysqli_real_escape_string($con,$_POST['bericht'])."',
NOW()) ");
}
?>
En daar zet die gewoon de datum van invoer in de database, En dat zelfde staat ook in wijzigen.php met dat verschil dat het naam "datum" is veranderd in "wijzigen" zonder die dubbel aanhalingsteken wel te verstaan, en die heb ik wijzigen ook in de database toegevoegd met datetime.
Dus zou dat toch moeten werken. maar zodra ik NOW() ook in de editen.php zet gaat het fout
bedankt