Autor Zpráva
anonym_
Profil *
Ahoj, potřebuji poradit, jak udělat proměnnou, kterou bych mohl definovat ve funkci č.1 tak, abych ji mohl zavolat ve funkci č.2 a vypsala správnou hodnotu, kterou jsem ji předal v prvni funkci. Zkoušel jsem global $hodnota; $hodnota =5;, ve druhe funkci jsem ji zavolal pomoci $GLOBALS['hodnota'] a vždy mi vypsala nulu. Nevíte někdo jak na to? Byl bych vám moc vděčný. Díky.
panther
Profil
anonym:
předávej proměnnou jako parametr funkce.
Tori
Profil
Globálním proměnným bych se radši vyhnula - funkce by měla být nezávislá na okolní kódu. Buď použijte návratové hodnoty
$var = funkce1();
funkce2($var);
anebo předávejte funkci odkaz na proměnnou:
function funkce1(&$promenna)  {
  $promenna = 5;
}
$var = 0;
funkce1($var); // předání odkazem - $var má teď hodnotu 5
funkce2($var); // předání hodnotou - funkce2 dostane jen obsah proměnné, $var se nezmění
Ale první způsob je víc blbuvzdorný.
anonym_
Profil *
No, nakonec jsem to vyřešil přes $_SESSION, jelikož mě předávání proměnné nefungovalo. Druhou funkci jsem ořezal, tak stačilo předat parametry té první. Měl jsem podmínku, pokud se $promenna==1, tak $i=5; $promenna==2, tak $i=4;
pak jsem to předal funkci
function vypocti($x){
$pocet=$x*5;
echo $pocet;
}
vypocti($i);

bohužel mi to vypsalo nulu. Nevím, kde jsem udělal chybu, sice už mi to jede přes session, ale i tak bych se rád poučil. Děkuji všem za odpovědi.
Tori
Profil
anonym:
Můžete ukázat, jak nastavujete tu $i? Zřejmě je chyba tam, takže funkce vypocti dostane parametrem nulu.
anonym_
Profil *
  if(isset($_GET["misto"])) {
    $promenna=$_GET["misto"];
    if($promenna=="les") {
      les();
      $i=3;
    }
    elseif($promenna=="louka") {
      louka();
      $i=4;
    }
    elseif($promenna=="mocal") {
       mocal();
       $i=5;
    }
    elseif($promenna=="hory") {
      hory();
      $i=4;
    }
 }
 if(isset($_POST["jak_dlouho"])) {
  $cas=$_POST["jak_dlouho"];
  if($cas>0 AND $cas<10){
    zacni($i);
  }
}
function zacni($x) { 
      $pocet=$x*$_POST["jak_dlouho"];
      $SQL=mysql_query("INSERT INTO akce SET id=' ',vyprava=1,jmeno=xxx,pocet=$pocet");
 }

proměnna POST obsahuje data, které jsem zadával ve formuláři, takže tam chyba nebude (zkoušel jsem echo $_POST["jak_dlouho"])
ps:je to trochu ořezané, takže tam nejsou všechny funkce ve skriptu, tohle by mělo stačit, jinde proměnnou $i nepouzivam)
Tori
Profil
Nikde nevidím, na jakou hodnotu se má $i nastavit, pokud neexistuje klíč $_GET[misto].
Jinak i ten čas bych předávala parametrem:
 if(isset($_POST["jak_dlouho"])) {
  $cas = intval($_POST["jak_dlouho"]); // když se to má použít jako číslo
  if($cas>0 AND $cas<10){
    zacni($i, $cas);
  }
}
function zacni($x, $cas) { 
      $pocet=$x*$cas;
      $SQL=mysql_query("INSERT INTO akce SET id=' ',vyprava=1,jmeno=xxx,pocet=$pocet");
 }
A jestli na sloupci id máte AUTO_INCREMENT, tak ho vůbec nemusíte do toho dotazu dávat, ID se doplní samo.
anonym_
Profil *
klíč $_GET bude fungovat pokaždé, jinak script nevypíše jednu z funkcí louka, hory atd... (funkce obsahují echo text, takže by se mi nic nevypsalo). takže nevím, kde je chyba... no neva, $i jsem předal pomosí session, ted to funguje, s tím časem máte pravdu, je to tak lepší. Díky, že jste si našla čas na můj problém.
peta
Profil
Tori:
function funkce1(&$promenna)
To je sice fajn, ale kdyz tech parametru mas 6 a pokazde to psat 6x, to radeji 1x napisi do funkce global $a,$b,$c,$d,$e,$f.

anonym:
Nacpat vsechno do session tez neni prilis trhak. Session se posilaji jako cookies uzivateli, pokud to ma povolene. 10 hodnot nic neni, ale nejvetsi machri tam davaji 50k soubory :)
Tori
Profil
peta:
<mimo-téma>
ale kdyz tech parametru mas 6 a pokazde to psat 6x
To je subjektivní, když to anonymovi nebude vyhovovat, tak si to přepíše jinak. Z mého pohledu zase používání glob.proměnných ve funkci ruší její nezávislost a znovupoužitelnost jinde, a parametry mi napovídá IDE. Takhle bych si musela pamatovat, že nesmím používat některé názvy proměnných, bo je jakási funkce potřebuje, a na to su lenivá.
</mimo-téma>

Session se posilaji jako cookies uzivateli
Cože?? Odkdy? Snad se posílá jen SID, pokud vím?
Joker: tu reakci můžu zas smazat, když nebude na co reagovat. :) (anebo vyhoďte #9 i #10)
Joker
Profil
peta:
kdyz tech parametru mas 6 a pokazde to psat 6x, to radeji 1x napisi do funkce global $a,$b,$c,$d,$e,$f.
Pak je ohromně bezva takový kód ladit a hledat, proč ta proměnná nemá hodnotu jakou má mít.

edit: To s tou session je už vůbec pitomost. Nebýt reakce Tori, šlo to do kontejneru. Ještě jednou žádám, když nevíš jak to je, tak to nekomentuj, nebo si tu odpověď alespoň nejdřív ověř!
Žádný jiný odpovídající tu neposílá takové množství nesprávných anebo zavádějících rad.

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