[PHP] Lijst maken in if statement

Pagina: 1
Acties:
  • 180 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Een beginnersvraag maar ik kan het gewoonweg niet vinden in de boeken en tutorials.

Ik wil graag een simpel systeem dat controleert of een hele lijst van variabelen wel ingevuld zijn. Het is klaarblijkelijk niet mogelijk op de volgende manier omdat comma's niet toegestaan zijn. Ik denk dat er een array gebouwd moet worden maar ik krijg die twee niet met elkaar geintegreerd. Dus ben ik weer terug bij af. Ik zal de lompste code hier plaatsen omdat dit het meest duidelijk te volgen is. Het is dus de bedoeling dat lege velden en velden met louter spaties niet toegestaan zijn. Wanneer dit lukt ga ik alles verder verfijnen, maar er moet eerst een basis zijn.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function gegevenstesten($ww,$email,$telnr,$adres,$postcode,$plaatsnaam) { 
$postA = strpos($ww,$telnr,$adres,$postcode,$plaatsnaam, "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","1","2","3","4","5","6","7","8","9","0");
if ($ww,$email,$telnr,$adres,$postcode,$plaatsnaam === false) return false; 
return true;
}
$submitted = isset($_POST['submit']);
$validated = false;
if ($submitted) {
$ww = '$_POST[ww]',
$telnr = '$_POST[telnr]',
$adres = '$_POST[adres]',
$postcode = '$_POST[postcode]',
$plaatsnaam = '$_POST[plaatsnaam]',
$validated = gegevenstesten($ww,$email,$telnr,$adres,$postcode,$plaatsnaam);
echo "Lege velden zijn niet toegestaan";

else { }

Acties:
  • 0 Henk 'm!

  • Tofu
  • Registratie: Maart 2003
  • Laatst online: 05-10-2024
code:
1
if (isset($_POST['adres']) && isset($_POST['naam'])) {

Voor postcode kan je isnumeric gebruiken

[ Voor 43% gewijzigd door Tofu op 11-10-2006 14:18 ]


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Ik denk dat jij eerder eens moet gaan kijken naar de syntax van strpos ( http://be2.php.net/strpos )

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
if (str_replace($ww, ' ', '') == '' || str_replace($email, ' ', '') == '' || ... ) return false;

dit moet wel werken. is misschien niet zo heel mooi

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 07-09 11:44

Bergen

Spellingscontroleur

Leren inspringen is ook geen overbodige luxe! Of komt dat door 't knippen en plakken? Enfin, je wilt dus testen of alle velden die je aan de functie 'gegevenstesten' doorgeeft zijn ingevuld?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    function gegevenstesten($ww,$email,$telnr,$adres,$postcode,$plaatsnaam)
    {
        // We gaan er vanuit dat alles goed is ingevuld

        $ok = true;
        
        // Nu gaan we alles bijlangs. Als blijkt dat iets
        // niet ingevuld is, wordt ok false.

        $vars = array('ww', 'email', 'telnr', 'adres', 'postcode', 'plaatsnaam');
        foreach($vars as $var) {
            $$var = trim($$var); // spaties eraf halen
            if (isempty($$var)) {
                $ok = false; // als hij leeg is, is 't niet meer ok
            }
        }
        
        return $ok;
    }
?>

Acties:
  • 0 Henk 'm!

  • Zyppora
  • Registratie: December 2005
  • Laatst online: 12-09 10:59

Zyppora

155/50 Warlock

martijnve schreef op woensdag 11 oktober 2006 @ 14:24:
if (str_replace($ww, ' ', '') == '' || str_replace($email, ' ', '') == '' || ... ) return false;

dit moet wel werken. is misschien niet zo heel mooi
Da's inderdaad zo lelijk als de nacht. Moet je maar eens proberen zowel voor- als achternaam in te vullen, de spatie in het midden wordt ook weggehaald.

Als je niet 'alleen spaties' wilt accepteren, zou ik voor trim($name) gaan. Deze functie haalt alle spaties voor en achteraan in de string weg (dus alle spaties als de string uit alleen maar spaties bestaat).

@TS:

Probeer eens iets als:

PHP:
1
2
3
4
if ($submitted) {
  $ww = trim($_POST['ww']);
  $telnr = trim($_POST['telnr']);
}


Let er ook op dat je user input ALTIJD checkt op validiteit ivm code/sql/etc injection.

Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290


Acties:
  • 0 Henk 'm!

  • Tofu
  • Registratie: Maart 2003
  • Laatst online: 05-10-2024
[quote]Bergen schreef op woensdag 11 oktober 2006 @ 14:28:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    function gegevenstesten($ww,$email,$telnr,$adres,$postcode,$plaatsnaam)
    {
        
        // Nu gaan we alles bijlangs. Als blijkt dat iets
        // niet ingevuld is, wordt ok false.

        $vars = array('ww', 'email', 'telnr', 'adres', 'postcode', 'plaatsnaam');
        foreach($vars as $var) {
            $$var = trim($$var); // spaties eraf halen
            if (isempty($$var)) {
                return false;
            }
        }
        
        return true;
    }
?>
Iets mooier dan ;)

Acties:
  • 0 Henk 'm!

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 07-09 11:44

Bergen

Spellingscontroleur

Jah idd da's nog beter. :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Tofu > Bedankt, dat stuk werkt in ieder geval. Bedankt voor de postcode tip. Die kan ik waarschijnlijk ook bij telnr gebruiken.

Snake > Dat denk ik ook, ik probeer dingen uit met de info die ik kan vinden. Ik kan alles regel voor regel neerzetten maar dan wordt de code gigantisch lang.

Marthijnve > Bedankt, ik moet er nog even goed naar kijken.

Bergen > Dat inspringen komt inderdaad door het copy & pasten. Je code lijkt er op wat ik nodig heb en waar het niet lukte met de array combi. Ik ga het meteen proberen! Heel erg bedankt voor de moeite.

Acties:
  • 0 Henk 'm!

Verwijderd

Lijkt het de TS niet makkelijker en gebruiksvriendelijker om naast deze check ook een check in Javascript te bouwen??
JavaScript:
1
2
3
4
5
6
7
8
9
<script>
function confirmSubmit() {
   /* check hier of alle variabelen zijn gezet, genoeg over te vinden op internet */

/* indien goed */
 return true;
}
</script>
<input type="submit" onclick="return confirmSubmit()">


Voordeel hiervan is dat de gebruiker direct te horen krijgt dat zekere velden verplicht zijn, en hem tevens direct op attenderen welke velden moeten worden ingevuld, je kan zelfs ook nog checken of een e-mail adres wel in de vorm x@xx.xx is met een regex.

Het is uiteraard ook zeer netjes om dit in php alsnog een keer te doen voordat je een irri "column x cannot be 0" krijgt van je sql server

Acties:
  • 0 Henk 'm!

Verwijderd

tofu schreef op woensdag 11 oktober 2006 @ 14:31:
[quote]Bergen schreef op woensdag 11 oktober 2006 @ 14:28:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    function gegevenstesten($ww,$email,$telnr,$adres,$postcode,$plaatsnaam)
    {
        
        // Nu gaan we alles bijlangs. Als blijkt dat iets
        // niet ingevuld is, wordt ok false.

        $vars = array('ww', 'email', 'telnr', 'adres', 'postcode', 'plaatsnaam');
        foreach($vars as $var) {
            $$var = trim($$var); // spaties eraf halen
            if (isempty($$var)) {
                return false;
            }
        }
        
        return true;
    }
?>
Iets mooier dan ;)
En wat als hij bij het volgende formulier geen 'email' gaat gebruiken, of dat deze dit keer niet verplicht is??

Beter is:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    function gegevenstesten($var)
    {
        
        foreach($var as $k -> $v) {
            $v = trim($v); // spaties eraf halen
            if (isempty($v)) {
                return false;
            }
        }
        
        return true;
    }
$ww = '$_POST[ww]',
$telnr = '$_POST[telnr]',
$adres = '$_POST[adres]',
$postcode = '$_POST[postcode]',
$plaatsnaam = '$_POST[plaatsnaam]',
$mandatory = array($ww,$email, $telnr, $adres, $postcode,$plaatsnaam);
$validated = gegevenstesten($mandatory); 

?>


Herbruikbaar, in de variabele $mandatory geef je aan welke velden gecheckt gaan worden.

Als ie niet klopt zit het in de for each btw, ff kwijt hoe dat precies zit.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het bijna werkend, een JS voor de gebruikers is idd een goed idee. Die zal ik eens gaan toevoegen. :)

