[PHP] opslaan via checkbox en while probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Cavalli
  • Registratie: Juni 2005
  • Niet online
Beste,

Ik zit met een probleempje.. ik ben een site aan het maken waar je dan dingen kan toevoegen en kan zeggen of je dat er al mee gedaan hebt dit weer geef ik dus met een While-loop, hieronder volgt mijn 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
<?php
if(isset($_POST['opslaan']))
{

        if(isset($_POST['opname']){ $opname = 1; } else { $opname = 0; }
        if(isset($_POST['offerte']){ $offerte = 1; } else { $offerte = 0; }
        if(isset($_POST['verstuurd']){ $verstuurd = 1; } else { $verstuurd = 0; }
        if(isset($_POST['nagebeld']){ $nagebeld = 1; } else { $nagebeld = 0; }
        if(isset($_POST['uitvoering'])){ $uitvoering = 1; } else { $uitvoering = 0; }
        if(isset($_POST['factuur'])){ $factuur = 1; } else { $factuur = 0; }
        if(isset($_POST['contract'])){ $contract = 1; } else { $contract = 0; }     
        if(isset($_POST['gereed'])){ $gereed= 1; } else { $gereed = 0; }
        
                mysql_query("UPDATE lead 
                             SET opname = '".$opname."',
                                 offerte = '".$offerte."', 
                                 verstuurd = '".$verstuurd."', 
                                 nagebeld = '".$nagebeld."', 
                                 uitvoering = '".$uitvoering."', 
                                 factuur = '".$factuur."', 
                                 contract = '".$contract."', 
                                 gereed = '".$gereed."' 
                             WHERE id = '".$_SESSION['leadid']."'");
                             
                unset($_SESSION['leadid']);
                
                    header("Location: index.php");
                
}
?>



hier staan dan natuurlijk nog een paar dingen hij weergeeft alles helemaal goed ;)

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
<?php
while($row = mysql_fetch_assoc($query2))
{
                                                
    $_SESSION['leadid'] = $row['id'];
                                                
    print "<tr>
    <form method='post' action=''>
    <td width='100' align='center'><small>".date("d-m-y", $row['datum'])."</small></td>
    <td width='100' align='center'>ID</td>
                                            
    <td width='250'><small><a href='details.php?id=".$row['id']."'>".$row['id']."</a></small></td>
    <td>&nbsp;&nbsp;</td>
    <td width='125' align='center'><input type='checkbox' name='opname'"; if($row['opname'] == 1) { print "checked"; } print "></td>
    <td width='125' align='center'><input type='checkbox' name='offerte'"; if($row['offerte'] == 1) { print "checked"; }  print "></td>
    <td width='125' align='center'><input type='checkbox' name='verstuurd'"; if($row['verstuurd'] == 1) { print "checked"; }  print "></td>
    <td width='125' align='center'><input type='checkbox' name='nagebeld'"; if($row['nagebeld'] == 1) { print "checked"; }  print "></td>
    <td width='125' align='center'><input type='checkbox' name='uitvoering'"; if($row['uitvoering'] == 1) { print "checked"; }  print "></td>
    <td width='125' align='center'><input type='checkbox' name='factuur'"; if($row['factuur'] == 1) { print "checked"; }  print "></td>
    <td width='125' align='center'><input type='checkbox' name='contract'"; if($row['contract'] == 1) { print "checked"; }  print "></td>
    <td width='125' align='center'><input type='checkbox' name='gereed'"; if($row['gereed'] == 1) { print "checked"; }  print "></td>
    <td width='200' align='center'><small><input name='opslaan' value='Opslaan' type='submit'></small></td>
    </tr>";
                                        
}
?>


Maar, als er dus 2 dingen in staan zet die maar één sessie dus wat gebeurd er alles word bij de laatste geupdate... omdat daar als laatste de sessie voor gezet is. Is dit op te lossen op een andere manier ik kom er maar niet uit :( Heb ook al FOR-Loop geprobeerd maar daar lukte het me ook niet mee...

[ Voor 28% gewijzigd door Cavalli op 29-06-2005 00:39 ]


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Ik heb je code eens bekeken, maar ik zie er geen volgorde in. Bij de eerste code blok unregistreer je een sessie en bij de 2e geef je het een waarde mee.

Bij de 2e blok heb je een while loop, je haalt data uit een query zo te zien. maar waarschijnlijk zal die loop dus meer dan 1x draaien, en die sessie var leadid die staat er gewoon zo tussen? dus bij elke loop verandert het.

[ Voor 43% gewijzigd door aex351 op 29-06-2005 00:32 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • Cavalli
  • Registratie: Juni 2005
  • Niet online
aex351 schreef op woensdag 29 juni 2005 @ 00:30:
Ik heb je code eens bekeken, maar ik zie er geen volgorde in. Bij de eerste code blok unregistreer je een sessie en bij de 2e geef je het een waarde mee.
Ja, maar als je verder kijkt zie je dat het eerste blok pas aan geroepen word als er op opslaan geklikt word ;) dus dat onderste gedeelte word eerst uitgevoerd.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Gebruik nooit $_SESSION en session_(un)register door elkaar. Dat geeft altijd problemen. Gebruik gewoon unset($_SESSION['foobar']) of iets dergelijks.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

nog zo'n vaag iets

PHP:
1
if(isset($_POST['opname']) AND $_POST['opname'] == TRUE)


Waarom check je het 2x? in 1 IF.
doe dan gewoon
PHP:
1
if ($_POST['opname']) { }

[ Voor 43% gewijzigd door aex351 op 29-06-2005 00:35 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dat het geset is wil niet altijd zeggen dat de waarde klopt met wat je verwacht. :) Overigens is vergelijken met true een beetje raar, aangezien alles wat via $_POST binnenkomt eigenlijk een string is, en je dus met een string moet vergelijken. Wat is de value van de checkbox in kwestie? Daar moet je op checken, niet op true.
aex351 schreef op woensdag 29 juni 2005 @ 00:34:
Waarom check je het 2x? in 1 IF.
doe dan gewoon
PHP:
1
if ($_POST['opname']) { }
Asjeblieft niet zeg, laat hem lekker isset gebruiken. Wat jij zegt werkt ook wel, maar is niet netjes. De expressie in die if komt uit op een stringwaarde, die voor het gemak geconverteerd wordt naar 1 en dus true. Maar netjes is anders. :X

[ Voor 41% gewijzigd door NMe op 29-06-2005 00:38 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

-NMe- schreef op woensdag 29 juni 2005 @ 00:37:
Dat het geset is wil niet altijd zeggen dat de waarde klopt met wat je verwacht. :) Overigens is vergelijken met true een beetje raar, aangezien alles wat via $_POST binnenkomt eigenlijk een string is, en je dus met een string moet vergelijken. Wat is de value van de checkbox in kwestie? Daar moet je op checken, niet op true.
Mee eens. Maar de TS checked dus niets op de manier waarop hij het nu heeft zo denk ik.
Misschien dat de TS iets meer informatie kan geven over zijn code, en ook de juiste volgorde mee wil geven?


edit :
-NMe- schreef op woensdag 29 juni 2005 @ 00:37:
Asjeblieft niet zeg, laat hem lekker isset gebruiken. Wat jij zegt werkt ook wel, maar is niet netjes. De expressie in die if komt uit op een stringwaarde, die voor het gemak geconverteerd wordt naar 1 en dus true. Maar netjes is anders.
Op de manier die ik net aanduide levert het ook gewoon een true of false op hoor, ik zie geen reden om isset etc te gebruiken. Misschien iets meer uitleg aub :)

van php.net
When converting to boolean, the following values are considered FALSE:

the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)

[ Voor 46% gewijzigd door aex351 op 29-06-2005 00:45 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • Cavalli
  • Registratie: Juni 2005
  • Niet online
Ok ik heb jullie reactie gelijk even verwerkt in mijn code. Maar door dit te doen werkt het nog steets niet zo als ik wil.. Alleen als er maar één rij van checkboxen staat werkt het :( zodra er meerdere worden toegevoegd gaat het fout

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

aex351 schreef op woensdag 29 juni 2005 @ 00:39:
Op de manier die ik net aanduide levert het ook gewoon een true of false op hoor, ik zie geen reden om isset etc te gebruiken. Misschien iets meer uitleg aub :)

van php.net
When converting to boolean, the following values are considered FALSE:
Considered wil niet zeggen dat ze gelijk zijn. Het kan wel, maar het is gewoon übervies en niet netjes. :)

Overigens zie ik nu waar het fout gaat. TS wil per rij in de DB een rij met checkboxes hebben. Daar moet je dan een array voor hebben. Maak van je checkboxnamen eens arrays door er [] achter te zetten (liefst met een id ertussen). Daarna kun je het vanuit PHP gewoon als een array benaderen per record. Nu staan er tig checkboxes met dezelfde naam, mag jij eens aan de browser uit gaan leggen wat waarbij hoort. ;)

[ Voor 7% gewijzigd door NMe op 29-06-2005 00:50 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • _reboot_
  • Registratie: December 2004
  • Laatst online: 17-09 22:35
Geeft een checkbox niet "on" of "off" mee? In dat geval is deze altijd 1 (= TRUE).

Wat wordt er eigenlijk opgeslagen in de database? Heb je daar wellicht een uitdraai van?
Op die manier kun je gemakkelijker kijken of het bij het invoeren of het presenteren fout gaat.

Is de sessievariabel die je opvraagt trouwens wel gezet?
Doe eens echo $_SESSION['leadid'];

[ Voor 19% gewijzigd door _reboot_ op 29-06-2005 00:54 ]


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

* note : isset () werkt niet met array's

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

aex351 schreef op woensdag 29 juni 2005 @ 00:34:
doe dan gewoon
PHP:
1
if ($_POST['opname']) { }
Notice: Undefined index: opname in ...
daarom niet ;)
aex351 schreef op woensdag 29 juni 2005 @ 00:53:
* note : isset () werkt niet met array's
uhm; isset() kan juist gebruikt worden om te kijken of een bepaalde array-index bestaat...

[ Voor 34% gewijzigd door crisp op 29-06-2005 00:57 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

aex351 schreef op woensdag 29 juni 2005 @ 00:53:
* note : isset () werkt niet met array's
Joh, je kan zelfs zeggen if (isset($_POST)) of iets dergelijks, valt niemand over. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Cavalli
  • Registratie: Juni 2005
  • Niet online
_reboot_ schreef op woensdag 29 juni 2005 @ 00:53:
Geeft een checkbox niet "on" of "off" mee? In dat geval is deze altijd 1 (= TRUE).

Wat wordt er eigenlijk opgeslagen in de database? Heb je daar wellicht een uitdraai van?
Op die manier kun je gemakkelijker kijken of het bij het invoeren of het presenteren fout gaat.

Is de sessievariabel die je opvraagt trouwens wel gezet?
Doe eens echo $_SESSION['leadid'];
Die sessie is gezet ;) print id van lead. En ik sla het in de database als 1 of als een 0 op in betekend dat het geselecteerd is en bij 0 dus niet.

Hoe kan ik van mijn checkboxnames een array maken? want als ik dat doe krijg ik een foutmelding:
Fatal error: Cannot use [] for reading in /home/bert04nl/domains/tweakcity.nl/public_html/test/1/index.php on line 159
en ik doe het zo:

PHP:
1
<?php <td width='125' align='center'><input type='checkbox' name='".$opname[].'"; if($row['opname'] == 1) { print "checked"; } print "></td> ?>

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

crisp schreef op woensdag 29 juni 2005 @ 00:56:

uhm; isset() kan juist gebruikt worden om te kijken of een bepaalde array-index bestaat...
php.net
Warning: isset() werkt alleen met variabelen. Als je iets anders als argument geeft krijg je een parse error. Om te kijken of constantes gedefinieerd zijn gebruik je de defined() functie.
als je netjes wilt zijn dan gebruik je empty()
php.net
Deze functie is het tegenovergestelde van (boolean) var, behalve dat er geen waarschuwing wordt gegenereerd als de variabele niet bestaat. Zie converteren naar boolean voor meer informatie.
Dus infeite het verhaal wat ik hierboven al vertelde :)

[ Voor 42% gewijzigd door aex351 op 29-06-2005 01:11 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

aex351 schreef op woensdag 29 juni 2005 @ 01:07:
[...]
als je netjes wilt zijn dan gebruik je empty()
Een array is een variabele; je kan 'm immers runtime wijzigen itt een constant.
empty() doet meer dan alleen isset() en is dus feitelijk anders...

Ja, als je notices onderdrukt dan zal een check op een niet bestaande variabele (en dus een array-index) een boolean FALSE geven, maar ik zie dat als bad practice...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Cavalli
  • Registratie: Juni 2005
  • Niet online
aex351 schreef op woensdag 29 juni 2005 @ 00:30:

Bij de 2e blok heb je een while loop, je haalt data uit een query zo te zien. maar waarschijnlijk zal die loop dus meer dan 1x draaien, en die sessie var leadid die staat er gewoon zo tussen? dus bij elke loop verandert het.
Ja, dat is wat ik ook al vertel maar ik weet niet hoe ik dit op kan lossen dat het wel gewoon goed werkt zonder dat steeds die sessie veranderd.. ik heb echt al veel geprobeerd. Ik wil niet zeggen dat ik goed php kan maar ik kan het wel. AUB iemand die mij hiermee kan helpen ben er al van af 16:00 mee bezig
:(

Het liefst even in de code wijzigen want ik zie momenteel php voor me zweven _/-\o_ alles wat ik doe gaat fout en lukt niet

[ Voor 10% gewijzigd door Cavalli op 29-06-2005 01:20 ]


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

crisp schreef op woensdag 29 juni 2005 @ 01:15:
Een array is een variabele;*knip*
Ik geef je gelijk, over het hoofd gezien.

maar isset controlleert alleen als het bestaat, niet als het inhoud heeft.

[ Voor 19% gewijzigd door aex351 op 29-06-2005 01:24 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

aex351 schreef op woensdag 29 juni 2005 @ 01:23:
[...]

Ik geef je gelijk, over het hoofd gezien.

maar isset controlleert alleen als het bestaat, niet als het inhoud heeft.
true, maar het maakt nogal uit qua context of je beter isset() dan wel empty() kan gebruiken ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if(isset($_POST['opslaan']))
{
    foreach($_POST as $key => $value) {
        if ($value == 'on') {
            $$key = 1;
        }
        else $$key = 0;
    }      
    mysql_query("UPDATE lead 
                 SET opname = '".$opname."',
                     offerte = '".$offerte."', 
                     verstuurd = '".$verstuurd."', 
                     nagebeld = '".$nagebeld."', 
                     uitvoering = '".$uitvoering."', 
                     factuur = '".$factuur."', 
                     contract = '".$contract."', 
                     gereed = '".$gereed."' 
                 WHERE id = '".$_POST['leadid']."'");

    header("Location: index.php");
}
?>


Voeg in je form een hidden field to met de "leadid":

PHP:
1
echo '<input type="hidden" name="leadid" value="'.$row['id'].'">';

[ Voor 128% gewijzigd door TheBorg op 29-06-2005 02:04 ]


Acties:
  • 0 Henk 'm!

  • Cavalli
  • Registratie: Juni 2005
  • Niet online
TheBorg schreef op woensdag 29 juni 2005 @ 01:45:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if(isset($_POST['opslaan']))
{
    foreach($_POST as $key => $value) {
        if ($value == 'on') {
            $$key = 1;
        }
        else $$key = 0;
    }      
    mysql_query("UPDATE lead 
                 SET opname = '".$opname."',
                     offerte = '".$offerte."', 
                     verstuurd = '".$verstuurd."', 
                     nagebeld = '".$nagebeld."', 
                     uitvoering = '".$uitvoering."', 
                     factuur = '".$factuur."', 
                     contract = '".$contract."', 
                     gereed = '".$gereed."' 
                 WHERE id = '".$_POST['leadid']."'");

    header("Location: index.php");
}
?>


Voeg in je form een hidden field to met de "leadid":

PHP:
1
echo '<input type="hidden" name="leadid" value="'.$row['id'].'">';
Bedankt, maar het werkt nog niet helemaal kijk maar op: [url]http://isnietmeernodig[/url] als ik iets in rij 1 selecteer en opsla slaat die dat op in rij 3

[ Voor 22% gewijzigd door Cavalli op 29-06-2005 02:33 ]


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

Je bent de form tag vergeten af te sluiten (na elk tabelletje).

</form>

[ Voor 23% gewijzigd door TheBorg op 29-06-2005 02:19 ]


Acties:
  • 0 Henk 'm!

  • Cavalli
  • Registratie: Juni 2005
  • Niet online
TheBorg schreef op woensdag 29 juni 2005 @ 02:18:
Je bent de form tag vergeten af te sluiten (na elk tabelletje).

</form>
THNX man :> _/-\o_

Het werkt nu :)

Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

Gefeliciteerd. 8)
Pagina: 1