Ga naar inhoud


Gelinkte Categorieen, probleem bij terugkeren naar


Gast

Aanbevolen berichten

Hallo allemaal,

 

ik heb een formulier gemaakt waar een hoofd- en een subcategorie op staan. De gegevens die hierin moeten staan komen uit een sql-database. Bij het openen van de pagina haal ik m.b.v. php de gegevens uit de database en vul de hoofdcategorie. De subcategorieën plaats ik dan met php in een javascript array.

 

Als de hoofdcategorie gewijzigd wordt een zelfgeschreven functie 'fillsubcategory' aangeroepen die ervoor zorgt dat (u raad het nooit) de lijst met subcategorieen gevuld word met de gegevens die bij de hoofdcategorie horen.

 

Om ervoor te zorgen dat er bij het openen van de pagina iets in de lijst met subcategorieen staat word de functie ook opgeroepen bij body onLoad.

 

Tot hier werk alles goed maar als ik nu het formulier post en wil daarna terug gaan één van de gegevens aan te passen. Dan blijven alle gegevens behouden behalve die van de subcategorie.

 

Weet iemand van jullie een oplossing voor mijn probleem? (en liefst zonder sessie want die heb ik zojuist omwille van zeer gegronde redenen verwijderd)

 

Ik acht de kans klein dat het zonder sessie lukt maar 'Wie niet vraagt; zal geen antwoord krijgen".

 

PS. Als jullie nog extra gegevens wensen mogen jullie dat natuurlijk altijd vragen.

Link naar reactie
Delen op andere sites


Je zegt dat je vanuit php een javascript array vult. Maar aangezien je "body onload" een client side javascript is, heb je daar geen server side data ter beschikking. Dat werkt dus alleen de eerste keer dat je de functie vanuit php hebt opgebouwd. Maar als je op een andere manier binnen komt in die functie (bijv. door terug te gaan voor aanpassingen) wordt de body onload weer uitgevooerd, en ik vermoed dat daar dan geen php data meer ter beschikking staan.

Link naar reactie
Delen op andere sites

Citaat:
Die javascript array zal dan wel leeg zijn ofzo.

Maar waarom maak je het niet volledig in php?


De javascript variabele is heel zeker niet leeg.

Waarom ik het niet helemaal in php maak (wat ik trouwens eerst geprobeerd heb) dat komt omdat php server-side is. Als je dan de hoofdcategorie aanpast en de subcategorie moet worden aangepast dan moet je de pagina herladen en doorsturen wat er in de hoofdcategorie staat (m.a.w. submit naar dezelfde pagina) als je dan de gegevens allemaal hebt ingevult en je wil ze doorsturen naar een zoekpagina dan wordt ofwel de nieuwe pagina niet geopend ofwel de gegevens niet correct doorgestuurd.

Met JS heb je dat probleem niet want JS is client-side en de pagina moet dus niet worden herladen.
Link naar reactie
Delen op andere sites

Citaat:
Je zegt dat je vanuit php een javascript array vult. Maar aangezien je "body onload" een client side javascript is, heb je daar geen server side data ter beschikking. Dat werkt dus alleen de eerste keer dat je de functie vanuit php hebt opgebouwd. Maar als je op een andere manier binnen komt in die functie (bijv. door terug te gaan voor aanpassingen) wordt de body onload weer uitgevooerd, en ik vermoed dat daar dan geen php data meer ter beschikking staan.


Dat je geen gebruik kunt maken van de php-gegevens dat begrijp ik, daarom plaats ik ze ook js-variabele. Bij het openen van de pagina word altijd eerst de php-code uitgevoerd, het maakt niet uit hoe de pagina geopend word (dat veronderstel ik in ieder geval toch).

Bij het openen worden alle gegevens met php uit een database gelezen (niet met een zelfgeschereven functie maar met gewonen php-code zodat deze steeds wordt uitgevoerd). Zowel category als subcategory en de bijhorende ID worden ingelezen deze zet ik dan in een array en die array zet ik dan in javascript variabele. Onderaan heb ik hiervan een deel code toegevoegd.

Dus de gegevens staan in een js-variabel (alle gegevens) en naar gelang van de hoofd category wordt de sub-category gevuld met gegevens uit de JS-array.






<!-- Scripts voor categorieën en subcategorieën -->
<script type="text/javascript">
<!--

<?php
mysql_select_db($database_blabla, $blabla);
$query_Categorieen_en_Subcategorieen = "SELECT categorie, subcategorie, subcategorieID FROM categorieen";
$Categorieen_en_Subcategorieen = mysql_query($query_Categorieen_en_Subcategorieen, $blabla) or die(mysql_error());

$categorie = array();

while ($row = mysql_fetch_array($Categorieen_en_Subcategorieen, MYSQL_ASSOC)) {
array_push ($categorie, $row['categorie']);
}

$javascript = 'jsCategorie = new Array(';
foreach($categorie as $jsvar)
{
$javascript .= '"' . $jsvar . '", ';
}
$javascript = substr($javascript, 0, -2) . ');';
echo $javascript;
Link naar reactie
Delen op andere sites

Ik moet zeggen dat het zonder voorbeeld wel erg abstract wordt allemaal. Ik ben in ieder geval inmiddels heel de draad kwijt <img src="/ubbthreads/images/graemlins/confused.gif" alt="" />

 

Zip die files waar het om gaat eens en plaats ze als bijlage hierbij, zodat ik snap wat je wilt en hoe het gestructureerd is.

Link naar reactie
Delen op andere sites

Ik heb twee pagina's mee doorgestuurd. 1 met het formulier en 1 voor de controle van dat formulier. Er wordt op meerdere pagina's gebruik gemaakt van de categorieen maar dit is het principe.

 

Als je het formulier invult en je submit en je wilt terug gaan omdat er iets fout is, dan worden de waarden van de subcategorieen niet bewaard. De rest blijft wel ingevuld.

 

Ik heb de pagina's een beetje bijgesnoeid zodat je niet moet liggen zoeken naar de regels die iets te maken zouden kunnen hebben met het probleem. Enkel de relevante gegevens zijn blijven staan (eerste pagina van 1000 naar 300 regels). Er zijn bijvoorbleeld veel meer velden dan de categorieen maar hiervan heb ik er maar 3 van laten staan.

 

Helemaal in het begin staat er include blablabla.php dat is de pagina met paswoord, naam database en dergelijke.

738508-toevoegen.zip

Link naar reactie
Delen op andere sites

Zoals Duwgati al aangaf is het probleem die body onload.

 

Al ga je een pagina terug zal die functie Starten toch

weer uitgevoerd worden is ook mijn mening en zodoende

de select weer vullen met de array.

 

De functie staat niet in verbinding met naam, bedrijf etc

dus die zullen wel behouden worden ,met een klikje op vorige.

 

Ik vraag me ook af van waarom niet helemaal in php.

AZ box

Link naar reactie
Delen op andere sites

Ik denk dat de functie starten niet uitgevoerd wordt en daardoor ook de lijsten met subcategorieen niet gevuld worden, want de hoofdcategorieen worden wel onthouden maar de subcategorieen blijven staan op hun initiele waarden "Selecteer een subcategorie".

 

Hoe dit komt of hoe ik het kan oplossen en of het wel zo is dat bodyonload niet werkt weet ik niet daarom hoop ik ook dat jullie wel ideeen hebben.

 

Waarom niet helemaal in php: als je alles in php maakt en je past de hoofdcateogrie aan dan moet de pagina herladen worden om de de lijst met subcategorieen aan te passen. Javascript kan de lijst met subcategorieen vullen met nieuwe waarden zonder dat de pagina herladen moet worden.

 

Ik heb het met php geprobeerd maar dat werkte niet echt goed. Ik submitte de waarde van de hoofdcatogie naar dezelfde pagina zodat de subcat gevuld kon worden met de juiste waarden. Als ik dan het formulier wou doorsturen naar een andere pagina bijvoorbeeld die om te controleren dan werden ofwel de subcategorieen niet doorgestuurd ofwel de pagina niet geopend.

 

Kort samengevat: 1 formulier naar 2 verschillende pagina's sturen werkt niet (bij mij).

Link naar reactie
Delen op andere sites

Ok dan moet je valideren voordat hij ge-submid wordt.

 

Je formulier heeft de name FORMULIER

 

Maak eens van de submit button

Code:
 <input type="submit" value="Verzenden" onClick="valideer()" /> 

 

neem een javascript op als deze in je toevoegen.php

Code:
 <script language="javascript">function valideer(){    if(document.FORMULIER.naam.value==""){        window.alert("U heeft geen naam opgegeven");        return false;    }    if(document.FORMULIER.bedrijf.value==""){        window.alert("U heeft geen bedrijf opgegeven");        return false;    }    if(document.FORMULIER.Categorie3.value=="Selecteer een categorie"){        window.alert("U heeft geen keuze gemaakt");        return false;    }    document.FORMULIER.submit();}</script> 

 

Ik denk dat je dan wel even nog een value moet geven aan

de selecteer categorie zoals

Code:
 			<select name="Categorie3" id="mnuCategorie3" onchange='fillSubcategorieen3();'>				<option value="Selecteer een categorie" selected="selected">Selecteer een categorie</option> 

 

Als het goed is valideert hij zo eerst of er iets opgegeven is en daarna komt die submit door

document.FORMULIER.submit();

 

Je kan dan de validatie prut uit de cntrole/toevoegen.php halen en meteen alles laten toevoegen in je database.

AZ box

Link naar reactie
Delen op andere sites

Ik vrees dat de oplossing van Pinocchio idd de enige mogelijkheid is, maar het is de vraag of dat is wat je wilt. Je kunt zo namelijk het formulier wel valideren, maar als de bezoeker op een bepaald moment (op een volgende pagina)besluit om terug te gaan om toch nog iets te veranderen, ben je de subcategoriën toch weer kwijt.

Anderzijds, ik zou geen oplossing kennen om je probleem te tackelen, tenzij je toch zou besluiten om sessions te gaan gebruiken.

Link naar reactie
Delen op andere sites

ik denk niet dat ik veel met het antwoord ben. Want het is niet alleen zo dat er gecontroleerd wordt want er zijn ook pagina's waar je de subcategorie selecteerd om een opzoeking te doen. En neem nu dat de bezoeker de gemeente die hij/zij heeft ingegeven wil aanpassen en hij/zij gaat terug dan zal hij/zij opnieuw de subcategorie moeten selecteren.

 

Als je een sesion toevoegd aan de pagina werd er geen enkel veld meer onthouden als men op back klikt. Dus je zou alle gegevens een initiele waarden moeten geven die gelijk is aan de sesievariabele als deze bestaat ( zoals bijvoorbeeld: <?php if (isset($_SESSION['s_bedrijf'])){echo $_SESSION['s_bedrijf'];}?> ). En dan krijg ik het probleem dat als iemand vanaf een andere pagina bijvoorbeeld op de pagina toevoegen komt dat er al vanalles is ingevuld. Er zou enkel iets mogen instaan als je op vorige klikte. (Spijtig genoeg, ik had het eerst met een sesion gedaan maar bij opdrachtgever/baas die wou dat het enkel kon als je op vorige klikte)

 

Ik weet dat ik dan de variabele voor die pagina kan veranderen maar er zijn meer pagina's waarbij dit kan gebeuren en dan zijn er nog pagina's die dezelfde zoekpagina aanspreken waar ik er dat dus al een extra van zou moeten maken omdat er twee verschillende namen zouden zijn. Dan zou ik bijvoorbeeld bij de simpel zoeken het veld naam de waarde naam geven maar dan zou bij gedetaileerd zoeken het al naam_2 moeten noemen terwijl ze alletwee gebruikt worden om in dezelfde kolom te zoeken.

 

Wat niet erg zou zijn als het voor mijn eigen was maar het is voor mijn stage en de stage dient tegelijkertijd ook als eindwerk dus kan het maar beter proper zijn (1 van de doelstellingen was het aantal pagina's zo klein mogelijk te houden)

 

Het is trouwens niet zo dat ik dit allemaal al zou moeten weten want webdesing is geen hoofdvak. Ik studeer graduaat elektriciteit elektronica optie ICT en we krijgen ook 1 uur webdesing. We zijn dit jaar met zoveel studenten dat het onmogelijk was om allemaal netwerken (een van de hoofdvakken is netwerken) te gaan leggen of iets in de zuivere electronica te doen. Het is dan ook nog is zo dat ik nog geen auto heb (wel een rijbewijs) dus grote afstander waren niet echt aangewezen. Ik had trouwens nog nooit met php en javascript gewerkt (we kregen enkel html) en heb alles in de vakantie op men eigen geleerd via tutorials en met behulp van forums.

 

<img src="/ubbthreads/images/graemlins/blush.gif" alt="" /> Vergeef me a.u.b voor de foute zinssturcturen en spelfouten die ik typ, ik ben geen taalvirtuoos. Geef mij maar wiskunde of andere dingen waar meer logica achter zit.

Link naar reactie
Delen op andere sites

Goed, ik kan er inderdaad niets van breien wat je zegt maar

als de opdracht zo was dan zij het zo <img src="/ubbthreads/images/graemlins/wink.gif" alt="" />

 

Ik heb mezelf meer aangeleerd om liever een extra blok

code te gebruiken zodat ik later als ik iets moet aanpassen

ook weer wat sneller begrijp wat toen de bedoeling was.

 

Ik denk dat het minialisme wel op het wiskundig vlak

zal liggen om je te dwingen tot in het uiterste gestructueerd

te laten denken neem ik maar uit dit verhaal aan.

 

John

AZ box

Link naar reactie
Delen op andere sites

Maak een account aan of log in om te reageren

Je moet een lid zijn om een reactie te kunnen achterlaten

Account aanmaken

Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!

Registreer een nieuwe account

Inloggen

Heb je reeds een account? Log hier in.

Nu inloggen
  • Wie is er online   0 leden

    • Er zijn geen geregistreerde gebruikers deze pagina aan het bekijken
×
×
  • Nieuwe aanmaken...