HTML form en PHP probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom  Verassing

Tom Verassing

21/03/2013 15:42:31
Quote Anchor link
Hallo,

Ik heb een probleem. Ik heb een database met caravans en informatie daar over. Deze caravans hebben meerdere accessoires.

De database is als volgt opgebouwd.

Caravantabel.. met een CID (auto increment) en nog meer informatie die nu niet voor belang is.
Accessoirestabel met de naam van de accessoires en een aid (uniek).
Daar tussen zit een relatie tabel met twee kolommen AID en CID.

Ik heb een pagina hier die die informatie opvraagt en die informatie weer in een HTML forumulier zet zodat de gebruiker de bestaande informatie kan aanpassen.

Nou voor de textinvoer is het allemaal wel gelukt, maar waar ik vast blijf zitten is de checkboxen. Deze worden gebruikt om de accessoiresen aan de caravan te linken.

Mijn vraag is dus hoe kan ik de opgehaalde informatie van de accesoires weer omzetten naar gecheckte checkboxen afhankelijk aan hoe ze ingevoerd zijn?

Mijn code:


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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php

$referentienummer
= $_GET['referentienummer'];

$result = mysql_query("SELECT * FROM caravan WHERE referentienummer = $referentienummer") or die(mysql_error());
$result = mysql_fetch_assoc($result);

$caravan_naam = stripslashes($result['naam']);
$caravan_type = stripslashes($result['soort']);
$caravan_prijs = stripslashes($result['vraagprijs']);
$referentienummer = stripslashes($result['referentienummer']);
$caravan_cid = stripslashes($result['cid']);

$caravan_lengte = stripslashes($result['lengte']);
$caravan_slaapplaatsten = stripslashes($result['slaapplaatsen']);
$caravan_actieprijs = stripslashes($result['actieprijs']);
$caravan_bovag = stripslashes($result['bovaggarantie']);
$caravan_chassisnummer = stripslashes($result['chassisnummer']);
$caravan_breedte = stripslashes($result['breedte']);
$caravan_kenteken = stripslashes($result['kenteken']);
$caravan_nieuwprijs = stripslashes($result['nieuwprijs']);
$caravan_luifel = stripslashes($result['luifel']);
$caravan_maxgewicht = stripslashes($result['maximaalgewicht']);
$caravan_afgiftekenteken = stripslashes($result['kentekenafgifte']);
$caravan_voortent = stripslashes($result['voortent']);
$caravan_bouwjaar = stripslashes($result['bouwjaar']);
$caravan_leeggewicht = stripslashes($result['leeggewicht']);
$caravan_afbeelding = stripslashes($result['afbeelding']);

$caravan_zitsoort = stripslashes($result['zitsoort']);
$caravan_keuken = stripslashes($result['keuken']);
$caravan_bed = stripslashes($result['bed']);
$caravan_toilet = stripslashes($result['toilet']);

$result_categorie = mysql_query("SELECT * FROM categorie WHERE cid = $caravan_cid") or die(mysql_error());
$result_categorie = mysql_fetch_assoc($result_categorie);
$caravan_categorie = stripslashes($result_categorie['categorie']);

$result_merk = mysql_query("SELECT * FROM caravanmerk WHERE cid = $caravan_cid") or die(mysql_error());
$result_merk = mysql_fetch_assoc($result_merk);
$caravan_merk = stripslashes($result_merk['merk']);

$result_zit = mysql_query("SELECT * FROM zit WHERE cid = $caravan_cid") or die(mysql_error());
$result_zit = mysql_fetch_assoc($result_zit);
$caravan_zit = stripslashes($result_zit['zitsoort']);

$result_keuken = mysql_query("SELECT * FROM keuken WHERE cid = $caravan_cid") or die(mysql_error());
$result_keuken = mysql_fetch_assoc($result_keuken);
$caravan_keuken = stripslashes($result_keuken['keukensoort']);

$result_bed = mysql_query("SELECT * FROM bed WHERE cid = $caravan_cid") or die(mysql_error());
$result_bed = mysql_fetch_assoc($result_bed);
$caravan_bed = stripslashes($result_bed['bedsoort']);

$result_toilet = mysql_query("SELECT * FROM toilet WHERE cid = $caravan_cid") or die(mysql_error());
$result_toilet = mysql_fetch_assoc($result_toilet);
$caravan_toilet = stripslashes($result_toilet['toiletsoort']);


$query = "SELECT * FROM relatietabel WHERE cid = $caravan_cid";
if($result = mysql_query($query)) {
    $array = array();
        while($row = mysql_fetch_assoc($result)){
            $array[] = $row['aid'];
        }
}

$count = mysql_num_rows($result);

?>



<form action="caravans.php" method="POST">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $error; ?>

<table cellpadding="7">

