Autor Zpráva
Stig001
Profil
Zdravím, Potřeboval bych poradit s jednoduchým kódem (který si následně analogicky rozšířím). Potřebuji, aby se mi v poli zobrazovaly čísla, podle toho, který prvek pole by byl vybrán. Nějak se mi nechce zobrazovat číslo "5" u proměnné, vybrané formulářem. Nevíte, kde může být chyba ?
Díky předem za případnou odpověď

 <?php


$kolo1 = $_POST['kolo1'];

  ?>
 
<table>


<tr><td class="form_hlasovani">
<select name="kolo1">
<option name="kolo1[1]" value="5">01</option>
<option name="kolo1[2]" value="5">02</option>
<option name="kolo1[3]" value="5">03</option>
<option name="kolo1[4]" value="5">04</option>
<option name="kolo1[5]" value="5">05</option>

</select>
</td>

</tr>

</table>
 
<input type="submit" value="odeslat"></td>

</form> </div>    <div class="php_echo">   
   <br><hr>  
    
<?php

if($kolo1[1] == "5"){
$kolo1[1]="5";
}

if($kolo1[2] == "5"){
$kolo1[2]="5";
}

if($kolo1[3] == "5"){
$kolo1[3]="5";
}

if($kolo1[4] == "5"){
$kolo1[4]="5";
}

if($kolo1[5] == "5"){
$kolo1[5]="5";
}


  
echo "01= ".$kolo1[1]."<br>";   
echo "02= ".$kolo1[2]."<br>";   
echo "03= ".$kolo1[3]."<br>";  
echo "04= ".$kolo1[4]."<br>";   
echo "05= ".$kolo1[5]."<br>";   
?>
    
Chro_
Profil *
Pracovat s polem má smysl pouze u hromadného výběru ze selectu
<select name="kolo1[]" multiple>
Option atribut name nepotřebuje, co se týče zpracování PHP skriptem. K pochopení fungování si pak stačí v PHP vypsat vybrané položky ze selectu
var_dump($_POST['kolo1']);
Stig001
Profil
No tomu var_dump moc nerozumím (jsem amatérský "programátor" ) .... Ten formulář jsem upravil takto:

$kolo1 = $_POST['kolo1'];

  ?>
 
<table>


<tr><td class="form_hlasovani">
<select name="kolo1[]" multiple>
<option value="5">01</option>
<option value="5">02</option>
<option value="5">03</option>
<option value="5">04</option>
<option value="5">05</option>
<option value="5">06</option>
<option value="5">07</option>
<option value="5">08</option>
<option value="5">09</option>
<option value="5">10</option>
</select>
</td>
jestli je to už správně ? čili 01,02,03, atd. se přiřazují indexy toho pole automaticky pak, jestli jsem to správně pochopil ? ... Co ale, když budu chtít tu hodnotu zobrazit ? Nevím, kde ten var-dump mám dát ? místo čeho, nebo před co ?
Díky, Radek
Chro_
Profil *
Var_dump je taková pomůcka bastlíře, když neví co je proměnná za datový typ (číslo, řetězec, boolean, pole, ...) a jakou hodnotu nebo hodnoty obsahuje. Dává se do kódu tam, kde člověk potřebuje právě tyto informace, např. před dalším zpracováním hodnot z proměnných, aby nedošlo k chybě. Zkrátka k testování.
Tento kód ti vypíše co bylo v selectu vybráno.
foreach ($_POST['kolo1'] as $index => $value)
{
echo 'bylo vybráno '.($index + 1).' s hodnotou '.$value.'<br>';
}
Index první položky je 0, prohlížeč posílá jen vybrané. V předaném poli tedy můžou být např. jen dva prvky s indexy 4 a 6, což odpovídá výběru 05 a 07.


