arrays en arrays
zoals eerder ben ik bezig met arrays om voorlopig een formcontrole te maken.
Dit gaat geweldig. Het gaat als volgt:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if(isset($_POST['register'])) {
$checkarray = "reg_naam" => "Uw naam",
"reg_username" => "Gebruikersnaam",
"reg_password" => "Wachtwoord");
if(checkForm($checkarray)=="") {
header(volgende pagina);
} else {
echo checkForm($checkarray);
header(vorige pagina);
}
}
//Checkform ziet er ongeveer als volgt uit
function checkForm($value) {
$error = array();
foreach($value as $formkey => $description) {
if($_POST[$formkey]==""){
$error[] = "<li>U heeft " . $description . " niet ingeuld!</li>";
}
}
if(empty($error)) {
return "";
} else {
return "<ul> . implode($error) . "</ul>";
}
$checkarray = "reg_naam" => "Uw naam",
"reg_username" => "Gebruikersnaam",
"reg_password" => "Wachtwoord");
if(checkForm($checkarray)=="") {
header(volgende pagina);
} else {
echo checkForm($checkarray);
header(vorige pagina);
}
}
//Checkform ziet er ongeveer als volgt uit
function checkForm($value) {
$error = array();
foreach($value as $formkey => $description) {
if($_POST[$formkey]==""){
$error[] = "<li>U heeft " . $description . " niet ingeuld!</li>";
}
}
if(empty($error)) {
return "";
} else {
return "<ul> . implode($error) . "</ul>";
}
Nou ben ik niet helemaal in de arrays maar het is toch een hele verbetering sins mijn eerste opzet.
Nou zit ik met het volgende:
Ik wil naast omschrijving van de formkey ook een waarde meegeven dat de formkey MOET zijn ingevuld.
Zegmaar 1 of 0
en vervolgens in de functie controleren of $must == 1 dan controleren en zonodig error geven
en 0 gewoon doorgaan zonder error
Nou probeerde ik
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
$checkarray("reg_naam" => "Uw naam" => 0,
"reg_username" => "Gebruikersnaam" => 1,
"reg_password" => "Wachtwoord" => 1);
//End de functie
function checkForm($value) {
foreach($value as $formkey => $description => $must) {
...
}
...
}
"reg_username" => "Gebruikersnaam" => 1,
"reg_password" => "Wachtwoord" => 1);
//End de functie
function checkForm($value) {
foreach($value as $formkey => $description => $must) {
...
}
...
}
Nou zullen sommige wel met een glimlach zitten dat het niet werkt, Nee klopt! :-$
Ik heb gelezen dat ik zegmaar, array in array moet maken.
Zit ik an nog steeds met
Of zie ik dit nou verkeerd?
Graag een klein duwtje de goede richting op :)
Code (php)
1
2
3
4
5
2
3
4
5
$checkarray = array(
"reg_naam" => array("description"=>"Uw naam", "required"=> 0),
"reg_username" => array("description"=>"Gebruikersnaam", "required"=> 1),
"reg_password" => array("description"=>"Wachtwoord" "required"=> 1)
);
"reg_naam" => array("description"=>"Uw naam", "required"=> 0),
"reg_username" => array("description"=>"Gebruikersnaam", "required"=> 1),
"reg_password" => array("description"=>"Wachtwoord" "required"=> 1)
);
en dan kan je het zo ophalen
Code (php)
1
2
2
echo $checkarray["reg_naam"]["description"];
echo $checkarray["reg_naam"]["required"];
echo $checkarray["reg_naam"]["required"];
en een foreach loop
Code (php)
1
2
3
4
5
2
3
4
5
foreach($checkarray as $key=>$subarray){
if($subarray['required']==1){
echo $subarray['description']." is required"!
}
}
if($subarray['required']==1){
echo $subarray['description']." is required"!
}
}
Gewijzigd op 09/01/2013 09:20:26 door No One
Dat gaat nooit werken, dan krijg je een headers already sent error. Zie: http://php.net/manual/en/function.header.php
Ook is het zeer lelijk om eerst op checkForm te checken, en daarna te echo'n. Nu ga je twee keer die functie aanroepen, dat kan zeker beter. Bijvoorbeeld
Code (php)
1
2
3
4
2
3
4
foreach($array as $formkey => $nextarray){
foreach($nextarray as $description => $required){
if($required == 1) {
echo $formkey "->" $descriptiong " = " $required
foreach($nextarray as $description => $required){
if($required == 1) {
echo $formkey "->" $descriptiong " = " $required
sorry dat ik niet alles opnieuw schrijf, hopelijk snap je wat ik bedoel
ah..heb ik net in mijn vorige post er bij geplakt ;)
Ik gebruik eigenlijk meta tag om te redirecten, omdat ik juist met het probleem headers already send zit..
Misschien weet je daar een betere oplossing voor? Zou ook toppie zijn :)
No One op 09/01/2013 09:21:27:
ah..heb ik net in mijn vorige post er bij geplakt ;)
Ow haha sorry :P Ik gaat het gelijk ff testen, misschien dat ik de site nog kan fixen voordat ik straks moet gaan klussen :P thankss!!
Gewijzigd op 09/01/2013 09:23:03 door Dennis WhoCares
Dennis WhoCares op 09/01/2013 09:21:39:
Ik gebruik eigenlijk meta tag om te redirecten, omdat ik juist met het probleem headers already send zit..
Misschien weet je daar een betere oplossing voor? Zou ook toppie zijn :)
Misschien weet je daar een betere oplossing voor? Zou ook toppie zijn :)
Dat is heel eenvoudig. Strikt je php logica en je html scheiden. Gewoon eerst alles wat php betreft afhandelen en pas als alles gedaan is je eerste html echoen. Kom je dan op een punt in je php afhandeling dat je moet redirecten, dan kan je dat zonder problemen doen.
@Erwin, maar mijn php afhandeling gebeurt binnenin mn html layout. Ik wil niet dat mn layout wordt weg gelaten bij een foutmelding.
Dan gebruik je de verkeerde structuur. Wat heeft die layout nu te maken met je foutmelding? Wat je op het scherm dumpt en hoe dat eruitziet zijn twee verschillende dingen. Dat je de inhoud op 1 plek bepaalt en de layout op een andere maakt natuurlijk niets uit.
Ik doe zegmaar mijn template parsen uit een index.html met een tag {content}
waarbij de {content} vervangen wordt door mijn pagina->getOuput($pagina) en aanhangende functies van pagina
en tegelijkertijd
echo $finalOutput
Als je een template gebruikt is het helemaal bizar om eerlijk te zijn, want dat betekent al dat je php en html gescheiden hebt. Oftewel, je kan dus eerst gewoon alle content voor die pagina bepalen en op het moment dat alles is afgehandeld laad je het template en voeg je alle content in. Eventuele redirects indien er iets niet goed is weet je dan al voor je dat template laadt en kan je dus uitvoeren voor je een letter html hebt gedumpt naar de browser.
http://www.phphulp.nl/php/tutorial/overig/recursieve-functies-in-php/532/
In je functie dus kijken of een deel van je array een array is en dan weer dezelfde functie uitvoeren.. Aangezien je een vaste structuur hebt in je arrays kan dit een simpele oplossing zijn.
is_array()
In je functie dus kijken of een deel van je array een array is en dan weer dezelfde functie uitvoeren.. Aangezien je een vaste structuur hebt in je arrays kan dit een simpele oplossing zijn.
is_array()
Gewijzigd op 09/01/2013 10:02:08 door Mebus Hackintosh
Erwin H op 09/01/2013 09:55:29:
Als je een template gebruikt is het helemaal bizar om eerlijk te zijn, want dat betekent al dat je php en html gescheiden hebt. Oftewel, je kan dus eerst gewoon alle content voor die pagina bepalen en op het moment dat alles is afgehandeld laad je het template en voeg je alle content in. Eventuele redirects indien er iets niet goed is weet je dan al voor je dat template laadt en kan je dus uitvoeren voor je een letter html hebt gedumpt naar de browser.
Dat doe ik sinds een tijdje ook wel, eerlijk gezegt niet meer geprobeerd om met header te werken.
Maar mn foutafhandeling bevat ook html, maar header komt natuurlijk VOOR de output
Ik doe eerst template parsen naar string
Mn pagina resultate uit database of ook parsen uit bestand naar string em vervolgens
De template en pagina samenvoegen
Ik zal t vd week eens proberen bedankt voor de feedback