Acties:
  • 0 Henk 'm!

Verwijderd

Zit te denken, je kan natuurlijk ook dit doen:

PHP:
1
2
3
4
5
6
7
8
9
$ww = '$_POST[ww]',
$telnr = '$_POST[telnr]',
$adres = '$_POST[adres]',
$postcode = '$_POST[postcode]',
$plaatsnaam = '$_POST[plaatsnaam]',
$mandatory = array(trim($ww),trim($email), trim($telnr), trim($adres), trim($postcode),trim($plaatsnaam));
if(array_search("", $mandatory)) {
  $validated = true;
}

Vind hier een functie voor schrijven beetje overbodig ;)

(ps. sorry voor de 3 opeenvolgende posts :) EDIT: ohnee valt mee)

Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
Verwijderd schreef op woensdag 11 oktober 2006 @ 15:16:
En wat als hij bij het volgende formulier geen 'email' gaat gebruiken, of dat deze dit keer niet verplicht is??
Nog handiger (als we dan toch naar optimalisatie gaan) is de $_POST[]-variabelen meteen in je form al als array-elementen te setten. Nadeel is dat je ze über-moeilijk nog met javascript kan benaderen:
HTML:
1
2
<input name="formdata[www]" ...>
<input name="formdata[email]" ...>
In combi met het 2de script van B.Toet ijzersterk! :*)