EDIT: Nikde v tvých příspěvcích nevidím, že bys formulář odesílal metodou POST. Chybí základní
<form method="post">
Stig001
Profil
Děkuji,
Myslím, že tomu kódu celkem rozumím, metodu post tam mám (akorát jsem jí zde neuvedl, protože tam bych problém nehledal).
Nicméně jsem to zkusil a vypisuje mi to stejnou hlášku, ať zatrhnu cokoliv, tak pořád stejný text => index 1 a hodnota 5 (hodnota je ok, ale index by se měl měnit od 1 po 10, když je tam +1 a to se nemění, tak nevím, jestli ještě není problém v tom formuláři ? Kód vypadá nyní takto:
<form name="form" method="post" action="zkouska_php2.php">

<table>
<tr><td class="form_hlasovani">
<select name="kolo1[]" multiple>
<option value="5">01</option>
<option value="5">02</option>
<option value="5">03</option>
<option value="5">04</option>
<option value="5">05</option>
<option value="5">06</option>
<option value="5">07</option>
<option value="5">08</option>
<option value="5">09</option>
<option value="5">10</option>
</select>
</td>
</tr>
</table>
 
<input type="submit" value="odeslat"></td>

</form> </div>    <div class="php_echo">   
   <br><hr>  
    
<?php
   
foreach ($_POST['kolo1'] as $index => $value)
{
echo 'bylo vybráno '.($index + 1).' s hodnotou '.$value.'<br>';
}
 ?>
juriad
Profil
Kazda option musi mit jiny value. A radeji, pokud je to cislo, nezacina nulou.
Stig001
Profil
No, ale já potřebuji mít hodnotu 5 => bude tam cca 50 indexů a podle toho, který se vybere v tom formuláři, tak získá hodnotu 5. Kdybych tam dal value=1,2,3,... tak pak bych asi musel dát podmínku if, a to nejspíš pro každý index zvlášť, ne ? "Jestliže daný index má danou hodnotu, pak přiřad do proměnné konstantu 5 ... nebo by se to dalo nějak elegantněji obejít ? ..... Ve finále tam ty sloupce s hodnotami budou 5x, první s value=5, další s value=4 ...3,2,1 ... Takže pak v proměnné kolo1[1] bude hodnota např. 5, v proměnné kolo1[5] bude hodnota 3, v prom. kolo1[4] bude hodnota 1 atd. .... čili indexů bude hodně, ale hodnoty se budou střídat od 1 do 5. (5 různých value pro 5 sloupců select). ...
juriad
Profil
Stig001:
A proč se tam stále snažíš nacpat ty indexy?
Prostě změníš name v selektu na index[0], index[1], index[2], index[3], index[4] a value bude těch padesát hodnot.
To ti do PHP přijde jako pole a to si otočíš:
$indexy = $_POST['index']; # array(0=>34, 1=>42, 2=>12, 3=>9, 4=>26)
$hodnoty = array_flip($indexy); # array(9=>3, 12=>2, 26=>4, 34=>0, 42=>1)
Jen pozor na to, že musíš zkontrolovat, že všechny klíče 0-4 existují. A pak také, že mají různé hodnoty (jinak by v poli $hodnoty zůstal jen poslení index s danou hodnotou).
mimochodec
Profil
Stig001:
No, ale já potřebuji mít hodnotu 5 => bude tam cca 50 indexů a podle toho, který se vybere v tom formuláři, tak získá hodnotu 5

Uvažuješ nějak zvláštně. Jestli máš číslo pět přiřadit něčemu, co bude vybráno tímto formulářem, tak ta pětka do něj vůbec nepatří. Do těch value si dej ty indexy. Ten vybraný pak najdeš v $_POST['kolo1'] a v php už si zařídíš, aby někde něco poskočilo, vyběhl obrázek nebo nastal konec světa.
Stig001
Profil
Hmm asi jsme si nerozuměli, myslím ...
Mám tam select (v konečné verzi tam select bude 5x). V každém selectu budou čísla na výběr od 01 do 50. 1 číslo v selectu tedy = 1 index v poli. V každém selectu se vyberou čísla, kterým se přiřadí hodnoty = konstanty. (konstanta 1. selectu (value) by měla být 5, ve druhém selectu 4, ve třetím 3, ve čtvrtém 2 a v 5. jedna.). ...... Takže ve finále chci, aby mělo 5 různých proměnných z pole 5 různých hodnot tj. 5,4,3,2,1 .... což budu muset udělat nejspíš v 2D poli, nicméně principielně mi právě nefunguje ani tento základní "prográmek" ...

Takže například by to vypadalo takto po výpisu příkazem echo (záleží, co by bylo zvoleno ve formuláři):

"výběr28 má hodnotu"5
"výběr45 má hodnotu"4
"výběr02 má hodnotu"3
"výběr31 má hodnotu"2
"výběr09 má hodnotu"1
mimochodec
Profil
Stig001:
To na tom, co jsem psal, nic nemění. Pět selectů je pět hodnot $_POST['kolo1']$_POST['kolo5']. Do <option value="5">01</option> nedávej value=5 ale value odpovídající zobrazované hodnotě (v případě tohoto optionu value="1"). V php si pak zpracuj $_POST['kolo1']$_POST['kolo5'].


No moment, teď tady vidím nějaké hranaté závorky a multiple... tak už si nejsem jist, že jsem úplně v obraze. Mrknu za chvilku, prozatím ten můj příspěvek [#11] ignoruj.
Stig001
Profil
Koukněte zde, zde jsem to udělal pomocí formuláře "radio" a funguje mi to více-méně tak, jak bych si představoval:


<form name="form" method="post" action="zkouska_php2.php">
  <?php
/*$kolo1 = $_POST['kolo1'];    */
$kolo1 = $_POST['kolo1'];
   ?>
<table>

<!--
<tr><td class="form_hlasovani">
<select multiple>
<option name="kolo1[0]" value="0">01</option>
<option name="kolo1[1]" value="1">02</option>
<option name="kolo1[2]" value="2">03</option>
<option name="kolo1[3]" value="3">04</option>
<option name="kolo1[4]" value="4">05</option>
<option name="kolo1[5]" value="5">06</option>
<option name="kolo1[6]" value="6">07</option>
<option name="kolo1[7]" value="7">08</option>
<option name="kolo1[8]" value="8">09</option>
<option name="kolo1[9]" value="9">10</option>
</select>
</td>
</tr>
</table>    -->

<tr>
<td class="form_hlasovani"><input type="radio" name="kolo1[1]" value="5">01</td>
<td class="form_hlasovani"><input type="radio" name="kolo1[2]" value="5">02</td>
<td class="form_hlasovani"><input type="radio" name="kolo1[3]" value="5">03</td>
<td class="form_hlasovani"><input type="radio" name="kolo1[4]" value="5">04</td>
<td class="form_hlasovani"><input type="radio" name="kolo1[5]" value="5">05</td>
<td class="form_hlasovani"><input type="radio" name="kolo1[6]" value="5">06</td>
</tr>

</table>
 
<input type="submit" value="odeslat"></td>

</form> </div>    <div class="php_echo">   
   <br><hr>  
    
<?php

echo "vybraná hodnota 01: je:".$kolo1[1]."<br>";
echo "vybraná hodnota 02: je:".$kolo1[2]."<br>"; 
echo "vybraná hodnota 03: je:".$kolo1[3]."<br>";    
echo "vybraná hodnota 04: je:".$kolo1[4]."<br>";    
echo "vybraná hodnota 05: je:".$kolo1[5]."<br>";
echo "vybraná hodnota 06: je:".$kolo1[6]."<br>";
     
     
     
     
     
     
?>
akorát po rozšíření ten kód bude celkem rozsáhlý, takže nevím, jestli je tohle úplně ideální řešení, nicméně takovým způsobem bych chtěl, aby mi to ve finále pracovalo .... aby mi to vypsalo hodnoty všech proměnných => podle zaškrtnutí tlačítka by se do patřičné proměnné zařadila 5ka; 4ka, 3ka, 2ka a 1ka a u zbytku by nebylo nic.
-------------------------------------------------
Aktualizace: Aby mi to přesně takto fungovalo s tím select --> option (nebo s něčím obdobným) se mi zkrátka nepodařilo, takže nevím, čím by to mohlo být ... s těmi tlačítky radio by to bylo asi hodně nepřehledné ....
Alphard
Profil
Stig001 [#12]:
Předchozí část jsem prošel jen v rychlosti, ale zdá se mi, že pořád nechápete podstatu name a value a pořád to toho pletete indexy. U input radio se pro danou skupinu používá stejné name a různé value, tady to je přesně naopak.

Stejně tak ten zakomentovaný formulář. Atribut name má být u select, ne u option, tam už má být jen value.
Taps
Profil
Stig001:
<form name="form" method="post" action="zkouska_php2.php">

<table>
 

<tr><td class="form_hlasovani">
<select  name="kolo[]" multiple >
<? for($vyber=0;$vyber<=8;$vyber++){
echo '<option value="kolo1['.$vyber.']" >0'.$vyber.'</option>';
}
?>
</select>
</td>
</tr>
</table>   
 <input type="submit" value="odeslat" name="odeslat"></td>
 
</form> </div>    <div class="php_echo">   
   <br><hr>  
    
<?php
 if($_POST['odeslat']){
   foreach($_POST['kolo'] as $kolo => $polozky){
   echo $polozky.'<br>';
   }
 }
?>
Stig001
Profil
No, co se týká toho zakomentovaného kódu, tak měl jsem to původně přesně tak, jak píšete, jenže to nefungovalo korektně, tak jsem se to snažil předělat a pořád stejné v podstatě. ... To s těmi tlačítky radio mě funguje podle představ, jen jsem ty tlačítka chtěl nahradit nějakým decentnějším formulářem, protože jich bude hodně. ... Proč to všechno cpu do pole ? chtěl bych z toho udělat pak tabulku, tu uložit do txt a následně v jiném odkaze načíst. Tato část kódu mi už funguje. Dále pak když to bude v poli, tak nemusím deklarovat každou proměnnou zvlášť, ale stačí celé pole (viz. kód s radio). Ovšem jak jsem uvedl, jsem amatér v programování, tak je možné, že pořád nechápu princip. Nicméně kdybych tam měl jen jedno jméno, tak do něj by se mi přiřazovaly hodnoty a to právě nechci, chtěl bych měl třeba 50 proměnných (prvky pole), které by byly všechny "nulové" nebo nedefinované a jen některé (vybrané formulářem) by měly hodnoty 5,4,3,2,1 nic víc => z těch 50 proměnných by byly pouze 5 definovaných.
Ten váš kód mi funguje nějak divně => v selectu jsou samé nuly totiž. ... zkusím to pak nějak "vstřebat" ...
Ještě mě napadlo ale jiné řešení, které by pro danou aplikaci bylo plně použitelné a to zkusit si dát selecty pro každou jako by proměnnou a pomoci něho přiřazovat prvky. Zkusím to udělat a pak uvidím. Prozatím díky za ochotu :-).
Taps
Profil
Stig001:
Kód jsem poupravil
Alphard
Profil
Stig001:
Nicméně kdybych tam měl jen jedno jméno, tak do něj by se mi přiřazovaly hodnoty a to právě nechci, chtěl bych měl třeba 50 proměnných (prvky pole), které by byly všechny "nulové" nebo nedefinované a jen některé (vybrané formulářem) by měly hodnoty 5,4,3,2,1 nic víc => z těch 50 proměnných by byly pouze 5 definovaných.
Tohle je klíčovávě. Vy se snažíte o něco, co vypadá podezřele a jde proti myšlence formulářů.

Select nepřinutíte, aby posílal nevybrané hodnoty, je třeba udělat to dodatečným zpracováním po odeslání formáře. Na začátku scriptu si vytvořte prázdné pole (s požadovanými defaultními hodnotami) a pak na základě dat z formuláře upravte ty prvky, které uživatel vybral.
Stig001
Profil
Hmm no, už asi vím, na co narážíte, zkusil jsem to udělat trošku jinak, tak, aby to na výslednou aplikaci nemělo negativní vliv. Kód nyní vypadá takto = idexuji jména selectů, do kterých přiřazuji hodnoty z výběru. ... Ještě si to upravím, aby suma všech prvků byla =15 (5+4+3+2+1) a při splnění podmínky se provede následný zápis do txt apod., jak jsem to plánoval.
Čili toto je nový kód, který funguje tak, jak bych si představoval: :-)
<form name="form" method="post" action="zkouska_php2.php">
 <?php
$id = $_POST['id'];
  ?>
<table><tr>

<td class="form_hlasovani">
<select name="id[]" size="1" class="sel"> 
<option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option>
</select>01</td>

<td class="form_hlasovani">   
<select name="id[]" size="1" class="sel"> 
<option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option>
</select>02</td>

<td class="form_hlasovani">   
<select name="id[]" size="1" class="sel"> 
<option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option>
</select>03</td>

<td class="form_hlasovani">   
<select name="id[]" size="1" class="sel"> 
<option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option>
</select>04</td>

<td class="form_hlasovani">   
<select name="id[]" size="1" class="sel"> 
<option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option>
</select>05</td>




</tr></table>    


<br>
  <input type="submit" value="odeslat">
</form> </div>    <div class="php_echo">   
   <br><hr>  
    
<?php
echo "vybrali jste volbu ".$id[0]."<br>";
echo "vybrali jste volbu ".$id[1]."<br>";
echo "vybrali jste volbu ".$id[2]."<br>";
echo "vybrali jste volbu ".$id[3]."<br>";
echo "vybrali jste volbu ".$id[4]."<br>";

?>
Stig001
Profil
Zdravím vás,
Ještě bych měl jeden dotaz, jestli v php existuje nějaká funkce, která je analogická k excelovské funkci "COUNTIF" ....
Totiž mám pole čísel a potřebuji dostat do podmínky počet nenulových/nulových prvků, zkrátka nějakou funkci, do které dám název pole a fce vrátí počet prvků s hodnotou nula. Nebo něco takového.

Neví to někdo ? Díky za případnou odpověď.
Taps
Profil
Stig001:
šlo by to např. takto
<?php
$pole = array (0,2,4,6,0,5,7,8,30,0,8,0);

foreach($pole as $p){
  if($p > 0){
    $nenulove++;
  }
  else{
  $nulove++;
  }
}
echo 'Nulové:'.$nulove.'<br>';
echo 'Nenulové:'.$nenulove.'<br>';  
?>  
Stig001
Profil
Díky moc :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: