Autor Zpráva
Laco
Profil *
Zdravim

Robim stranku pre jedného známeho,
tu testujem na svojej domene, kde nemam ziaden problem.

Ale ked ju skopirujem na server s domenou, ktoru si zakupil, tak tam vznika nejaky problem,
Prehliadac stale vypisuje ze niektore premenne neboli este definovane, alebo neberie mi premenne z adresoveho riadku.

a nechce sa mi prerabat celu stranku, aby som musel pridavat $_POST[] alebo $_GET[] ked ani este neviem ci budem zobrazovat premenne v adresovom riadku alebo nie.

Potrebujem pomoc pls...

www.fotodarceky.eu/index1.php < tu sa na to pozrite... hned hore mi hovori ze su nedefinovane premenne, a nic nerobi, lebo premenne z adresoveho riadku neakceptuje, kedze nepouzivam $_POST ani $_GET.
Moderátor Joker: Správně je normální lomítko a ne zpětné

da sa to varovanie niekde vypnut? a aj to aby premenne bral normalne ? bez tych post a get?


prosim help...


dakujem!

pozrite aj

http://www.fotodarceky.eu/phpinf.php mozno to pomoze...

som zacatecnik :)

Moderátor Joker: Dva příspěvky sloučeny do jednoho
Moderátor Joker: Titulek „Problem s nastaveniami PHP“ byl moc obecný.
Joker
Profil
Laco:
Jde o nastavení register_globals.
Nicméně PHP má tohle vypnuté už dlouhé roky (superglobální pole byla přidána v roce 2001!) a je nejvyšší čas si na to zvyknout. Nebo spíš nejvyšší čas si na to zvyknout byl někdy před 5 lety.

Navíc vlastnost register_globals je zavržena a velmi se nedoporučuje na ni spoléhat.

nechce sa mi prerabat celu stranku, aby som musel pridavat $_POST[] alebo $_GET[]
V tomhle případě by to bylo velice vhodné.

ani este neviem ci budem zobrazovat premenne v adresovom riadku alebo nie
To je možná dobré si rozmyslet, pro různé typy situací se obvykle hodí buď metoda GET, nebo POST, není to úplně podle toho jak se zrovna programátor vyspí.
Ale jinak existuje ještě pole $_REQUEST, které obsahuje obojí.

da sa to varovanie niekde vypnut?
Tohle není dobrý přístup, přemýšlet jak potlačit chybové hlášky. Chybové hlášky jsou naši kamarádi, říkají nám, co je špatně.
Zobrazování té poznámky samozřejmě potlačit jde, výsledkem bude, že skript se bude chovat divně, ale nebude zobrazovat žádné chyby - což je ta nejhorší situace.
Jinak související nastavení jsou:
error_reporting - jaké všechny chyby jsou hlášeny, nedoporučuji moc omezovat.
display_errors - zda se chyby zobrazí do stránky. Na testovacím webu zapnout, na ostrém vypnout (návštěvníkům netřeba ty hlášky zobrazovat, těm stačí něco jako „Nastala chyba, na odstranění se pracuje“).
log_errors - na ostrém webu (kde se chyby nevypisují do stránky) zapnout, na testovacím webu podle situace.
Laco
Profil *
Joker:


Dik za radu, v tomto prípade som chcel vypnút chybové hlasenia len kvoli tomu upozorňovaniu že do
testovanej premennej ešte nebola žiadna hodnota priradená. Keď to PHP robí implicitne, tak prečo neustále priradzovať
do všetkých premenných prázdne hodnoty? !

Bez chybových hlášok by som stránku ani nezostavil, takže sú super kamaráti. :)

všade čítam o php.ini a pofdobne, kde by sa dalo registe_globals vypnúť, ale žiaden súbor na servery, kam kopírujem stránku..

mam sa dotázať u poskitovatela domény?

thnx
Joker
Profil
Laco:
kde by sa dalo registe_globals vypnúť
Naopak, v tomhle případě zapnout (register_globals právě zařizuje překlad na ty proměnné).

žiaden súbor na servery, kam kopírujem stránku
php.ini není v adresáři se stránkou. Na hostingu se typicky přímo měnit nedá, možná budou nějaká nastavení v administraci, ale typicky je to potřeba řešit s technickou podporou hostingu.
Ovšem register_globals lze nastavit i přes .htaccess (viz http://www.php.net/manual/en/ini.core.php#ini.register-globals )

prečo neustále priradzovať do všetkých premenných prázdne hodnoty?
Hmm, v čem přesně je problém?
Já měl za to, že jde o to, že skript nepoužívá $_GET a $_POST a spoléhá na to, že třeba skript.php?promenna=neco automaticky založí $promenna ="neco".
Nebo je problém v tom, že skript.php?promenna=neco funguje správně, ale když se vynechá to promenna=neco, napíše to tu poznámku?
Laco
Profil *
Joker:
Já měl za to, že jde o to, že skript nepoužívá $_GET a $_POST a spoléhá na to, že třeba skript.php?promenna=neco automaticky založí $promenna ="neco".
Ano presne o to ide, nepoužíval som $_GET a $_POST a teraz mám z toho chaos, niekde som čítal, že $_GET a $_POST sú dobré
na to ak chceme prečítať premennú odovzdanú formulárom.

je správne toto napríklad? :


<?php

$b = $b + 1; // Tu dostanem chybovú hlášku, že UNDEFINED VARIABLE.... prečo? ja to potrebujem mať vysvetlené ako decku.

echo $b;
echo $_REQUEST['b']; // Ktoré z tých sú správne?

ešte raz dík za ochotu.
Pilec
Profil *
Notice jsou chyby, ktere neovlivnuji beh skriptu, ale spise maji donutit programatora, aby se chytil za nos a rekl si, a bacha, tuhle promenou nemam deklarovanou. Hodne to pomaha pokud clovek napise trebas misto promene $page promenou $pgae (ve dve rano zcela bezna chyba :-D) tak mu to pomuze ten skript odladit.

Pokud se chces te notice zbavit, provedes to jednoduchym
if (isset($tt)) {
  echo $tt;
}
else {
  echo 'zatim nemam $tt deklarovanou tak ji treba muzu nastavit defaultni hodnotu'
  $tt = 0;
}
Moderátor Joker: Přesunuto z duplicitního dotazu.
Joker
Profil
Laco:
Pro jeden problém jedno vlákno, ať v tom není binec. Přesunul jsem odpověď sem.

<?php 
 $b = $b + 1; // Tu dostanem chybovú hlášku, že UNDEFINED VARIABLE.... prečo? ja to potrebujem mať vysvetlené ako decku. 

 echo $b; 
 echo $_REQUEST['b']; // Ktoré z tých sú správne?
2. řádek: Ve chvíli vyhodnocení $b+1 do $b ještě nebylo nic přiřazeno, takže to nedává smysl.
Generuje poznámku o nedefinované proměnné. PHP místo nedefinované hodnoty použije NULL, pro číselné operace se zkonvertuje na 0 a výsledkem bude $b=1.

Pokud jde o to druhé, obojí je správně, ale jsou to různé věci. To první vypíše hodnotu proměnné $b, to druhé vypíše hodnotu toho, co skriptu předal požadavek pod jménem "b".
Jestli proměnná vůbec existuje anebo má „neprázdnou“ hodnotu se dá testovat funkcemi isset a empty

Příklad:
Dejme tomu, že skript byl volán: skript.php?b=3
<?php 
 $b = $b + 1; // Chyba, $b ještě není definováno. Dosadí se NULL, výsledek bude 1, viz výše

 echo $b; // vypíše se hodnota $b, tedy 1
 echo $_REQUEST['b']; // Vypíše se co skript dostal v požadavku jako "b", tedy 3

Další příklad, obvyklé správné použití:
Opět předpokládám, že skript byl volán: skript.php?b=3
<?php 
  // Zkontroluji, zda jsem zvenku dostal "b". Pokud ne, dám si do $b 0, pokud ano, dám si tam to co jsem dostal
  // To samé je: if(isset($_REQUEST["b"])) $b = $_REQUEST["b"]; else $b = 0;
  $b = isset($_REQUEST["b"]) ? $_REQUEST["b"] : 0
  // nyní $b = 3
  $b = $b + 1; // $b = 4

 echo $b; // vypíše hodnotu $b, tedy 4
 echo $_REQUEST['b']; // vypíše 3
 // Samozřejmě $_REQUEST není nic než pole a hodnoty v něm jde taky přepisovat:
 $_REQUEST["b"] = 2;
 echo $_REQUEST['b']; // vypíše 2
DoubleThink
Profil *
Ještě zpět k register_globals. Ty je možné registrovat i ručně na začátku skriptu, například:
extract($_POST, EXTR_SKIP);

Nebo sofistikovaněji pomocí pear/PHP_Compat. Ale samozřejmě, jak zmiňoval Joker, je to obecně zavržená programovací technika.
Laco
Profil *
Joker:


Ďakujem

ešte by som chcel vedieť par vecí

script.php :

<form action="script.php?pr1=1" method="POST">
<input type="hidden" name="pr2" value="1">
<input type="submit">
</form>

čiže keď chcem v scripte ďalej pracovat s premennou $pr1... musím sa na ňu dotazovať pomocou $_POST['pr1'] ..... ?
a keď chcem robiť s premennou $pr2 ... tak stačí $pr2..... ?

napísal som celú stránku bez $_POST či $_REQUEST....
a cez formulár posielam celé polia premenných,

asi nemôžem jednoducho dať vo vsetkých súboroch prepísať nazvy premenných na $_POST['premenna']... boze čo je to za nezmyseľ... viac to komplikovať, proste potrebujem jednoducho pracovať s premennými a teraz na začiatku scriptu mám dať

if (isset $_REQUEST['premenna']) premenna = $_REQUEST['premenna'];

pre vsetky premenne? stracam tym flexibilitu..

neverím, že každý kto posiela premenné cez formulare, potom

celý čas pracuje s tou premennou vo forme $_POST['premenna'] + $_POST['premenna']*10-strpos($_POST['premenna'],....) ..... atd...

sory ale píšem to z nahnevanosti. lebo to nechapem :(
DoubleThink
Profil *
Laco:
neverím, že každý kto posiela premenné cez formulare, potom celý čas pracuje s tou premennou vo forme $_POST['premenna']
Ano, dělá to tak každý zkušenější programátor. V praxi se ale o globální pole, díky zapouzdření procedur, stará většinou jen controller na jednom místě.
Joker
Profil
Laco:
Poznámka, kód se vkládá mezi značky značky [pre] a [/pre] (stačí kliknout na ), pak ho to i obarví jako v mých příspěvcích.

čiže keď chcem v scripte ďalej pracovat s premennou $pr1... musím sa na ňu dotazovať pomocou $_POST['pr1'] ..... ?
a keď chcem robiť s premennou $pr2 ... tak stačí $pr2..... ?
Ne.
Kód:
<form action="script.php?pr1=1" method="POST"> 
<input type="hidden" name="pr2" value="1"> 
<input type="submit"> 
</form>
Formulářové pole pr2 se odesílá přes POST, ale pr1 je GET parametr. Čili v PHP bude:
$_GET["pr1"] = "1"
$_POST["pr2"] = "1"

asi nemôžem jednoducho dať vo vsetkých súboroch prepísať nazvy premenných na $_POST['premenna']
Všechny ne, jen to co přijde z formuláře.
Jinak v $_POST se obvykle drží data tak jak přišla a nepracuje se s nimi, pro nějaké úpravy se zkopírují do jiné proměnné.
Samozřejmě jde udělat:
$neco = $_POST["neco"];
a dál používat proměnnou $neco.

viac to komplikovať, proste potrebujem jednoducho pracovať s premennými a teraz na začiatku scriptu mám dať
Ono to není o moc komplikovanější než register_globals.
Zásadní nevýhoda register_globals je, že programátor nemá pod kontrolou kolik a jakých proměnných se vlastně vytvořilo.
Pokud byl programátor líný a neinicializoval si důsledně všechny proměnné, bylo pak možné hodnoty proměnných „podstrčit“ zvenku a tím hacknout aplikaci.
Příklad- skript.php:
<?php
if($tajneheslo == "hunter2") /* $tajneheslo je z formuláře*/
{
  $administrator = true;
}
if($administrator) echo("Kód pro administrátora");
?>
Stačí zavolat: skript.php?administrator=1 a jsem administrátor.

Fakt, že zapnuté register_globals vytvářelo takovéhle skryté bezpečnostní díry byl jeden z hlavních argumentů pro jeho zrušení.

stracam tym flexibilitu
V čem přesně? Myslím, že právě naopak.
Laco
Profil *
:) Stále som vďačný za ochotu venovať sa mi :)


Takže mám posledný dotaz,

test.php :

 

  <?php 
   
   if(!isset($t1[0][0])) $t1[0][0] = "";

   if(isset($_REQUEST['t1[0][0]'])) $t1[0][0] = $_REQUEST['t1[0][0]'];
     
   echo $t1[0][0];    // ani po poslaní formulárom sa tam to AHOJ neobjavy....   preeeeecooooo ?    

  <form action="test.php" method="POST">
   <input type="hidden" name="t1[0][0]" value="AHOJ">
   <input type="submit" value="OK">
  </form>



Prečo neviem získať tú hodnotu $t1[0][0] poslielanú formulárom? mozno niečo s rawurldecode treba niečo skúsiť?

ďikec
Laco
Profil *
zabudol som doložit značku konca PHP :


?> 


ale nie to je moj problém. :)

Dik.
Tori
Profil
name="t1[0][0]"  ==>  $_REQUEST['t1'][0][0]
...stačí si dát vypsat celé pole:
print_r($_REQUEST);
Laco
Profil *
Super ... to mi moc pomohlo...


a to znamená že:


 <input type="file" name="subor1">


a $_REQUEST['subor1'] je automaticky typu file? viem, že toto je už taka lenivá otázka mal by som to radšej študovať, no už len túto jednu vec potrebujem vedieť k prerábaniu stránky ....


vrelá vďaka.
Tori
Profil
Laco:
mal by som to radšej študovať
anebo aspoň vyzkoušet.
Odeslané soubory jsou (pokud se nepletu) v poli $_FILES.
Laco
Profil *
Hej, až sa hanbím....(stidím)

Ale som v praci a nemožem sa tomu teraz venovať a som netrpezlivý chcel smo to aspoň rychlo vedieť...

Ďik tomuto fóru :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0