verversen na submit in een loop

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas van de Ven

Bas van de Ven

22/11/2020 18:59:45
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?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>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php

} ?>


Hoe kan ik een pagina verversen als binnen een loop op een 'submit' wordt geklikt?
 
PHP hulp

PHP hulp

02/12/2020 04:24:35
 
- Ariën -
Beheerder

- Ariën -

22/11/2020 19:09:58
Quote Anchor link
Met welke reden wil je dit doen?
Is het niet zinvoller om een mooie statusmelding tonen?
 
Bas van de Ven

Bas van de Ven

22/11/2020 20:39:47
Quote Anchor link
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.
Gewijzigd op 22/11/2020 21:06:43 door Bas van de Ven
 
- Ariën -
Beheerder

- Ariën -

22/11/2020 21:16:58
Quote Anchor link
Is een Ajax-request niet praktischer in combinatie met wat leuke DOM-acties?

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 -
 
Thomas van den Heuvel

Thomas van den Heuvel

23/11/2020 02:11:40
Quote Anchor link
De query is vatbaar voor SQL-injectie. Het gebruik van real_escape_string() is niet veilig zonder quotes.

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.
 
Bas van de Ven

Bas van de Ven

28/11/2020 16:35:03
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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));
    
}

    }

                

?>



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.
 
- Ariën -
Beheerder

- Ariën -

28/11/2020 18:40:56
Quote Anchor link
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.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
?>


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 -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.