MySQLi insert en update
Ik heb een formulier gemaakt, waar de gegevens ingezet worden die uit de database komen, om deze gegevens vervolgens te updaten. Dit werkt allemaal als een tierelier en geen problemen.
Nu heb ik daarna een vrijwel gelijksoortig formulier gemaakt, om nieuwe gegevens in de tabel te zetten, dus een mysqli_insert.
Nu gebeurt er iets heel raars. Want ik krijg de foutmelding 'undefined id', die in de tabel gewoon op auto_increment en primary staat, dus automatisch het volgende nummer zou moeten worden. Bij een serie van de laatste checks of alles goed gaat, heb ik verschillende redirects gezet, afhankelijk van het type foutmelding. De redirects heb ik op voldoende tijd staan (header(refresh:15;blabla.php)) om te zien wat de foutmelding is. Nu bleek de verhoging van de tijd van de refresh geen effect te hebben, dus dat was raar.
Toen heb ik ontdekt, dat de redirect gebruikt wordt van het update-script, en niet van het insert script. Dus voordat de nieuwe row wordt toegevoegd in de dBase, gaat het script verder vanuit de update-file.
In een poging alles uit te schakelen, heb ik de cache van de browser volledig opgeschoond, heb ik aan het eind van het script mysqli_close toegevoegd, en nou weet ik het niet meer. De variabelen hebben niet dezelfde naam: $sql_insert en $result = mysqli_query($link, $sql_insert); voor het insertscript en $sql_update en $result = mysqli_query($link, $sql_update); voor het updatescript.
Dus mijn vraag: Hoe kan het ene script nou zomaar verder gaan met een script van een ander bestand, en enig idee hoe dit op te lossen?
Gewijzigd op 09/06/2014 20:18:30 door Tortuga web
Hoe ziet het script eruit?
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
//Make the query
$sql_insert = sprintf("INSERT INTO socios(nombre,apellidos, dni, nacido, domicilio,cp,poblacion, provincia, fijo, movil, email, pass)
VALUES ('$nombre', '$apellidos', '$dni', '$nacido', '$domicilio', '$cp', $poblacion,'$provincia', '$fijo', '$movil', '$email', '$pass')");
//Send the insert-query
$result = mysqli_query($link, $sql_insert);
//Check if it is send right
if ($result === false) {
header( 'Refresh: 13; url=register_form.php' );
echo '<p>Could not update news item!
<br />Database returned: ' . mysqli_error( $link ) . '
<br />Query was: ' . $sql_insert() . '</p>';
exit();
}
else {
$id = mysql_insert_id();
header( 'Refresh: 15; url=socio.php' );
exit();
}
mysqli_close($link);
$sql_insert = sprintf("INSERT INTO socios(nombre,apellidos, dni, nacido, domicilio,cp,poblacion, provincia, fijo, movil, email, pass)
VALUES ('$nombre', '$apellidos', '$dni', '$nacido', '$domicilio', '$cp', $poblacion,'$provincia', '$fijo', '$movil', '$email', '$pass')");
//Send the insert-query
$result = mysqli_query($link, $sql_insert);
//Check if it is send right
if ($result === false) {
header( 'Refresh: 13; url=register_form.php' );
echo '<p>Could not update news item!
<br />Database returned: ' . mysqli_error( $link ) . '
<br />Query was: ' . $sql_insert() . '</p>';
exit();
}
else {
$id = mysql_insert_id();
header( 'Refresh: 15; url=socio.php' );
exit();
}
mysqli_close($link);
Dit is het stuk uit het insert-script
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
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
$sql_update = ("UPDATE socios
SET
nombre = '$nombre',
apellidos = '$apellidos',
dni = '$dni',
socio = '$socio',
nacido = '$nacido',
domicilio = '$domicilio',
cp = '$cp',
poblacion = '$poblacion',
provincia = '$provincia',
fijo = '$fijo',
movil = '$movil',
email = '$email',
pass = '$pass'
WHERE
id = '$id'");
//Send the update-query
$result = mysqli_query($link, $sql_update);
//Check if it is send right
if ($result === false) {
header( 'Refresh: 3; url=register_change_form.php' );
echo '<p>Could not update news item!
<br />Database returned: ' . mysqli_error( $link ) . '
<br />Query was: ' . $sql_update() . '</p>';
exit();
}
else {
header( 'Refresh: 10; url=all_socios.php' );
exit();
}
mysqli_close($link);
SET
nombre = '$nombre',
apellidos = '$apellidos',
dni = '$dni',
socio = '$socio',
nacido = '$nacido',
domicilio = '$domicilio',
cp = '$cp',
poblacion = '$poblacion',
provincia = '$provincia',
fijo = '$fijo',
movil = '$movil',
email = '$email',
pass = '$pass'
WHERE
id = '$id'");
//Send the update-query
$result = mysqli_query($link, $sql_update);
//Check if it is send right
if ($result === false) {
header( 'Refresh: 3; url=register_change_form.php' );
echo '<p>Could not update news item!
<br />Database returned: ' . mysqli_error( $link ) . '
<br />Query was: ' . $sql_update() . '</p>';
exit();
}
else {
header( 'Refresh: 10; url=all_socios.php' );
exit();
}
mysqli_close($link);
Dit is uit het update-script.
Zoals je ziet, zijn alle redirect verschillend, vandaar dat ik weet dat het script van bestand switched.
Waar komen de variabelen uit je query vandaan? Zoals: $id, $nombre, $apellidos etc, en bescherm je die ook tegen SQL-injection?
De haakjes hoeven niet, maar doen ook geen kwaad.
Maar zeer waarschijnlijk gaat het ergens anders in je script fout, misschien een verkeerde form action?