Acties:
  • 0 Henk 'm!

Verwijderd

moozzuzz schreef op woensdag 11 oktober 2006 @ 15:45:
[...]

Nog handiger (als we dan toch naar optimalisatie gaan) is de $_POST[]-variabelen meteen in je form al als array-elementen te setten. Nadeel is dat je ze über-moeilijk nog met javascript kan benaderen:
HTML:
1
2
<input name="formdata[www]" ...>
<input name="formdata[email]" ...>
In combi met het 2de script van B.Toet ijzersterk! :*)
Samen komen we er wel :*)

mooie toevoeging inderdaad ;)

edit: Dat van Javascript is niet helemaal waar, je kan ze namelijk ook nog een makkelijke ID geven om direct aan te kunnen spreken:
HTML:
1
<input type="text" name="formdata[www]" id="www" />

[ Voor 16% gewijzigd door Verwijderd op 11-10-2006 15:57 ]


Acties:
  • 0 Henk 'm!

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
De functie isempty bestaat helemaal niet, of ben ik nou scheel ?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
$ww = '$_POST[ww]'

Wat wil iemand daar mee doen eigenlijk?

En mcdronkz, even zoeken naar 'empty' op php.net levert al snel de empty() functie op. isset() of empty() kun je gebruiken. Ik geef zelf de voorkeur aan empty() of !empty().

Acties:
  • 0 Henk 'm!

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
g00fy schreef op woensdag 11 oktober 2006 @ 16:09:
$ww = '$_POST[ww]'

Wat wil iemand daar mee doen eigenlijk?

En mcdronkz, even zoeken naar 'empty' op php.net levert al snel de empty() functie op. isset() of empty() kun je gebruiken. Ik geef zelf de voorkeur aan empty() of !empty().
I know, maar er werd een stuk code gedumpt waarin de functie isempty() gebruitk werd, dit gaat natuurlijk niet werken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 11 oktober 2006 @ 15:21:
Zit te denken, je kan natuurlijk ook dit doen:

PHP:
1
2
3
4
5
6
7
8
9
$ww = '$_POST[ww]',
$telnr = '$_POST[telnr]',
$adres = '$_POST[adres]',
$postcode = '$_POST[postcode]',
$plaatsnaam = '$_POST[plaatsnaam]',
$mandatory = array(trim($ww),trim($email), trim($telnr), trim($adres), trim($postcode),trim($plaatsnaam));
if(array_search("", $mandatory)) {
  $validated = true;
}

Vind hier een functie voor schrijven beetje overbodig ;)

(ps. sorry voor de 3 opeenvolgende posts :) EDIT: ohnee valt mee)
Je hebt denk ik wel gelijk, een functie is te veel van het goede. Ik heb het stukje code van je gebruikt maar het werkt niet helemaal, $validated blijft altijd false.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$validated = false;
$ww = '$_POST[ww]'; 
$telnr = '$_POST[telnr]'; 
$adres = '$_POST[adres]'; 
$postcode = '$_POST[postcode]'; 
$plaatsnaam = '$_POST[plaatsnaam]';
$mandatory = array(trim($ww),trim($email),trim($telnr),trim($adres),trim($postcode),trim($plaatsnaam)); 
if(array_search("", $mandatory)) { 
$validated = true; 
} 


