login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Trim op array

Offline Voldemort - 23/02/2006 20:30
Avatar van VoldemortPHP ver gevorderde Ik gebruik deze functie:

  1. for($i=0;$i<$tot_check;$i++)
  2. {
  3. $checked[$i] = $file_post;
  4. $tr_checked[$i] = trim($checked[$i]);
  5. $htmle_checked[$i] = htmlentities($tr_checked[$i], ENT_QUOTES);
  6. $str_checked[$i] = strip_tags($htmle_checked[$i]);
  7.  
  8. $this->checked = array_push($str_checked[$i],$this->checked);
  9.  
  10. return $this->checked;
  11. }


Ik krijg deze errors:

Citaat:
Notice: Array to string conversion in C:serverwwwhp-d_v21classesdefaultsecurity.class.php on line 30

Warning: array_push(): First argument should be an array in C:serverwwwhp-d_v21classesdefaultsecurity.class.php on line 34


Ik roep de functie zo aan:

  1. list($reactie,$reactie2) = $sc->sended_form(2,array($_POST['reactie'],$_POST['reactie']));
  2.  
  3. echo $reactie;
  4. echo "<br />";
  5. echo $reactie2;


Bij de eerste error denk ik dat het is omdat trim geen arrays ondersteund, ik kan geen functie vinden die hetzelfde doet voor arrays.

Bij de tweede error heeft PHP ongelijk, mijn eerst argument is een array .

Wie kan me helpen met dit probleem?

PS: Ik heb op deze site in het forum en op PHP.net bij array naar een functie gezocht, geen gevonden. Als ik blind ben zeg je maar het juiste url naar de functie .

10 antwoorden

Gesponsorde links
Offline Rens - 23/02/2006 20:32
Avatar van Rens Gouden medaille

Crew algemeen
Geef eens even je hele functie senden_form.
En als hij té lang is, even op www.pastebin.be plaatsen 
Offline Voldemort - 23/02/2006 20:34
Avatar van Voldemort PHP ver gevorderde http://www.pastebin.be/389/

=> Zolang het geen array is, of het eerste argument is 0 doet hij het zonder errors, vanals het tweede argument een array is doet hij het niet meer.
Offline Rens - 23/02/2006 20:46
Avatar van Rens Gouden medaille

Crew algemeen
Ik heb de functie eens een heel stuk veranderd.
Je had enkele onnodige dingen er tussen staan, en bij de !is_array check, had je $string[0], maar een string is $string, een array is $string[1] 

Vergelijk de functie die je had, maar eens met de functie zoals ik het nu heb.
Als je er nog vragen over hebt, merken we het wel .

  1. <?php
  2. class security
  3. {
  4. function sended_form($file_post)
  5. {
  6. // kijken of de string lengte kleiner is als 1
  7. // of, als het een array zou zijn, kijken of de
  8. // array meer dan 0 waardes bevat
  9. if(strLen($file_post) < 1 || count($file_post) < 1)
  10. {
  11. // nee
  12. // we zetten het bericht in de var. $sRet
  13. $sRet = "Er worden geen velden gechecked";
  14. } else
  15. {
  16. // de lengte was groter dan 1, of de array
  17. // bevatte meer dan 0 waardes
  18. if(!Is_Array($file_post))
  19. {
  20. // $file_post is geen array
  21. // we gaan hem nu strippen e.d.
  22. // daarna word hij in de var. $sRet gezet
  23. $sRet = strip_tags(htmlentities(trim($file_post)));
  24. } else
  25. {
  26. // $file_post is wel een array
  27. // we maken van de var. $sRet een array
  28. // en daarna doorlopen we de array $file_post
  29. // vervolgens maken we telkens een nieuwe 'rij'
  30. // aan in de array met de veilige waarde van
  31. // het stukje text o.i.d. uit $file_post
  32. $sRet = array();
  33. for($i = 0; $i < count($file_post); $i++)
  34. {
  35. $sRet[] = strip_tags(htmlentities(trim($file_post[$i])));
  36. }
  37. }
  38. }
  39. // we returnen de waarde van $sRet
  40. return $sRet;
  41. }
  42. }
  43. ?>
Offline nemesiskoen - 23/02/2006 20:57
Avatar van nemesiskoen Gouden medaille

PHP expert
Zou je niet beter 3x array_map toepassen?

  1. if(!is_array($file_post)) {
  2. $ret = strip_tags(htmlentities(trim($file_post)));
  3. } else {
  4. $ret = array_map("trim", $file_post);
  5. $ret = array_map("htmlentities", $ret);
  6. $ret = array_map("strip_tags", $ret);
  7. }