<h3>Accessoires:</h3>
<table cellpadding="1">
<tr>
<td><input type="checkbox" name="accessoires[]" value="1"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $checked?>
> Accu<td>
<td><input type="checkbox" name="accessoires[]" value="2"> Afzuigkap<td>
<td><input type="checkbox" name="accessoires[]" value="3"> Airmix<td>
<td><input type="checkbox" name="accessoires[]" value="4"> Boiler<td>
<td><input type="checkbox" name="accessoires[]" value="5"> Caravan mover<td>
</tr>

<tr>
<td><input type="checkbox" name="accessoires[]" value="6"> Cassette toilet<td>
<td><input type="checkbox" name="accessoires[]" value="7"> Circulatie verwarming<td>
<td><input type="checkbox" name="accessoires[]" value="8"> Combi cassettes<td>
<td><input type="checkbox" name="accessoires[]" value="9"> Dakluik<td>
<td><input type="checkbox" name="accessoires[]" value="10"> Decoder<td>
</tr>

<tr>
<td><input type="checkbox" name="accessoires[]" value="11"> Disselafdekking<td>
<td><input type="checkbox" name="accessoires[]" value="12"> Disselslot<td>
<td><input type="checkbox" name="accessoires[]" value="13"> Douche<td>
<td><input type="checkbox" name="accessoires[]" value="14"> Fietsenrek<td>
<td><input type="checkbox" name="accessoires[]" value="15"> Hefdak<td>
</tr>

<tr>
<td><input type="checkbox" name="accessoires[]" value="16"> Heki dakluik<td>
<td><input type="checkbox" name="accessoires[]" value="17"> Hordeur<td>
<td><input type="checkbox" name="accessoires[]" value="18"> Imperiaal<td>
<td><input type="checkbox" name="accessoires[]" value="19"> Kachel<td>
<td><input type="checkbox" name="accessoires[]" value="20"> Kluis<td>
</tr>

<tr>
<td><input type="checkbox" name="accessoires[]" value="21"> Koelkast<td>
<td><input type="checkbox" name="accessoires[]" value="22"> Ladder<td>
<td><input type="checkbox" name="accessoires[]" value="23"> Licht metalen velgen<td>
<td><input type="checkbox" name="accessoires[]" value="24"> Magnetron<td>
<td><input type="checkbox" name="accessoires[]" value="25"> Omvormer<td>
</tr>

<tr>
<td><input type="checkbox" name="accessoires[]" value="26"> Openslaande ramen<td>
<td><input type="checkbox" name="accessoires[]" value="27"> Oven<td>
<td><input type="checkbox" name="accessoires[]" value="28"> Potta potty<td>
<td><input type="checkbox" name="accessoires[]" value="29"> Radio<td>
<td><input type="checkbox" name="accessoires[]" value="30"> Reservewiel<td>
</tr>

<tr>
<td><input type="checkbox" name="accessoires[]" value="31"> Ringverwarming<td>
<td><input type="checkbox" name="accessoires[]" value="32"> Satelliet antenne<td>
<td><input type="checkbox" name="accessoires[]" value="33"> Schokbrekers<td>
<td><input type="checkbox" name="accessoires[]" value="34"> Serviceluik<td>
<td><input type="checkbox" name="accessoires[]" value="35"> Tv antenne<td>
</tr>

<tr>
<td><input type="checkbox" name="accessoires[]" value="36"> Uitbouw voortent<td>
<td><input type="checkbox" name="accessoires[]" value="37"> Verzwaarde steunen <td>
<td><input type="checkbox" name="accessoires[]" value="38"> Vloerverwarming<td>
<td><input type="checkbox" name="accessoires[]" value="39"> Voortent lamp<td>
<td><input type="checkbox" name="accessoires[]" value="40"> Vaste watertank<td>
</tr>

<tr>
<td><input type="checkbox" name="accessoires[]" value="41"> Zonnepaneel<td>
</tr>
</table>


Afbeelding: <br> <input type="text" name="afbeelding" size="60" value="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $caravan_afbeelding;?>
"></td>
<input type="submit" name="submit" value="Opslaan">
</form>


</body>
</html>
Gewijzigd op 21/03/2013 16:11:26 door Tom Verassing
 
PHP hulp

PHP hulp

26/11/2024 15:43:54
 
- Ariën  -
Beheerder

- Ariën -

21/03/2013 16:02:47
Quote Anchor link
Kan je je code even inkorten naar relevante code? En plaats deze ook even tussen code-tags.
Alvast bedankt.
 
Tom  Verassing

Tom Verassing

25/03/2013 08:39:36
Quote Anchor link
Niemand een reactie?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/03/2013 08:43:38
Quote Anchor link
hoe sla je de checkboxen op in de database?
 
Reshad F

Reshad F

