Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> FORM tablicowy, zmiana "name" ze string na array
bulimaxiu
post
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
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


W ogóle nie rozumiem pytania, ale chyba i Ty źle coś rozumiesz. Przetestuj poniższy kod:
  1. <?php
  2. if(isset($_POST['action']) && $_POST['action'] == 'check') {
  3. echo '<pre>';
  4. print_r($_POST);
  5. echo '</pre>';
  6. } else {
  7. echo '<form action="" method="post">';
  8. for ($i = 1; $i <= 5; $i++) {
  9. $name = 'data['.$i.']';
  10. echo '<input type="text" name="'.$name.'" value="'.$i.'" /><br />';
  11. }
  12. echo '<input type="hidden" name="action" value="check" /><br />';
  13. echo '<input type="submit" name="submit" value="Check" />';
  14. echo '</form>';
  15. }
Go to the top of the page
+Quote Post
bulimaxiu
post
Post #3





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
d3ut3r
post
Post #4





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


Nie bardzo rozumiem po co ale myślę że możesz użyć czegoś takiego

  1. $arr=$_POST['data'];
  2. foreach ($arr as $key=>$value){
  3. $str[]="data[".$key."]";
  4. }


i na końcu masz tablicę $str w której masz np: "data[1]" , "data[3]" itd.

ok prawdopodobnie nie o to chodziło smile.gif napisz co chcesz osiągnąć będzie łatwiej.

Ten post edytował d3ut3r 3.06.2011, 19:54:03


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
mortus
post
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Chodzi o to, że chcesz wyodrębnić z łańcucha data[10] dwa klucze (indeksy) dla tablicy $_POST (pierwszy to data, drugi to 10)? Użyj wyrażeń regularnych:
  1. $pattern = '#([A-Za-z][A-Za-z0-9:_.-]+)\[([0-9]+)\]#';
  2. $str = 'data[10]';
  3. preg_match($pattern, $str, $matches);
  4. $firstKey = $matches[1];
  5. $secondKey = $matches[2];
  6. unset($matches);
  7. // odwołanie do $_POST
  8. // $_POST[$firstKey][$secondKey] = $_POST['data'][10];
  9. if(isset($_POST[$firstKey][$secondKey])) {
  10. // właściwy kod
  11. }


EDIT
Pierwszy człon wyrażenia regularnego trzeba jeszcze rozszerzyć o znaki, jakie mogą znajdować się w atrybucie name elementu HTML, ale nie pamiętam jakie to znaki.
Sprawdziłem i już poprawiłem wzorzec.

Ten post edytował mortus 3.06.2011, 20:19:03
Go to the top of the page
+Quote Post
bulimaxiu
post
Post #6





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

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


To jest to mortus, dziękuję za pomoc.
Go to the top of the page
+Quote Post

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 Aktualny czas: 22.08.2025 - 05:04