Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> FORM tablicowy, zmiana "name" ze string na array
bulimaxiu
post 3.06.2011, 13:37:46
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 18.06.2008
Skąd: Reda

Ostrzeżenie: (0%)
-----


Witam.

Mam w FORMie układ tablicowy:
  1. <input name="data[1]" type="text" />
  2. <input name="data[15]" type="text" />
  3. ...

W PHPie wiadomo, odczytam poprzez
  1. $firstname = $_POST['data'][15];
  2. ...
, lub jakoś podobnie, to nie problem.

FORM jest generowany przez PHP, gdzie name jest podawany jako string ("data[15]"); parametr dodatkowy "15" jest zmienny. Potrzebuję jednak w PHP przekazać name ("data[15]") jako string do funkcji PHP i tu rozłożyć to na array, czyli np. $_POST['data'][15]. Wiadomo, gdy zastosuję $_POST[$name], wyjdzie $_POST[data[15]],a potrzeba $_POST['data'][15]. Czy można to rozwiązać jakoś funkcją? Bo nie chcę robić funkcji na analizę znaków w stringu i krok po kroku robić array; chyba że nie da rady inaczej.

Ten post edytował bulimaxiu 3.06.2011, 13:38:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bulimaxiu
post 3.06.2011, 19:34:10
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 18.06.2008
Skąd: Reda

Ostrzeżenie: (0%)
-----


Twój kod niestety nie odwzorowuje problemu. Chodzi o to, że $i jest traktowane jako dana z formularza a jednocześnie i cała nazwa musi być przekazana do funkcji jako string, z której trzeba zrobić array, żeby wydobyć $i.
Poniższa funkcja działa perfect gdy name jest jednowymiarowy, ale gdy name ma wiele wymiarów sypie się. Gdy do Generatora dochodzi nazwa pola name (np. "data[1]"), pole wygeneruje się dobrze (z name="data[1]"), ale gdy przychodzi do sprawdzania tabeli POST to sprawdza $_POST['data[1]'] i tu się zacina.

  1. private function GenerateTextField ($strType, $arrFuncArgs) {
  2. $strName = $arrFuncArgs[1];
  3. $strValueFromBase = $arrFuncArgs[2];
  4. $strValueDefault = $arrFuncArgs[3];
  5. $strAddArguments = (isSet($arrFuncArgs[4])) ? $arrFuncArgs[4] : null;
  6.  
  7. if (isSet($_POST[$strName])) {
  8. $strValue = $_POST[$strName];
  9. } else if (!isSet($_POST[$strName]) AND !empty($strValueFromBase)) {
  10. $strValue = $strValueFromBase;
  11. } else if (empty($strValueFromBase)) {
  12. $strValue = $strValueDefault;
  13. }
  14.  
  15. $strReturn = '<input type="' . $strType . '" name="' . $strName . '" value="' . $strValue . '" ' . $strAddArguments . '/>';
  16. return $strReturn;
  17. }
Ideę ewentualnego rozwiązania przedstawiam poniżej, tylko może można to zrobić bardziej profesjonalnie niż takie stringowanie
  1. <?php
  2. $a['cos1']['15'] = "test";
  3. $f = "cos1[15]";
  4.  
  5. $g = explode ("[", $f);
  6. foreach ($g as $key1 => $value1) {
  7. if (substr($value1, -1) == "]") {
  8. $g[$key1] = substr ($value1, 0, strlen($value1)-1);
  9. }
  10. if (empty($value1)) {
  11. unSet ($g[$key1]);
  12. }
  13. }
  14.  
  15. echo '<pre>a ' . print_r($a[$g[0]][$g[1]],1 ) . '</pre>';
  16. ?>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 21:03