if ($validated = false) echo "blah blah";
else { }


Ik heb trouwens de comma's in punt comma's veranderd. Dat laatste stukje is een beetje overbodig omdat je aan één if / else voldoende hebt, maar het was puur om te testen.

[ Voor 4% gewijzigd door Verwijderd op 11-10-2006 19:10 ]


Acties:
  • 0 Henk 'm!

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 07-09 11:44

Bergen

Spellingscontroleur

mcdronkz schreef op woensdag 11 oktober 2006 @ 16:25:
[...]


I know, maar er werd een stuk code gedumpt waarin de functie isempty() gebruitk werd, dit gaat natuurlijk niet werken.
mja ik had het zo even uit m'n hoofd ingetypt... niet getest ofzo. Als iemand even naar http://php.net/isempty gaat krijg je meteen al een link naar de juiste functie ('empty') te zien.

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

tofu schreef op woensdag 11 oktober 2006 @ 14:16:
[..]
Voor postcode kan je isnumeric gebruiken
Voor Belgie wel ja, die bestaat uit 4 nummerieke karaters. in Nederland is het 4 nummeriek en 2 alfa nummeriek. Meestal gescheiden door een spatie, maar wordt niet altijd gebruikt ;)

[ Voor 11% gewijzigd door RaZ op 12-10-2006 00:48 ]

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 11 oktober 2006 @ 19:08:
[...]


Je hebt denk ik wel gelijk, een functie is te veel van het goede. Ik heb het stukje code van je gebruikt maar het werkt niet helemaal, $validated blijft altijd false.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$validated = false;
$ww = '$_POST[ww]'; 
$telnr = '$_POST[telnr]'; 
$adres = '$_POST[adres]'; 
$postcode = '$_POST[postcode]'; 
$plaatsnaam = '$_POST[plaatsnaam]';
$mandatory = array(trim($ww),trim($email),trim($telnr),trim($adres),trim($postcode),trim($plaatsnaam)); 
if(array_search("", $mandatory)) { 
$validated = true; 
} 


if ($validated = false) echo "blah blah";
else { }


Ik heb trouwens de comma's in punt comma's veranderd. Dat laatste stukje is een beetje overbodig omdat je aan één if / else voldoende hebt, maar het was puur om te testen.
doe eens:

PHP:
1
die(print_r($mandatory));


vlak na het zetten van de array (dus op regel 7 van mijn code), dan zie je wat er in de array zit.... want normaal gesproken zet je de lokale variabelen als:

PHP:
1
2
3
4
5
$var = $_POST['var'];

// en niet

$var = '$_POST[var]';

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Stom natuurlijk.. de ' stonden inderdaad niet goed in $_POST. Nu werkt het met één vreemd verschil en ik snap er echt geen donder van..

Wanneer het veld $ww leeg is wordt dit gewoon opgeslaan. Wanneer $ww leeg is én andere velden zijn leeg wordt dit ook gewoon opgeslaan. Echter wanneer $ww gevuld is en de andere velden leeg, dan krijg je de error dat velden niet leeg mogen zijn..

De code is exact zoals in je quote maar dan dus met de ' ' op de juist plek. die(print_r($mandatory)); levert nu dan ook het goede resultaat op, ook bij het $ww.

[ Voor 8% gewijzigd door Verwijderd op 13-10-2006 00:19 ]


Acties:
  • 0 Henk 'm!

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Ik snap niet waarom jullie allemaal je $_POST variabelen kopiëeren naar andere variabelen?

Wat heb je daar nou aan, buiten dat het onnodig extra geheugen kost?

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


Acties:
  • 0 Henk 'm!

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

crisp

Devver

Pixelated

Verwijderd schreef op woensdag 11 oktober 2006 @ 15:56:
[...]
edit: Dat van Javascript is niet helemaal waar, je kan ze namelijk ook nog een makkelijke ID geven om direct aan te kunnen spreken:
het kan nog simpeler:
JavaScript:
1
var field = formref.elements['formdata[www]'];

;)