Zo checkt hij ook recursief.

Meer documentatie: http://php.net/array_map
Offline Voldemort - 24/02/2006 09:10
Avatar van Voldemort PHP ver gevorderde @Rensjuh: Als ik met je class een array check met 1 waarde en de $_POST['reactie'] is "Test" dan weergeeft hij:

Citaat:
Notice: Array to string conversion in C:serverwwwhp-d_v21classesdefaultsecurity.class.php on line 9
Test


Die Notice moet dus nog weg.

Als ik het doe zonder array en ik zet in $_POST['reactie'] is "Test" dan weergeeft hij:

Citaat:
T


Raar, vooral dat laatste. Ik roep het aan met:

Citaat:
list($reactie) = $sc->sended_form($_POST['reactie']);

echo $reactie;


Wat is er fout gelopen?

@nemesiskoen: Hoe plaats ik dat? Binnen de for? Waar moet de $i dan?
Offline Rens - 24/02/2006 09:20
Avatar van Rens Gouden medaille

Crew algemeen
Ah, daar had ik eerst ook problemen mee toen ik het testte.
Ben vergeten om te zeggen dat dat list() er dan niet bij hoeft.
  1. $reactie = $sc->sended_form($_POST['reactie']);


Hmmz, over dat eerste waar je het over had, doe je het dan zo:
  1. list($reactie) = $cSec->sended_form(array('blaat'));

?
Of met welke code krijg je die notice?
Offline Voldemort - 24/02/2006 09:25
Avatar van Voldemort PHP ver gevorderde Met die list die weg is, is het goed voor een niet-array.

Maar als ik het zo aanroep, met array dus:

  1. list($reactie) = $sc->sended_form(array($_POST['reactie']));
  2.  
  3. echo $reactie;


Krijg ik dit:

Citaat:
Notice: Array to string conversion in C:serverwwwhp-d_v21classesdefaultsecurity.class.php on line 9
Test


Dus hij weergeeft mijn variable wel, maar er is een fout.
Offline Rens - 24/02/2006 09:29
Avatar van Rens Gouden medaille

Crew algemeen
Ah, foutje gevonden.
  1. <?php
  2. class security
  3. {
  4. function sended_form($file_post)
  5. {
  6. // kijken of de string lengte kleiner is als 1
  7. // of, als het een array zou zijn, kijken of de
  8. // array meer dan 0 waardes bevat
  9.  
  10. // hier zat de fout
  11. // checken of string lengte als het een array is werkt niet ;-)
  12. // en andersom ook...
  13. if((!Is_Array($file_post) && (strLen($file_post) < 1)) || (Is_Array($file_post) && count($file_post) < 1))
  14. {
  15. // nee
  16. // we zetten het bericht in de var. $sRet
  17. $sRet = "Er worden geen velden gechecked";
  18. } else
  19. {
  20. // de lengte was groter dan 1, of de array
  21. // bevatte meer dan 0 waardes
  22. if(!Is_Array($file_post))
  23. {
  24. // $file_post is geen array
  25. // we gaan hem nu strippen e.d.
  26. // daarna word hij in de var. $sRet gezet
  27. $sRet = strip_tags(htmlentities(trim($file_post)));
  28. } else
  29. {
  30. // $file_post is wel een array
  31. // we maken van de var. $sRet een array
  32. // en daarna doorlopen we de array $file_post
  33. // vervolgens maken we telkens een nieuwe 'rij'
  34. // aan in de array met de veilige waarde van
  35. // het stukje text o.i.d. uit $file_post
  36. $sRet = array();
  37. for($i = 0; $i < count($file_post); $i++)
  38. {
  39. $sRet[] = strip_tags(htmlentities(trim($file_post[$i])));
  40. }
  41. }
  42. }
  43. // we returnen de waarde van $sRet
  44. return $sRet;
  45. }
  46. }
  47. ?>

Ik deed een check op string lengte, maar dat kan niet met een array...
Andersom werkt het wel, een count() op een gewone var, vaag? 
Offline Voldemort - 24/02/2006 09:34
Avatar van Voldemort PHP ver gevorderde Nu werkt het, maar array_map(), wat is het verschil met array_map en een functie dmv dat aanroepen (trim ofzo) of gewoon meteen trim?
Offline Richard - 24/02/2006 12:54
Avatar van Richard Crew algemeen array_map voert een bepaalde functie uit over ieder element van een array;)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.248s