Autor Zpráva
TWE3K
Profil
Zdravím, vedel by mi niekto pomôcť s nasledovným problémom?

1. užívateľ zadáva číslo
po 1. odoslaní
2. generuje sa formulár s počtom políčok typu text zadaného čísla - užívateľ povyplňa nejaké čísla..
po 2. odoslaní
3. každé zadané číslo sa zaokrúhli na najbližšiu druhú mocninu.. napr. 57 na 64 ..
+ ďalej, zatiaľ neriešim

môj problém:
1. neviem ako sa vysporiadať s tým, aby mi po 2. odoslaní zostali vypísané políčka, ktoré sa vygenerovali po 1. odoslaní (bude problém v "{" zátvorke?)
2. po 2. odoslaní sa v ďalších výpočtoch nezaratávajú hodnoty , ktoré boli zadané do políčok..

kód v skratke:

html..


  <?php
  if (isset($_POST['submit1'])) { ...
    podmienky...  
+

  function multipolia($value){
         $value = $value + 1;     
        for($i = 1;$i < $value; $i++) {
                echo "<p>$i.hodnota <input type='text' name='hodnoty[$i]'></p>";   //  ukladá to dobre do premmenej 'hodnoty[$i]' ???       
                }
                return $hodnoty[$i];         
        }
    
  ?>
html pre výpis funkcií..

  <?php    
          }  
          if (isset($_POST['submit2'])) {
funkcie..
?>
html pre výpis..

 snažím sa vo funckiách pracovať s hodnotami v $hodnoty[$i], avšak tu už ich nepozná..čiže po 2. odoslaní sa akoby vymažú
Tori
Profil
Na ř.14: Odkud se bere to pole $hodnoty? Ve funkci definované není.
Při další zpracování formuláře (za ř.22) pracujete s $_POST['hodnoty'] (proměnná $hodnoty zřejmě opět není definovaná).
TWE3K
Profil
riadok 14, som celý zmazal, v podstate je tam aj zbytočný ..

za riadkom 22 mám definovanú premmennú z formulára nasledovne..
$hodnoty = array($_POST['hodnoty[$i]']);

funkciu na počítanie mám potom v nasledovnom tvare:
function PotrebneIP($hodnoty){
        $celkovypocet = array();
        if($hodnoty[$i] > 15 && $hodnoty[$i] < 33) {
                $celkovypocet[$i] = 32;
              }
    elseif($hodnoty[$i] > 7 && $hodnoty[$i] < 17) {
                $celkovypocet[$i] = 16;
              }
        elseif($hodnoty[$i] > 268435454 && $hodnoty[$i] < 536870912) {
                $celkovypocet[$i] = 8;
              }

 $celkovypocet =  array_count_values($celkovypocet[$i]);       
       return $celkovypocet;
 
nevypisuje mi však nič ..

ešte som chcel, že aby po 2. odoslaní zostalo vypísané to čo po prvom..aktuálne je to tak, že ked kliknem druhý krát odoslat formulár tak sa výpis iba zamení..
Tori
Profil
TWE3K:
Jak se funkce PotrebneIP dostane k proměnné $i? Předpokládám, že tam je ještě nějaký cyklus, který jste neuvedl (jinak by to nedávalo smysl). Nalezení nejbližší mocniny osmi (je-li to to, co chcete) se dá udělat i takto:
$a = array(123, 57, 4, 23, 31);
foreach($a as $cislo)    {
    $rozdil = $cislo % 8;
    if ($rozdil > 4 || $cislo < 8)    { // aby pro čísla menší než 4 nebyla výsledkem nula, ale 8 
        $vysledek = $cislo + 8 - $rozdil;
    } else {
        $vysledek = $cislo - $rozdil;
    }
    echo "<br>$cislo ... (rozdil = $rozdil) ... $vysledek";
}
Bude to možná o maličko pomalejší, než x podmínek, ale zato přehlednější a s menší šancí na překlepy.
edit: Pardon, radím blbosti, najde to násobky osmi místo mocnin.

za riadkom 22 mám definovanú premmennú z formulára nasledovne..
Mělo byt to být zřejmě $_POST["hodnoty[$i]"] (uvnitř apostrofů se proměnné nezpracují).

ešte som chcel, že aby po 2. odoslaní zostalo vypísané to čo po prvom
Navrhuji po 2.odeslání uložit pole $_POST['hodnoty'] do session, a v dalších formulářích číst odtamtud.
TWE3K
Profil
Tori:
Jak se funkce PotrebneIP dostane k proměnné $i?
Máte pravdu, nedostane sa k nim nijak.. cyklus tam nie je žiadny.. akurát neviem pod čím mám tých X hodnôt, ktoré užívateľ vyplní načítavať do tej funkcie... nejako som si nahovoril že pod $i by to mohlo fungovať..
a tá funkcia nemá fungovať pod najbližšou mocninou ôsmymi, ale dvomi.. bolo zbytočné vypisovať viac podmienok

potrebujem to množstvo čísel zadaných od užívateľa zaradiť do najbližšej mocniny a následne sčítať

zatiaľ Ďakujem za riešenie problému
Tori
Profil
TWE3K:
akurát neviem pod čím mám tých X hodnôt, ktoré užívateľ vyplní načítavať do tej funkcie
Funkci posíláte přece celé pole, tak ho stačí ve fci projít pomocí foreach
function PotrebneIP($hodnoty) {
  foreach ($hodnoty as $hodnota) { 
    if($hodnota > 15 && $hodnota < 33) { ...atd.
TWE3K
Profil
aktuálne to vyzerá teda takto:
function PotrebneIP($hodnoty){
 $celkovypocet = array();
  foreach ($hodnoty as $hodnota){
        if($hodnota > 15 && $hodnota < 33) {
                $celkovypocet[] = 32;
              }
             elseif($hodnota > 7 && $hodnota < 17) {
                $celkovypocet[] = 16;
              }
...

 $celkovypocet =  array_count_values($celkovypocet[]);       
       return $celkovypocet;

odmieta mi však brať pri sčítaní polí zátvorku [] ..
lol
Profil *
Tak tam tú zátvorku nedajte.
Tori
Profil
TWE3K:
a tá funkcia nemá fungovať pod najbližšou mocninou ôsmymi, ale dvomi
Pak by to šlo i převodem na dvojkovou soustavu:

$a = array(123, 573498, 4, 23, 123456789); 
foreach($a as $cislo)    { 
    $new = str_replace('1', '0', decbin($cislo));
    $new[0] = '1';
    echo "<br>$cislo ... ".bindec($new);
}
Tohle najde nejbližší nižší nebo shodnou mocninu. Pokud byste chtěl rozlišovat, jestli je blíž nižší nebo vyšší mocnina, tak se to dá rozlišit podle 2.bitu (0 => zaokrouhlit dolu, 1=> zaokrouhlit nahoru. + nějaká kontrola, aby zaokrouhlení nahoru nepřesáhlo PHP_INT_MAX).
TWE3K
Profil
lol:
bez zátvorok som to samozrejme skúšal, vypisuje mi však iba: Array

Tori:
mne stačí zaokrúhlovanie na najbližšiu hornú mocninu, ďakujem za nápad
TWE3K
Profil
ak som vytvoril funkciu:
function pocet($hodnoty){
      echo $hodnoty;
      }
vo výpise píše iba : Array

znamená to že do:
$hodnoty = array($_POST['hodnoty[$i]']);

ukladá teda prázdne hodnoty???
Tori
Profil
TWE3K:
vo výpise píše iba : Array
což je naprosto správně, protože echem se vypisují řetězce a čísla a výsledkem konverze pole na řetězec je "Array". Použijte var_dump nebo print_r.

Ad [#7]: ↓ Funkci PotrebneIP prostě předejte celé pole $_POST['hodnoty']. Na řádku 12 tamtéž má být $celkovypocet = array_count_values($celkovypocet);. To, že to pak někde dál vypisuje "Array" je tím, co píšu výše.

Btw, je rozdíl mezi $_POST['pocetpc[$i]'], $_POST["pocetpc[$i]"] a $_POST['pocetpc'][$i].
TWE3K
Profil
skúsil som to takto:

$hodnoty = array($_POST["hodnoty[$i]"]);

function pocet($hodnoty){
      var_dump($hodnoty);
      }

vypisuje mi: Array ( [0] => )
alebo
array(1) { [0]=> NULL }
ak tomu chápem správne, v $hodnoty nie je nič?
TWE3K
Profil
po úprave načítania do premennej:
$hodnoty = array($_POST["hodnoty"]);

my už funguje skúšobná funkcia pocet ..

Celkom však nechápem vašej rade:
Funkci PotrebneIP prostě předejte celé pole $_POST['hodnoty']
Tori
Profil
myslela jsem to samé, co jste teď udělal s tou zkušební funkcí.
TWE3K
Profil
skúsil som to, len stále mi vypisovalo iba "Array", tak som si myslel že máte na mysli niečo viacej..

nebude tam problém s ukladaním tých mocnín dvojky do $celkovypocet[] = xx ?

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:

0