[ Voor 3% gewijzigd door crisp op 13-10-2006 09:21 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

crisp schreef op vrijdag 13 oktober 2006 @ 09:21:
[...]

het kan nog simpeler:
JavaScript:
1
var field = formref.elements['formdata[www]'];

;)
Ik reageerde daar op een post dat het aanspreken lastiger wordt door het gebruik van de blokhaken... mijn post haalde alleen even aan dat we altijd nog 'ID' kunnen gebruiken!

En voor de TS.... die code van mij klopt even niet zie ik ;)

in de array_search "if" statement moet nog een (!) geplaatst worden:

if(!array_search...

we willen namelijk pas validated is "true" zetten als "" niet gevonden wordt in de array...

Acties:
  • 0 Henk 'm!

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

crisp

Devver

Pixelated

Verwijderd schreef op vrijdag 13 oktober 2006 @ 09:55:
[...]


Ik reageerde daar op een post dat het aanspreken lastiger wordt door het gebruik van de blokhaken... mijn post haalde alleen even aan dat we altijd nog 'ID' kunnen gebruiken!
De manier die ik illustreer is imo de enige juiste manier en behoeft geen extra ID's; de 'dot-notatie' is voor luie programmeurs en is zwaar beperkend. Combineer dat met het feit dat je bij het gebruik van ID's altijd dure lookups moet doen terwijl de form-elements collectie ready-made is :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
De ranzigheid die sommigen hier vertonen is echt erg..
Variable variables, waarom?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function gegevenstesten($vars)
{
  foreach($vars as $var) 
  {
    if (isempty($_POST[$var]))
      return false;
  }
  return true;
}

$v = array('ww', 'email', 'telnr', 'adres', 'postcode', 'plaatsnaam');
gegevenstesten($v);
?>

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
B.Toet > Dat had ik al in de gaten dus had ik de variabelen omgedraaid. Echter het werkte daarna nog steeds niet. Het probleem zat in het $ww, deze mocht klaarblijkelijk wel leeg zijn om een of andere reden..

Grijze Vos > Thanks voor de hulp. Je code is nog een beetje abracadabra voor mij, maar ik doe mijn best hem "te ontleden" zodat ik ook weet wat ik doe en niet zomaar iets klakkenloos overneem.

Ben zelf uiteindelijk maar weer gaan klussen met de boeken erbij en ben tot dit gekomen:
PHP:
1
2
3
$lijst = array($_POST['ww'],$_POST['adres'],$_POST['postcode'],$_POST['plaatsnaam'],$_POST['email'],$_POST['telnr']);
for ($a=0; $a<6; $a++) { $len[$a] = (strlen(trim($lijst[$a])));
if ($len[$a] <= 3 ) { echo "Alle velden dienen ingevuld te zijn."; exit();} else { //etc }}


Het werkt 100% :) en het is een vooruitgang op de eerste code qua regels en variabelen gebruik. Zal vast nog netter kunnen maar ik heb mijn best gedaan :)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Mijn code is abacadabra, maar je begrijpt wel het 4x zo ingewikkelde goedje wat je zelf neer hebt gezet? En je gebruikt minder regels, maar zet nog zwaar onleesbare code neer, als je dat uitspreidt zoals het hoort dan zit je ook op 10 regels. ;)

Mijn code, geannotteerd dan maar:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function gegevenstesten($vars)
{ // test of alle $_POST waarden met keys in het array $vars niet leeg zijn
  foreach($vars as $var) 
  { // loop over elke waarde van het $vars array
    if (isempty($_POST[$var]))
    { // $var is de huidige waarde uit het array $vars wat is meegegeven
      // isempty() is de juiste functie om te controleren of een waarde leeg is of niet
      return false;
    }
  }
  // alle waarden waren gevuld, return dus true
  return true;
}

$v = array('ww', 'email', 'telnr', 'adres', 'postcode', 'plaatsnaam'); // definieer array met keys uit $_POST die gechecked moeten worden
gegevenstesten($v); // test gegevens
?>

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Vos, dat komt waarschijnlijk omdat jou code iets abstracter is. Met eigen functies, die zonder een duidelijk voorbeeld misschien wat moeilijk te begrijpen zijn voor een beginner.

Zijn eigen code is niet echt ingewikkelder, het zijn een paar simpele functies specifiek om zijn probleem geschreven. Jou code is wat algemener, en ook bruikbaar als hij zijn form compleet omgooit ;).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor alle replies!

