[php] recursieve functie die quotes om moet zetten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een formulier die uit meerdere delen bestaat en sla daarom alle waardes op in een sessie.
Dat gebeurd nu op deze manier:
PHP:
1
$_SESSION['formdata'][$from] = $_POST
($from is telkens de waarde die aangeeft onder welke pagina/formulier ze moeten worden opgeslagen.)
Daarbij doet zich het probleem van de quotes voor. Als ik bijvoorbeeld invul hier vul ik "iets" in dan staat er in het formulier bij dat invulveld alleen nog maar hier vul ik \, door die quote (doordat ie gepost werd komt die \ er te staan)
Nou wilde ik dus een recursieve functie schrijven die overal die quotes omzet in " maar loop daarbij tegen het probleem aan dat ik wel met de indexering in m'n sessie rekening moet houden.
Ik heb 'm nu zo: (deels pseudo code)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function put_in_session($array,$index)
{
    foreach ($array AS $key => $value)
    {
        if (is_array($value))
        {
            put_in_session($value,$index+$key);
        }
        else
        {
            $_SESSION[$index][$key] = str_replace("\"",""",$value);
        }
    }
}

$index moet dan aangeven hoe diep ie in de array moet gaan
$index+$key zorgt er voor dat ie dan weer een stapje dieper in de array gaat

Maar uiteraard werkt dat op deze manier niet
Als voorbeeld. $index zou er dus in eerste instantie voor moeten zorgen dat $_SESSION[$index][$key] wordt opgeslagen onder bijv. $_SESSION['formdata']['1'][$key].

Oh,...de functie moet recursief zijn, omdat er soms arrays ontstaan uit de postwaarden. vandaar dus het stukje (pseudo)code $index+$key

Ik hoop dat het probleem duidelijk is en dat iemand me kan helpen hoe ik dit werkend kan maken

Acties:
  • 0 Henk 'm!

Verwijderd

Even een andere oplossing:
htmlentities
htmlspecialchars

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat zou dan alleen ter vervanging van m'n str_replace() gelden
heb ik nog steeds de functie nodig
...waar ik dus niet uitkom

Acties:
  • 0 Henk 'm!

  • Glock
  • Registratie: November 2001
  • Niet online
Untested:
PHP:
1
2
3
4
5
6
7
8
9
10
function blaat (&$key) {
  if (is_array($key)) {
    array_walk ($key, 'blaat');
  } else {
    // laat de " vervangen worden
  }
}

// Aanroepen
array_walk ($_SESSION, 'blaat');


zo iets?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
oh ok....stom
ik kan natuurlijk gewoon alles éérst in de sessie pleuren en de boel dan pas vervangen, ipv tegelijkertijd te doen.
thnx, ik heb het ook nog niet getest, maar met dat idee ga ik er wel uitkomen

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat doet die & eigenlijk in
function blaat (&$key) {
?

Acties:
  • 0 Henk 'm!

  • Glock
  • Registratie: November 2001
  • Niet online
Dat kun je hier vinden.

Acties:
  • 0 Henk 'm!

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 09-09 09:55
Verwijderd schreef op 19 januari 2003 @ 18:34:
Wat doet die & eigenlijk in
function blaat (&$key) {
?
Hier is deze week nog een topic over geweest:
[rml][ PHP] Classes: wanneer gebruiken van pointer ?[/rml]

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het wil toch nog niet helemaal lukken

Ik heb het nu zo

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function substitute_quotes(&$key)
{ 
    if (is_array($key))
        array_walk($key, 'substitute_quotes'); 
    else
    {
        $key = str_replace("\"",""",$key);
        $key = str_replace("'","'",$key);
    } 
}
 // en spreek de functie zo aan:
$_SESSION['formdata'][$from] = stripslashes($_POST);
array_walk($_SESSION['formdata'], 'substitute_quotes');

Maar de waarde van
$_SESSION['formdata'][$from] (waarbij $from dus een willekeurig getal is in de range van alle formulieren die zijn ingevuld) wordt daarmee over Array (dus gewoon de text array en niet een echte array), waardoor alle velden in m'n formulier de waarde A krijgen.

dit print print_r:
code:
1
2
3
4
5
6
7
Array
(
    [formdata] => Array
        (
            [2] => Array
            [3] => Array
        )

ik snap niet waar het fout gaat...

edit2: hij doet die array walk in de functie wel, maar toch geeft ie $key op 1 of andere manier de waarde Array. Nou is dat begrip met die & dus net nieuw voor me, dus ik weet het niet zeker, maar volgens mij heeft dat er iets mee te maken. Op het moment dat ik die str_replace op $key doe ziet ie 'm waarschijnlijk toch nog als Array op 1 of andere vage wijze (terwijl ie toch langs de is_array() is gekomen.
Hopelijk heeft iemand met meer verstand hiervan een oplossing?

[ Voor 45% gewijzigd door Verwijderd op 19-01-2003 23:13 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmmm...die stripslashes($_POST) is niet de meest geniale zet uit mijn php carriere geweest 8)7 8)7 8)7

DOH!!!

problem solved. Je functie doet het gesmeerd Glock. Thnx
Pagina: 1