25/03/2013 09:17:23
Quote Anchor link
Tom Verassing op 25/03/2013 08:39:36:
Niemand een reactie?


Misschien wel als je alleen relevante code toont en de rest weghaalt :)
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/03/2013 09:30:33
Quote Anchor link
iig zo kun je zorgen dat ie direct gechecked is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="checkbox" selected="selected" name="accessoires[]" value="40">
 
Tom  Verassing

Tom Verassing

25/03/2013 10:17:52
Quote Anchor link
Reshad F op 25/03/2013 09:17:23:
Misschien wel als je alleen relevante code toont en de rest weghaalt :)


Dat heb ik gedaan. Ik heb een array uit de databse gehaald met numerieke waardes.
Deze waardes komen overeen met de value van de checkboxes.

Nou moet er bijv een for lusje komen die de numeriek waardes uit de array vergelijkt met de values van de checkboxes. En als ze overeenkomen moeten de checkbox dus "gecheckt" worden.

Alleen dat lukt me niet.
Gewijzigd op 25/03/2013 10:18:15 door Tom Verassing
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/03/2013 10:37:15
Quote Anchor link
Om een werkend voorbeeld te geven moeten we de opbouw van die array hebben.
stel dat jij die array hebt opgeslagen onder $arr doe dan eens
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
echo '<pre>';
print_r($arr);
echo '</pre>';
?>


en kopieer dan wat je op het beeld krijgt en plak dat eens hier in jouw topic
 
Tom  Verassing

Tom Verassing

25/03/2013 11:13:09
Quote Anchor link
Array
(
[0] => 1
[1] => 7
[2] => 8
[3] => 9
[4] => 13
[5] => 26
[6] => 29
[7] => 30
[8] => 32
[9] => 38
[10] => 39
[11] => 40
)

Dit zijn inweze nummers die in een relatie tabel staat. Bijvoorbeeld index 0 heeft de waarde 1. Die 1 komt overeen in een ander tabel met het accesoires Accu. De checkbox accu heeft ook als value 1. Dus de bedoeling is dat die aancheckt als dat formulier op gevraagt wordt.
Gewijzigd op 25/03/2013 11:47:13 door Tom Verassing
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/03/2013 12:10:20
Quote Anchor link
het werkt nog niet helemaal maar ik moet weg
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
<?php
$opties
= array('Uitbouw voortent', 'Verzwaarde steunen', 'Vloerverwarming', 'Voortent lamp', 'Vaste watertank');

// deze array komt bij jou uit de database:
$gekozen = array(2,3,5); // alleen checkbox 2 en 5 moeten aan

$teller = 1;
foreach($opties as $optie) {
    $checked = '';
    if(array_search($teller, $gekozen))
        $checked = ' checked="checked"';
    echo '<input type="checkbox"'.$checked.' name="accessoires[]" value="'.$teller.'">'.$optie;
    $teller++;
}

?>
 
Tom  Verassing

Tom Verassing

25/03/2013 12:36:56
Quote Anchor link
Er zit een opmaak in die checkboxes hoe ga ik dat voor me kaar krijgen op deze manier dan?

Toevoeging op 25/03/2013 12:58:41:

En in de "gekozen array" moeten alle checkboxen aan. Dus elke waarde die uit de database komt moet de checkbox met deze zelfde value als de waarde gecheckt worden.

Toevoeging op 25/03/2013 14:09:37:

Nou heb ik dit:

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
<?php

    $opties
= array(' Accu', ' Afzuigkap', ' Airmax', ' Boiler', ' Caravan Mover', ' Cassete toilet',
       ' Circulatie verwarming', ' Combi casettes', ' Dakluik', ' Decoder', ' Disselafdekking',
         ' Disselslot', ' Douche', ' Fietsenrek', ' Hefdak', ' Heki dakluik', ' Hordeur', ' Imepriaal', 'Kachel',
          ' Kluisje', ' Koelkast', ' Ladder', ' Licht metalen velgen', ' Magnetron', ' Omvormer',
          ' Openslaande ramen', ' Oven', ' Potta potty', ' Radio', ' Reserve wiel', ' Ringverwarming',
           ' Satelliet antenne', ' Schokbrekers', ' Serviceluik', ' TV antenne', ' Uitbouw voortent',
            ' Verzwaarde steunen', ' Vloerverwarming', ' Voortent lamp', ' Vaste watertank', ' Zonnepaneel');

$teller = 1;
foreach($opties as $optie) {
    $checked = '';
    if(array_search($teller, $array)){
         $checked = ' checked="checked"';
         }

       echo "<tr>";  
    echo '<td><input type="checkbox"'.$checked.' name="accessoires[]" value="'.$teller.'">'.$optie.'</td>';
    $teller++;
    echo "</tr>";
     }
  
?>