Vos > Super voor de uitleg erbij. Ik ben erg nieuw met PHP en functies vind ik nog vrij lastig. Het gaat me nu vooral om het leren ipv het resultaat, met jou uitleg snap ik het helemaal :)

Over mijn code, het zijn vooral basisfuncties die vooraan in de boeken beschreven staan. Ik roei met de riemen die ik voorlopig heb. :)

[ Voor 24% gewijzigd door Verwijderd op 13-10-2006 16:43 ]


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
niet dat het erg duidelijk is, maar dit werkt ook:
PHP:
1
$valid =  0 < array_product(array_map("strlen", array_intersect_key($_POST, array_flip(array('ww','email','telnr','adres','postcode','plaatsnaam')))));


;)

Als toch alle velden 'required' zijn dan kan het gedeelte vanaf array_intersect vervangen worden door enkel $_POST. En evt. kan de boel ook nog wel getrimmed worden...maarja tis meer een grapje, zo kun je beter niet PHP-en...

[ Voor 34% gewijzigd door Genoil op 13-10-2006 19:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Genoil schreef op vrijdag 13 oktober 2006 @ 18:56:
niet dat het erg duidelijk is, maar dit werkt ook:
PHP:
1
$valid =  0 < array_product(array_map("strlen", array_intersect_key($_POST, array_flip(array('ww','email','telnr','adres','postcode','plaatsnaam')))));


;)

Als toch alle velden 'required' zijn dan kan het gedeelte vanaf array_intersect vervangen worden door enkel $_POST. En evt. kan de boel ook nog wel getrimmed worden...maarja tis meer een grapje, zo kun je beter niet PHP-en...
Damn.. :D Ik heb nog een hoop te leren..

Bedankt iedereen voor de hulpvaardigheid :)

Acties:
  • 0 Henk 'm!

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

aex351

I am the one

l0c4lh0st schreef op vrijdag 13 oktober 2006 @ 09:18:
Ik snap niet waarom jullie allemaal je $_POST variabelen kopiëeren naar andere variabelen?

Wat heb je daar nou aan, buiten dat het onnodig extra geheugen kost?
Voor bijvoorbeeld veiligheidsoverwegingen gezien je op deze manier de POST var maar 1x hoeft te gebruiken en dus mogelijke open plekken in je script waarbij je diezelfde POST var wilt gebruiken niet door iemand van buiten af veranderd kan worden.

[ Voor 33% gewijzigd door aex351 op 14-10-2006 03:47 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Deze is toch beter, want die andere checkte niet of een verplichte POST var uberhaupt wel gezet was:
PHP:
1
2
$r     = array_flip(array('ww','email','telnr','adres','postcode','plaatsnaam'));
$valid =  0 < array_product(array_map("strlen", array_intersect_key($_POST, $r))) * !sizeof(array_diff_key($r, $_POST));


Ik denk overigens niet dat dit omdat het bijna allemaal op 1 regel staat veel efficienter is hoor. Het werkt zo:
1. array_flip keert de array met verplichte velden om zodat values keys worden vv. Dus array("foo", "bar") is eigenlijk array(0=>"foo", 1=>"bar), dus geflipped array("foo" => 0, "bar" =>1)

2. array_intersect_key geeft de POST array terug met daarin alleen de waarden die ook een key hebben in $r. Dus de verplichte velden worden ahw gefilterd uit POST met $r.

3. array_map("strlen"... past de functie strlen() (string-lengte) toe op alle elementen van de gefilterde POST. Het resultaat is dus een array met string lengten.

4. array_product vermenigvuldigt alle waarden in een array met elkaar. Als er dus 1 keer de waarde 0 tussenstaat (resultaat van een strlen op een leeg veld) dan is het product altijd 0.

5. array_diff_key bepaalt het verschil tussen POST en $r. Als er dus waarden niet in POST zitten en wel in $r, dan levert het een array op met de missende velden.

6. de sizeof is een alias voor count, dus geeft 0 voor een lege array. We willen altijd een lege array als resultaat van 5. , dus zeggen we !sizeof, zodat er een 1 uitkomt bij een lege array.

7. 1-4 vermendigvuldig je met 5-6 en als dat positief is is de POST geldig. Anders niet. :)
Pagina: 1