In eenzelfde table tegelijk INSERT en UPDATE
Ik heb hier een probleempje met het update van een table wanneer je er tegelijk iets in insert. Hier is het script met betrekking tot deze kwestie:
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
<?
mysql_query("INSERT INTO algemeen (fotonaam, datum, comment, alt, paginanaam, paginaid, imagesx, imagesy, dbdatum)
VALUES ('$naam', '$datum', '$_POST[elm1]', $_POST[kort]', '$_POST[pagina1]', '$id', '$x', '$y', '$dbdatum')");
mysql_query("INSERT INTO geschiedenis (paginanaam, fotonaam, datum, comment, alt, dbdatum, paginaid, imagesx, imagesy)
VALUES ('$_POST[pagina1]' , '$naam' , '$datum' , '$_POST[elm1]' , '$_POST[kort]' , '$dbdatum' , '$id', '$x', '$y')");
mysql_query("UPDATE algemeen SET fotonaam='$naam' , datum='$datum' , alt='$_POST[pagina1]',
imagesx='$x', imagesy='$y' WHERE paginaid='news'");
?>
mysql_query("INSERT INTO algemeen (fotonaam, datum, comment, alt, paginanaam, paginaid, imagesx, imagesy, dbdatum)
VALUES ('$naam', '$datum', '$_POST[elm1]', $_POST[kort]', '$_POST[pagina1]', '$id', '$x', '$y', '$dbdatum')");
mysql_query("INSERT INTO geschiedenis (paginanaam, fotonaam, datum, comment, alt, dbdatum, paginaid, imagesx, imagesy)
VALUES ('$_POST[pagina1]' , '$naam' , '$datum' , '$_POST[elm1]' , '$_POST[kort]' , '$dbdatum' , '$id', '$x', '$y')");
mysql_query("UPDATE algemeen SET fotonaam='$naam' , datum='$datum' , alt='$_POST[pagina1]',
imagesx='$x', imagesy='$y' WHERE paginaid='news'");
?>
Nu wordt de table algemeen wel geüpdate, maar er wordt niets in geïnesert. Het vreemde is als ik hetzelfde doe, maar zonder de fotonaam... dan gaan deze bewerkingen wel. - hierbij:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
mysql_query("INSERT INTO algemeen (datum, comment, paginanaam, paginaid, dbdatum)
VALUES ('$datum', '$_POST[elm1]', '$_POST[pagina1]', '$id' , '$dbdatum')");
mysql_query("UPDATE algemeen SET datum='$datum' , alt='$_POST[pagina1]' WHERE paginaid='news'");
mysql_query("INSERT INTO geschiedenis (paginanaam, datum, comment, dbdatum, paginaid)
VALUES ('$_POST[pagina1]' , '$datum' , '$_POST[elm1]' , '$dbdatum' , '$id')");
?>
mysql_query("INSERT INTO algemeen (datum, comment, paginanaam, paginaid, dbdatum)
VALUES ('$datum', '$_POST[elm1]', '$_POST[pagina1]', '$id' , '$dbdatum')");
mysql_query("UPDATE algemeen SET datum='$datum' , alt='$_POST[pagina1]' WHERE paginaid='news'");
mysql_query("INSERT INTO geschiedenis (paginanaam, datum, comment, dbdatum, paginaid)
VALUES ('$_POST[pagina1]' , '$datum' , '$_POST[elm1]' , '$dbdatum' , '$id')");
?>
Verder zou ik als ik jou was, mijn queries ook eens wat netter uitschrijven. Dat geeft veel meer overzicht:
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
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
<?php
$sql = "INSERT INTO algemeen (
fotonaam,
datum,
comment,
alt,
paginanaam,
paginaid,
imagesx,
imagesy,
dbdatum )
VALUES (
'".$naam."',
'".$datum."',
'".$_POST['elm1']."',
'".$_POST['kort']."',
'".$_POST['pagina1']."',
'".$id."',
'".$x."',
'".$y."',
'".$dbdatum."' )
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
?>
$sql = "INSERT INTO algemeen (
fotonaam,
datum,
comment,
alt,
paginanaam,
paginaid,
imagesx,
imagesy,
dbdatum )
VALUES (
'".$naam."',
'".$datum."',
'".$_POST['elm1']."',
'".$_POST['kort']."',
'".$_POST['pagina1']."',
'".$id."',
'".$x."',
'".$y."',
'".$dbdatum."' )
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
?>
Verder zul je in bovenstaande nog op de nodige plaatsen gebruik moeten maken van mysql_real_escape_string() om de input te beveiligen...
Allereerst erg bedankt voor de tip, uw script werkt perfect!
Maar wat bedoel je met "mysql_real_escape_string()", hoe werkt dat nou juist?
Voor wat is dit eigenlijk nodig?
Om injections tegen te gaan. Een soort van beveiliging. Als mensen proberen je query te verlengen zorgt deze functie ervoor dat er slashes in je ingevoerde injection staan. Hierdoor kan de injection niet plaats vinden. Daarnaast geeft de link die ik je gaf genoeg informatie. Neem gewoon de tijd om het te lezen.