In een loop heb ik een 'submit' met als naam knpDelete_$inkid. De loop doorloopt een aantal records uit de tabel tblInkoop binnen een mysql database. De knop verwijdert het betreffende record uit de tabel.
Na verwijderen wordt de pagina niet ververst en blijft het verwijderde record zichtbaar op de pagina.
Dit heb ik al geprobeerd.
<?php
if(isset($_POST['knpDelete_'.$inkid])) {
$delete_inkoop = "DELETE FROM tblInkoop WHERE inkId = ".mysqli_real_escape_string($db,$inkid) ;
mysqli_query($db,$delete_inkoop) or die (mysqli_error($db));
header("Refresh:0"); } ?>
De volgende code levert een loop op die blijft lopen.
<?php
if(isset($_POST['knpDelete_'.$inkid])) {
$delete_inkoop = "DELETE FROM tblInkoop WHERE inkId = ".mysqli_real_escape_string($db,$inkid) ;
mysqli_query($db,$delete_inkoop) or die (mysqli_error($db));
?>
<script type="text/javascript">
location.reload();
</script>
<?php
} ?>
Hoe kan ik een pagina verversen als binnen een loop op een 'submit' wordt geklikt?
Na verwijderen van het record in de tabel wil ik dat deze ook direct niet meer zichtbaar is op de pagina.
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.
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.
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.
<?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) {
/*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.
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.
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':
<?php
$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:
<?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";
?>
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.