$array bestaat uit de volgende waardes op volgorde. 1,7,8,9,13,26,29,30,32,38,39,40. Alle boxen "checked" die behalve nummer 1. Dus box nummer 7 tm 40 wel en nummer 1 niet.

Ook staan ze nu allemaal onder elkaar en ik wil ze per 5 naast elkaar hebben zodat mijn pagina minder lang wordt.
Gewijzigd op 25/03/2013 14:12:15 door Tom Verassing
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/03/2013 02:11:15
Quote Anchor link
goed, wat betreft de array: hij neemt de eerste nu ook mee. kwestie van de goede vergelijking maken.
ook heb ik er een tabel van gemaakt zoals je wilt. inline style is uit de tijd. probeer je code dus ook je tabel op te maken met css.
tevens door een if statement op de teller te plaatsen na elke vijf checkboxen een nieuwe regel in de tabel.
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
<?php
    $array
= array(1,7,8,9,13,26,29,30,32,38,39,40);

    $opties = array(' Accu', ' Afzuigkap', ' Airmax', ' Boiler', ' Caravan Mover', ' Cassete toilet',
       ' Circulatie verwarming', ' Combi casettes', ' Dakluik', ' Decoder', ' Disselafdekking',
         ' Disselslot', ' Douche', ' Fietsenrek', ' Hefdak', ' Heki dakluik', ' Hordeur', ' Imepriaal', 'Kachel',
          ' Kluisje', ' Koelkast', ' Ladder', ' Licht metalen velgen', ' Magnetron', ' Omvormer',
          ' Openslaande ramen', ' Oven', ' Potta potty', ' Radio', ' Reserve wiel', ' Ringverwarming',
           ' Satelliet antenne', ' Schokbrekers', ' Serviceluik', ' TV antenne', ' Uitbouw voortent',
            ' Verzwaarde steunen', ' Vloerverwarming', ' Voortent lamp', ' Vaste watertank', ' Zonnepaneel');

?>

<table cellpadding="1"><tr>
<?php
$teller
= 1;
foreach($opties as $optie) {
    $checked = '';
    if(array_search($teller, $array) !== false){
         $checked = ' checked="checked"';
    }

    if(($teller-1) % 5 == 0)    
       echo "</tr><tr>";  
    echo '<td><input type="checkbox"'.$checked.' name="accessoires[]" value="'.$teller.'">'.$optie.'</td>';
    $teller++;
}
  
?>

</tr></table>
Gewijzigd op 26/03/2013 02:12:30 door Frank Nietbelangrijk
 
Tom  Verassing

Tom Verassing

26/03/2013 08:13:47
Quote Anchor link
Mijn dank is groot frank! Wat betreft vergelijkingen in loopjes is nog niet mijn sterkste kant. Enige tips om dat makkelijk te leren?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/03/2013 09:21:25
Quote Anchor link
Tom Verassing op 26/03/2013 08:13:47:
Mijn dank is groot frank! Wat betreft vergelijkingen in loopjes is nog niet mijn sterkste kant. Enige tips om dat makkelijk te leren?

Google eens op php array om te kijken welke array functies er zoal bestaan.
en gewoon nieuwsgierig zijn en kleine progjes schrijven die de werking demonstreren.

succes.
 
Tom  Verassing

Tom Verassing

26/03/2013 10:00:23
Quote Anchor link
Zal ik doen! Dank je, het werkt prima!

Toevoeging op 26/03/2013 10:02:22:

Kan je me alleen nog vertellen waarom die eerste checkbox het niet deed?

Toevoeging op 26/03/2013 11:29:56:

Oke nou heb ik nog een probleem. Nou heb ik dus degene gecheckt die gecheckt moeten zijn.

Ze kunnnen dus nu aangepast worden bijvoorbeeld als er accesoires bijgekomen zijn of weggehaald.

Dus moet ik werken met een update query. Ik had het zo
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
        $arr
= $_POST['accessoires'];
        $count = count($arr);

    for ($i=0; $i < $count ; i++){                          
        $result = $arr[$i];                         
        mysql_query("UPDATE relatietabel set aid = '$result' WHERE cid= '$caravan_cid'") or die("forlus    " .mysql_error());
          }

?>


Maar dit werkt niet :( Hulp?

Toevoeging op 26/03/2013 14:23:39:

Het is al gelukt :)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
mysql_query("DELETE FROM relatietabel WHERE cid = '$caravan_cid'") or die ("18    " . mysql_error());
                     $arr = $_POST['accessoires'];    
                     $count = count($arr);                     
                     for ($i=0; $i < $count ; $i++) {                          
                             $result = $arr[$i];                                                              
                             mysql_query("INSERT INTO relatietabel (aid, cid) VALUES ('$result', '$caravan_cid')") or die(mysql_error());

?>
 



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.