verversen na submit in een loop
Na verwijderen wordt de pagina niet ververst en blijft het verwijderde record zichtbaar op de pagina.
Dit heb ik al geprobeerd.
Code (php)
De volgende code levert een loop op die blijft lopen.
Code (php)
<script type="text/javascript">
location.reload();
</script>
Hoe kan ik een pagina verversen als binnen een loop op een 'submit' wordt geklikt?
Is het niet zinvoller om een mooie statusmelding tonen?
Met 1 klik wil ik een (inkoop)regel op de pagina (of wel 1 record uit tblInkoop) laten verwijderen.
Een alternatief voor de knop is een checkbox maar dan moet men eerst de checkbox aanvinken en vervolgens bovenaan de pagina op de knop (submit) Opslaan klikken.
Daarnaast wil ik op de pagina Relaties hetzelfde realiseren. Bovenaan staan de debiteuren en daaronder de crediteuren. Is een relatie enkel debiteur of crediteur dan wordt achter deze relatie een knop getoond. In deze knop staat resp. 'maak ook crediteur', 'maak ook debiteur'. Met 1 klik is een debiteur ook crediteur en andersom.
Gewijzigd op 22/11/2020 21:06:43 door Bas van de Ven
Zie ook deze thread op Stack Overflow: https://stackoverflow.com/questions/34956481/ajax-delete-row-in-table-with-php-id-selected
En waarom nummer je je velden? Als je er een multidimensionale array van maakt, dan kan je ook alle items in één keer doorlopen"
$_POST['items'][3] om bijvoorbeeld het vierde element (array's tellen bij 0)op te roepen. of een foreach op $_POST['items'] om alles door te lopen.
Gewijzigd op 22/11/2020 21:21:05 door - Ariën -
Ook zou het niet misstaan om eerst je input te valideren voordat je $inkid behandelt als een geldig id.
Wordt het record wel verwijderd? Heeft $inkid wel een geldige waarde?
En is de query wel geldig? Want je ziet waarschijnlijk geen foutmeldingen indien je de pagina meteen ververst.
Helaas krijg ik het Ajax-request niet voor elkaar. Bij javascript krijg je geen foutmelding waardoor ik niet weet waar het fout gaat.
Het antwoord op jou vraag 'waarom nummer je je velden' is als volgt.
Door mijn velden te nummeren kan ik normaliter o.b.v. een multidimensionale array de velden op slaan m.b.v. 1 submit boven aan de pagina.
Dat is juist de (alternatieve) manier als ik kies voor een checkbox i.p.v. een submit om een record te verwijderen.
In de 'eerste' array zit het recordId met alle veldnamen als een array. In de tweede array worden alle velden doorlopen (per record dus).
Op deze manier dus.
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
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
<?php
function getNameFromKey($key) {
$array = explode('_', $key);
return $array[0];
}
function getIdFromKey($key) {
$array = explode('_', $key);
return $array[1];
}
$array = array();
foreach($_POST as $key => $value) {
$array[getIdFromKey($key)][getNameFromKey($key)] = $value;
}
foreach($array as $recId => $id) {
foreach($id as $key => $value) {
if ($key == 'txtPrijs' && !empty($value)){ $updPrijs = str_replace(',', '.', $value); }
else if ($key == 'txtPrijs' && empty($value)){ $updPrijs = 'NULL'; }
}
if(isset($recId) and $recId > 0) {
/*Wijzig prijs */
$wijzig_prijs = "UPDATE tblInkoop set prijs = ".mysqli_real_escape_string($db,$updPrijs)." where inkId = ".mysqli_real_escape_string($db,$recId)." ";
mysqli_query($db,$wijzig_prijs) or die (mysqli_error($db));
}
}
?>
function getNameFromKey($key) {
$array = explode('_', $key);
return $array[0];
}
function getIdFromKey($key) {
$array = explode('_', $key);
return $array[1];
}
$array = array();
foreach($_POST as $key => $value) {
$array[getIdFromKey($key)][getNameFromKey($key)] = $value;
}
foreach($array as $recId => $id) {
foreach($id as $key => $value) {
if ($key == 'txtPrijs' && !empty($value)){ $updPrijs = str_replace(',', '.', $value); }
else if ($key == 'txtPrijs' && empty($value)){ $updPrijs = 'NULL'; }
}
if(isset($recId) and $recId > 0) {
/*Wijzig prijs */
$wijzig_prijs = "UPDATE tblInkoop set prijs = ".mysqli_real_escape_string($db,$updPrijs)." where inkId = ".mysqli_real_escape_string($db,$recId)." ";
mysqli_query($db,$wijzig_prijs) or die (mysqli_error($db));
}
}
?>
Hoi Thomas,
Ja het record wordt wel verwijderd en ja $inkId heeft een geldige waarde. Na het opnieuw opvragen van de inkooppagina is het record nl. verwijderd.
Heb jij een voorbeeld (topic) hoe ik quotes binnen real_escape_string() moet gebruiken. Ik krijg nl. niets gevonden hierover.
Bas van de Ven op 28/11/2020 16:35:03:
Hoi Ariën,
Helaas krijg ik het Ajax-request niet voor elkaar. Bij javascript krijg je geen foutmelding waardoor ik niet weet waar het fout gaat.
Helaas krijg ik het Ajax-request niet voor elkaar. Bij javascript krijg je geen foutmelding waardoor ik niet weet waar het fout gaat.
Daarom hebben de meeste browser een Network-tab in hun debugging-tool zitten. Dan kan je prima achterhalen waarom een request niet werkt, en welke foutmelding er op de onzichtbare achtergrond geprojecteerd wordt.
Bas van de Ven op 28/11/2020 16:35:03:
Heb jij een voorbeeld (topic) hoe ik quotes binnen real_escape_string() moet gebruiken. Ik krijg nl. niets gevonden hierover.
Bijna goed... niet 'binnen' maar om 'er om heen':
Code (php)
1
2
3
2
3
<?php
$delete_inkoop = "DELETE FROM tblInkoop WHERE inkId = '".mysqli_real_escape_string($db,$inkid)."'";
?>
$delete_inkoop = "DELETE FROM tblInkoop WHERE inkId = '".mysqli_real_escape_string($db,$inkid)."'";
?>
Het heeft ook niet direct te maken met escaping, dat is hier een bijzaak.
Een mooi voorbeeld mét en zonder:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// Zonder quotes:
// De inhoud van het veld 'iets' wordt overschreven door de inhoud van 'dat' waar 'id ' 0 is.
$update = "UPDATE tblname SET iets = dat WHERE id=0";
// Met quotes:
// De inhoud van het veld 'iets' wordt overschreven door de string 'dat' waar 'id' 0 is.
$update = "UPDATE tblname SET iets = 'dat' WHERE id=0";
?>
// Zonder quotes:
// De inhoud van het veld 'iets' wordt overschreven door de inhoud van 'dat' waar 'id ' 0 is.
$update = "UPDATE tblname SET iets = dat WHERE id=0";
// Met quotes:
// De inhoud van het veld 'iets' wordt overschreven door de string 'dat' waar 'id' 0 is.
$update = "UPDATE tblname SET iets = 'dat' WHERE id=0";
?>
In combinatie met SQL-injection en ongecontroleerde invoer, kan dit gevaarlijk zijn, Ook al zou je het escapen. SQL-injection blijft dan mogelijk, tenzij je netjes quotes gebruikt. In het voorbeeld hierboven is de WHERE-voorwaarde hardcoded, en zal er ook geen veld met 0 bestaan.
Je moet zelf dus goed opletten hoe jij je queries opbouwt. Met prepared statements is dit niet meer nodig. Maar het vergt wel meer handelingen.
Gewijzigd op 28/11/2020 18:54:02 door - Ariën -