auto's verkopen d.m.v checkbox array in query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full Stack Developer Industriële Automatiseri

Raster wordt continu betrokken bij complexe en baanbrekende projecten in industriële automatisering. Ons team is gespecialiseerd in productie automatisering en proces automatisering projecten waarin procesveiligheid een belangrijk aspect is. Ons compact en groeiend OX (Operational Excellence) team ontwikkelt, configureert en levert support op zelfontwikkelde applicaties waarmee onze klanten hun productieprocessen slimmer, sneller, goedkoper en veiliger maken. Operational Excellence wordt zichtbaar gemaakt in resultaten. Bij bedrijven met dezelfde strategie, zal een operationeel excellent bedrijf een lager operationeel risico, lagere operationele kosten hebben en relatief meer winst maken. Het Raster OX team laat haar klanten de resultaten behalen door hun eigen procesdata

Bekijk vacature »

Richard Hansma

Richard Hansma

04/12/2012 17:20:46
Quote Anchor link
Beste PHP-ers,

Ik zit met een kwestie waar ik niet uitkom. Ik heb een stukje code waarin ik d.m.v checkboxes en een array meerdere waardes uit een database wil verwijderen. Dit lukt, alleen wil ik het wat uitbreiden. In dit geval gaat het om auto's die je kunt verkopen mits je in de zelfde stad bent als de auto. Ik kan dit oplossen via mijn query.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php $sql =
        "DELETE
        FROM garage
        WHERE auto_id IN
        ("
.implode(",", $_POST['autoid']).")
        AND '"
.$row['stad']."' = '".$row['auto_stad']."'
        "
;
?>

Maar stel, ik heb meerdere auto's in mijn garage, in verschillende steden. Hoe kan er dan voor zorgen dat wanneer ik alles aanvink de auto's die wel in de stad staan waar ik op dat moment ben kan verkopen? Dus dat hij aangeeft:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
`Auto met id 2049 is verkocht.`
`Auto met id 3440 is verkocht.`
`Auto met id 4201 is niet verkocht omdat je niet in de juiste stad bent.`
`Auto met id 9149 is verkocht.`


Mijn excuses voor de matige titel, ik heb geen idee hoe ik het kan formuleren.
Gewijzigd op 04/12/2012 17:22:43 door Richard Hansma
 
PHP hulp

PHP hulp

02/12/2021 19:37:17
 
Kris Peeters

Kris Peeters

04/12/2012 17:50:30
Quote Anchor link
Wil je auto's verkopen of ze verwijderen? En wat heeft die delete met checkboxes te maken met auto's in stock in garage's in andere steden?

Nu ja...

de gebruiker heeft dus een eigen stad. Waar haal je die informatie? Duidelijk van $row['stad'], maar waar komt dat van?

Dan zou je in principe dit moeten doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$stad
= $row['stad'];  // of waar je dit ook haalt
$sql = "
SELECT ... FROM garage
WHERE stad = '"
. mysql_real_escape_string($stad) . "'
"
;   /// de ... vervangen door de velden die je nodig hebt.
?>


Verder nog opmerken dat implode(",", $_POST['autoid']) je open stelt voor injection (tenzij je elders maatregelen hebt genomen).
 
Richard Hansma

Richard Hansma

04/12/2012 18:05:54
Quote Anchor link
Ik wil ze verkopen, maar dat houdt in dat ik ze verwijder uit mijn database. De auto's hebben namelijk verder geen functie, of je hebt ze in de garage of je verkoopt ze en je krijgt er wat geld voor. De gebruiker heeft de mogelijkheid om te reizen. Dus `$row['stad']` verandert per gebruiker per keer dat ze ergens naartoe reizen. Maar omdat er maar één garage per gebruiker is, staat alles daarin met verschillende steden aangegeven.

Ik wil nu dus gewoon alles aan kunnen vinken en wanneer ik op 'verkoop' druk, dat hij alles verkoopt (verwijdert) uit de database, waar de stad van de auto gelijk is aan de stad waar ik me op dat moment in bevind. De rest moet in de garage blijven. Is dit mogelijk met één query of moet ik ook gebruik maken van bijvoorbeeld een if/else-constructie?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/12/2012 19:30:10
Quote Anchor link
Ik zou beginnen aan de voorkant, maw je toont alleen de auto's (met ckeckboxen) van de stad die op dat moment van toepassing is.
Je kunt dan jouw implode versie gebruiken, alleen moet je dan, zoals Kris aangeeft, wel beveiligen tegen SQL-injectie, voor je de implode toepast:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach ($_POST['auto_id'] as $key => $value) {
    $_POST['auto_id'][$key] = (int) $value;
}

?>
Gewijzigd op 04/12/2012 19:31:16 door Ger van Steenderen
 
- Mark -

- Mark -

04/12/2012 19:52:51
Quote Anchor link
Let er wel op dat je ook moet controleren of de auto's wel van de gebruiker zijn. Doe je dat niet dan kun je de auto's van anderen verwijderen / verkopen.
 
Richard Hansma

Richard Hansma

05/12/2012 20:43:13
Quote Anchor link
Ik heb het opgelost door alleen checkboxen te laten zien bij de auto's die daadwerkelijk verkocht kunnen worden. Alleen stuit ik nu op het probleem dat wanneer ik 2 of meer auto's in mijn garage heb en ik wil maar één verkopen, welke niet de bovenste is, geeft hij alsnog aan dat ik de bovenste verkoop, ondanks dat de 2e wel verdwijnt uit de database.

Voorbeeld: 2 auto's in mijn garage, beide in dezelfde stad. Auto id 3 heeft een waarde van 1000, terwijl auto id 17 een waarde heeft van 1500. Ik wil nu graag auto id 17 verkopen. Wanneer ik die checkbox aanvink pakt hij de waarde van auto id 3, terwijl hij wel auto id 17 verwijderd uit de database.

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
<?php
$sql
=
        "SELECT gebruikers.id, gebruikers.username, gebruikers.stad, garage.auto_id, garage.username, garage.auto, garage.schade, garage.waarde, garage.auto_stad, kwantiteit.geld_zak
        FROM gebruikers
        LEFT JOIN garage
        ON gebruikers.username=garage.username
        LEFT JOIN kwantiteit
        ON gebruikers.username=kwantiteit.username
        WHERE garage.username = '"
.$_SESSION['user']."'
        "
;
        $query = mysql_query($sql);
        $row = mysql_fetch_assoc($query);
        
        $sql =
        "DELETE
        FROM garage
        WHERE auto_id IN
        ("
.implode(",", $_POST['autoid']).")
        "
;
        $query = mysql_query($sql);
        
        $nieuw_geld = $row['waarde'] + $row['geld_zak'];
        
        $sql =
        "UPDATE kwantiteit
        SET kwantiteit.geld_zak =
        '"
.$nieuw_geld."'
        WHERE kwantiteit.username =
        '"
.$_SESSION['user']."'
        "
;
        $query = mysql_query($sql);
        
        echo "De auto met ID ".$row['autoid']." is verkocht voor $ ".$row['waarde']."."; // Hier geeft hij de verkeerde ID en waarde aan.
?>
Gewijzigd op 05/12/2012 20:44:14 door Richard Hansma
 
Nick Dijkstra

Nick Dijkstra

05/12/2012 23:10:51
Quote Anchor link
Je select in je eerste query alle auto's in de garage. Bij de delete query ga je pas kijken waar het autoid voor komt.

Maar wat je moet doen heeft Ger van Steenderen al gezegd (foreach loop), dan ga je alle aangevinkte checkboxen af.

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
<form method="post">
    <input type="checkbox" name="autoid[3]" value="1000">
    <input type="checkbox" name="autoid[17]" value="1500">
</form>
<?php
// Oude geld uit db halen
$geld = $row['geld_zak'];

foreach ($_POST['autoid'] as $key => $value) {
    // $key = autoid
    // $value = autowaarde


    $sql = "DELETE FROM garage WHERE auto_id=".(int)$key;
    $query = mysql_query($sql);
    if ($query) {
        // Autowaarde optellen bij geld
        $geld += $value;
        echo 'De auto met ID '.$key.' is verkocht voor $ '.$value.'.<br>';
    }
else {
        echo 'De auto met ID '.$key.' is NIET verkocht.<br>';
    }
}


// Update het geld
$sql1 = "UPDATE kwantiteit SET kwantiteit.geld_zak='".(int)$geld."' WHERE kwantiteit.username='".$_SESSION['user']."'";
$query1 = mysql_query($sql1);

if (! $query1) {
    echo 'Geld niet bijgewerkt!';
}

?>


Ik weet niet of dit de goede manier is, maar zou wel moeten werken.
Gewijzigd op 05/12/2012 23:13:30 door Nick Dijkstra
 
Richard Hansma

Richard Hansma

06/12/2012 00:00:52
Quote Anchor link
Bedankt, het is gelukt.
 
- Mark -

- Mark -

06/12/2012 09:56:52
Quote Anchor link
Het zal best zo zijn dat het werkt maar echt optimaal is het niet en het is alles behalve veilig. Je kunt de auto's voor zoveel verkopen als je wilt. Een gebruiker hoeft de waarde van de checkbox maar te vervangen en klaar is kees. En zoals ik al eerder zei, je controleerd niet of de gekozen auto wel van de gebruiker is. Je kunt nu de auto's van andere mensen verkopen.
 
Richard Hansma

Richard Hansma

06/12/2012 13:51:11
Quote Anchor link
Ik heb niet alles overgenomen. Ik haal nog steeds de waarde uit de database, niet via een checkbox value. Daarbij controleer ik wél of de auto van de gebruiker is.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
WHERE garage.username = '".$_SESSION['user']."'
?>
 



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.