Toon posts:

Waarde checkboxen in sessie plaatsen

Pagina: 1
Acties:
  • 67 views sinds 30-01-2008

Verwijderd

Topicstarter
Hoi allemaal,

Ik ben al een tijdje bezig met een script en het lukt me niet of het voor elkaar te krijgen.

Ik haal uit het database een periode (totaal 6 weken). Deze waarde(s) moeten in een sessie geplaatst worden zodat ik ze op een andere pagina kan gebruiken. Ik heb me rommel er even uitgehaald en alleen het gedeelte neergezet dat ook echt goed werkt.

Het script is een include van een registratie formulier.

<?php
/* Bestand: periode1.php
* Beschrijving: periode 1 checkbox
*/

include '../conn.php';
//---------------------------------------------------------------------------------------------------------------------

$select = "SELECT * FROM periode";
$queryperiode = mysql_query($select)or die(mysql_error());

while($list = mysql_fetch_object($queryperiode)){

print ' <input name=periode[] value=' . $list->id . ' type= "checkbox">' . $list->begindag . ' ' . $list->beginmaand .
' t/m ' . $list->einddag . ' ' . $list->eindmaand . '<br>';
}

?>

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Zou je [code] tags om je code willen zetten ?

Wat lukt er precies niet, wat heb je al geprobeerd ?
Ik zie bijv. in de geposte code geen session_start, heb je de php manual over sessie functies bekeken ?

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 14:11

DataGhost

iPL dev

Verwijderd schreef op maandag 29 mei 2006 @ 08:33:
Ik ben al een tijdje bezig met een script en het lukt me niet of het voor elkaar te krijgen.
Daarmee bedoel je ............? 'Ik heb overal gezocht en het lukt me nog steeds niet', 'Ik heb geen succes gehad met zoeken' of 'Ik heb geen zin te zoeken'? In elk fatsoenlijk php-boek staat namelijk gewoon uitgelegd hoe sessies werken, anders zou je kunnen kijken op PHP.net en nog een keertje.
Ik krijg ook het gevoel dat je topicstart incompleet is en/of dat je iets heel vreemds voor elkaar probeert te krijgen met je code, helaas is de informatie te beknopt om er een goede conclusie uit te trekken.

offtopic:
TheRookie :/

[ Voor 5% gewijzigd door DataGhost op 29-05-2006 08:39 ]


  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 14:38

hamsteg

Species 5618

Het is mij nog niet duidelijk wat je precies wilt. Gaat het om de MySQL query of hoe je de data in PHP bewaart?

In het laatste geval moet elke pagina beginnen met: session_start()

Kijk even op http://nl2.php.net/manual/en/ref.session.php voor de volledige uitleg.

Niet quoten, zorgvuldige reacties volgens de regels worden zo weggewerkt: *knip*, reactie op geknipte reactie.


Verwijderd

Topicstarter
Oke, bedankt voor je reactie..

Ik heb veel geprobeerd.. Ik ben net nieuw met php dus jammer genoeg leverde dit niet zoveel op.. Ik zal laten zien wat er het meest in de buurt kwam.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
/* Bestand:         periode1.php
 * Beschrijving:    periode 1 checkbox
 */
//---------------------------------------------------------------------------------------------------------------------
//Sessie starten
session_start(); 
 
 include '../conn.php';
//---------------------------------------------------------------------------------------------------------------------

$select = "SELECT * FROM periode";
$queryperiode = mysql_query($select)or die(mysql_error());

while($list = mysql_fetch_object($queryperiode)){

print '&nbsp;<input name=periode[] value=' . $list->id . ' type= "checkbox">' . $list->begindag . ' ' . $list->beginmaand .
 ' t/m ' . $list->einddag . ' ' . $list->eindmaand . '<br>';
}

$_SESSION['periode1'] = array("periode[]" => $_POST[' . $list->id . ']);

?>

[ Voor 11% gewijzigd door Verwijderd op 29-05-2006 08:45 ]


Verwijderd

Topicstarter
Ik plaats de gegevens eerst in een sessie. Nadat de gebruiker heeft gecontroleerd of zijn gegevens correct zijn plaats ik alles in de database.

[ Voor 3% gewijzigd door Verwijderd op 29-05-2006 08:44 ]


  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 14:38

hamsteg

Species 5618

Duidelijker als het in PHP.net staat, kan het niet:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();

// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['count'])) 
{
   $_SESSION['count'] = 0;
} 
else 
{
   $_SESSION['count']++;
}

printf("Na reload heb ik de waarde: %d\n", $_SESSION['count']);
die("Hierna wordt niets meer gedaan.");
?>


Als dat niet werkt is je instelling van PHP niet goed.

[ Voor 42% gewijzigd door hamsteg op 29-05-2006 08:49 ]

Niet quoten, zorgvuldige reacties volgens de regels worden zo weggewerkt: *knip*, reactie op geknipte reactie.


Verwijderd

Topicstarter
Ik heb jou code verwerkt in mijn script zoals ik denk dat het moest..

Het werkt wel, alleen telt hij telkens er 1 bij als waarde ipv dat hij de juiste value geeft.

code:
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
<?php
/* Bestand:         periode1.php
 * Beschrijving:    periode 1 checkbox
 */
//---------------------------------------------------------------------------------------------------------------------
//Sessie starten
session_start(); 
 
 include '../conn.php';
//---------------------------------------------------------------------------------------------------------------------

$select = "SELECT * FROM periode";
$queryperiode = mysql_query($select)or die(mysql_error());

while($list = mysql_fetch_object($queryperiode)){

print '&nbsp;<input name=periode[] value=' . $list->id . ' type= "checkbox">' . $list->begindag . ' ' . $list->beginmaand .
 ' t/m ' . $list->einddag . ' ' . $list->eindmaand . '<br>';
}

// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['periode[]'])) 
{
   $_SESSION['periode[]'] = 0;
} 
else 
{
   $_SESSION['periode[]']++;
}

printf("Na reload heb ik de waarde: %d\n", $_SESSION['periode[]']);
die("Hierna wordt niets meer gedaan.");
?>

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 14:38

hamsteg

Species 5618

Ik denk dat jij nog even wat meer moet lezen/leren in PHP.
Het werkt wel, alleen telt hij telkens er 1 bij als waarde ipv dat hij de juiste value geeft.
Dit was een simpele test om te kijken of PHP en sessies bij jou werken. Het programma doet niets anders dan bij elke reload kijken of de sessie variable bestaat (bovendste deel 'if') en als dat het geval is, er 1-tje bij-op tellen (de ++ bij de else). Het goede nieuws is dus dat sessies bij jouw werken; je had een technisch probleem gehad als je alleen maar 0-en bleef zien.

Uit het hoofd weet ik dat er security issues zijn bij gebruik van objecten (=arrray). Lees de eerder genoemde pagina even goed door. Het kan zijn dat je PHP nog moet configureren.

Omgekeerd moet je je afvragen of je zoveel data wilt vast leggen in sessies. waarom niet alleen twee data (begin - eind)? Sessies zijn niet helemaal waterdicht dus de data die je daar bewaart moet minimaal zijn en beschermd. Bij zo'n simpele query vind ik dat je die niet via sessies moet overdragen maar de query gewoon opnieuw uitvoeren in de pagina waar je hem nodig hebt.

Al met al denk ik dat je nog het e.e.a. te lezen en leren hebt. Succes !

Niet quoten, zorgvuldige reacties volgens de regels worden zo weggewerkt: *knip*, reactie op geknipte reactie.


Verwijderd

Topicstarter
Ik doe dit voor een stage opdracht. Aangezien mijn kennis nog laag is wordt er van mij verwacht binnen korte tijd dit op te leveren. Ik weet dat het niet de beste manier is, maar ik heb er voor gekozen om daarna (als ik alle tijd heb) php goed te bestuderen. Want met nog 3 weken te gaan begint het allemaal een beetje krap te worden en ik wil wel graag mijn stage halen.

De sessie wordt gemaakt omdat de gebruiker een bevestiging krijgt of de gegevens correct zijn. Zijn deze niet correct dan moeten deze gewijzigd kunnen worden. Bij een ja worden de gegevens in het database geplaatst en dan haal ik vanaf daar alles uit het database.

Ik weet dat het niet de handigste manier is, maar zo wil mijn opdrachtgever het graag zien jammer genoeg..

Volgens mij gaat het bij het aanmaken van de sessie fout en ik hoop dat mij iemand daarmee op weg kan helpen.

code:
1
$_SESSION['periode1'] = array("periode[]" => $_POST[' . $list->id . ']);

Verwijderd

Topicstarter
Over dat minimale sessie gedeelte.. Ik hoef de datum niet erin te verwerken. Value is de 'id'. Dus in de sessie komt alleen 1,2,3,4,5 of 6 te staan of meerdere van deze nummers..

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 14:38

hamsteg

Species 5618

Okay, omdat je zo smeekt .... 8)

Je moet drie dingen uit elkaar halen:
1. HTML
2. PHP
3. MySQL

PHP draait op een server en wordt uitgevoerd voordat de HTML pagina wordt getoond. MySQL wordt door PHP geactiveert en staat ook los van HTML. Jij mengt twee dingen in een (1) en dat kan niet zomaar. Eerst moet je de input afhandelen. De data uit deze input moet je vervolgens 'posten'. Door het posten kun je een nieuwe pagina actief maken en daardoor kun je PHP activeren.

Een duidelijke maar niet vaak gebruikte methode is het volgende:

    input.php --> posting.php --> resultaat.php

Maak in input.php een <FORM> aan. Lees hierover veschillende HTML handleidingen (edit: Lees: http://www.webcom.com/html/tutor/forms/), het zal iets worden van:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php include '../conn.php';?>
[i]HTML code voor een normale pagina tot en met <FORM METHOD=POST
ACTION="posting.php"> (dus <html>, <body> tags etc.)[/i]
<?php
$select = "SELECT * FROM periode";
$queryperiode = mysql_query($select)or die(mysql_error());

$Counter=0;
while($list = mysql_fetch_object($queryperiode)){

print '&nbsp;<input name=periode' . $Counter++ . ' value=' . $list->id . ' type= "checkbox">' . $list->begindag . ' ' . $list->beginmaand .
 ' t/m ' . $list->einddag . ' ' . $list->eindmaand . '<br>';
}
print '<input name=maxcount value='.$Count.' type=hidden>'
[i]</FORM> rest van HTML code[/i]

De hidden input bewaart het totaal aantal checkboxen. De tweede file, posting.php zal geen html code bevatten en zet de posting data om naar session data:
code:
1
2
3
4
5
6
7
8
<?php
session_start(); 
for( $Counter=0; $Counter < $_POST[ 'maxcount' ]; $Counter++)
{
  $_SESSION['periode1'][$Counter] = $_POST[periode' . $Counter . ']);
}
header("Location: resultaat.php");
?>


In resultaat kun je dan de resultaten laten zien, een botte oplossing is:
code:
1
2
3
4
5
<?php
session_start();
print_r( $_SESSION['periode1'] );
die("Klaar.");
?>

Alles uit het hoofd dus het zal niet meteen werken. Maar goed je moet er ook van leren.

Wat je vaak ziet is dat posting.php en resultaat.php in een file gebeuren. De nog ingewikkelder programmeurs doen alle drie stappen in 1 file (en dat heeft voordelen). Ik raad je aan om te beginnen met de drie stappen methode.

[ Voor 42% gewijzigd door hamsteg op 29-05-2006 10:12 ]

Niet quoten, zorgvuldige reacties volgens de regels worden zo weggewerkt: *knip*, reactie op geknipte reactie.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Sorry, maar ik ga hier een einde aan breien.

Om te beginnen is dit alles vrij eenvoudige stof die uitgebreid behandeld staat in diverse tutorialsites. Ik realiseer me dat je aangeeft geen PHP te kennen, en dat je het niet goed wil gaan totdat dit af is, maar dat is natuurlijk niet ons probleem. Wij verwachten van onze gebruikers een bepaald niveau aan basiskennis of op zijn minst eigen inzet en de wil om dingen uit te zoeken. Omdat bij jou beide punten missen doe ik je topic dicht. Je kan het misschien eens proberen op BeginnersWeb, daar zijn ze meer op eenvoudige problemen gericht. :)

Daarnaast ben je fout bezig als je een opdracht hebt aangenomen op je stage die je simpelweg niet op een haalbare manier af kan maken. Als je geen PHP kent maar wel iets op moet leveren binnen 3 weken, dan moet je het lef hebben om te zeggen dat het onhaalbaar is. Stage gaat niet alleen om het opdoen van technische kennis en het laten zien wat je in huis hebt, maar ook om het werken in een bedrijf. Managers willen vaak dingen die onmogelijk zijn, en dat mag je best laten horen. Zomaar ergens aan beginnen en later troep opleveren omdat je geen idee hebt waar je mee bezig bent wordt je ook niet in dank afgenomen, let maar op.

Succes met je stage verder. :)

'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.

Pagina: 1

Dit topic is gesloten.