Autor Zpráva
Apacuka
Profil
Zdravím,
pokud mám tento kód, je vše v pořádku.

<?php
if ($_POST["odesli"]=="Vykonej")
{ udela nejakej prikaz; }
?>
<form method="post" action="<?php $PHP_SELF ?>">
<input type="Submit" name="odesli" value="Vykonej">
</form>

Lze ale udělat jen normální odkaz, abych neměl ty tlačítka a nemusel používat <form>?
Něco ve stylu
<a href="<?php $PHP_SELF ?>&amp;neco=vykonej">Vykonej</a>.
Že by mě to po stisknutí tohoto odkazu přehodilo na část skriptu a ten se následně vykonal?
tiso
Profil
Apacuka: Lze. Len miesto &amp; použi ?
Apacuka
Profil
Vždycky přeci musí být &amp; mezi oddělenýma příkazama
?page=stranka1&amp;neco=vykonej

takhle by to bylo špatně
?page=stranka1?neco=vykonej

co ale napsat do toho skriptu, aby odkaz poznal, že zrovna tohle má udělat ?

Když tam vložím tohle

<?php
if ($_GET["neco"]=="vykonej") {
$sql=db_query("UPDATE alba SET schvalit=1 WHERE id_a=$id");
echo "<div class=\"hlaskaok\">Provedeno</div>";
}
?>

tak mi to hodí hlášku Notice: Undefined index: neco in soubor.php on line 31


Proto se ptám jestli to jde vůbec takhl udělat, nebo jediná možnost je použít formulář.
khubajsn
Profil *
Bodejť by ti to nevyhazovalo hlášku nedefinovaný index!
To neco, co ve skriptu chceš tak neposíláš. Posílej skript.php?neco=vykonej nebo to uprav a posílej skript.php?odesli=Vykonej ,
SwimX
Profil
khubajsn:
tvoje odpověď je nějak zcestná, jaký je rozdíl mezi neco=vykonej a odesli=vykonej?

Apacuka:
Vždycky přeci musí být &amp; mezi oddělenýma příkazama
ano, správně, ale echo PHP SELF ti nevrátí $_GET proměnné, pouze název souboru, takže index.php proto tiso říká, dej jako první ? a potom už &
 <a href="<?php echo $PHP_SELF ?>?neco=vykonej&a=dalsi">Vykonej</a>.


jinak je to dobře, takto uděláš odkaz. A přesně jak píšeš
<?php 
if ($_GET["neco"]=="vykonej") { 
$sql=db_query("UPDATE alba SET schvalit=1 WHERE id_a=$id"); 
echo "<div class=\"hlaskaok\">Provedeno</div>"; 
} 
?>


todle se zpracuje pouze pokud bude v proměnné $_GET['neco'] vykonej

ta hláška znamená, že testuješ proměnnou která neexistuje. Čili na stránce index.php není $_GET['neco'] definovaná.
Ta hláška je jenom warning, takže by to mělo běhat, ale jak se jí zbavit:

if (isset($_GET["neco"]) and $_GET["neco"]=="vykonej") {

nebo
if (@$_GET["neco"]=="vykonej") {

@ před proměnnou nebo funkcí potlačí chybové hlášení v případě že proměnná nebo funkce není definována.
Apacuka
Profil
khubajsn
jasný že ty odkazy mam presne podle svyho skriptu

proc se ale zobrazuje po nacteni stranky ta hlaska.

Pokud odstranim error_reporting(E_ALL); tak je to ok, ale to preci tu chybu neodstrani.
SwimX
Profil
Apacuka:
Pokud odstranim error_reporting(E_ALL); tak je to ok, ale to preci tu chybu neodstrani.
odstranění jsem popsal, ale až to budeš dávat na ostrý web, tak si stejne dej: error_reporting(0); uživatele stránek tvoje chyby nezajímaj, naopak, zkušenější by jich mohli využít.
Apacuka
Profil
SwimX: dekuju moc za vysvetleni. Tohle bylo presne co jsem potreboval slyset. A zase jsem o neco chytrejsi

pouzil jsem teda
if (@$_GET["neco"]=="vykonej") {

a
error_reporting(E_ALL);
si tam stale muzu nechat .. jsem rad :)
Apacuka
Profil
Proto ten vypis chyb mam na strankach, abych se jich zbavil uz v zakladu.
Jinak ty stranky nedelam na localhostu, ale webzdarma ... takze tech chyb pokud nejakou nekdo najde, muze vyuzit jiz ted :D
SwimX
Profil
Apacuka:
takze tech chyb pokud nejakou nekdo najde, muze vyuzit jiz ted :D
tak dost dobře nevím, co bych zrovna s toudle chybou dělal.
Jinak ten zavináč potlačí chybu, takže se ti nevypíše, takže je to dost stejné jako když zršíš error reporting.
Aby chyba ani nenastala musel bys testovat zda daná proměnná existuje viz:
if (isset($_GET["neco"]) and $_GET["neco"]=="vykonej") {


takže být tebou tak omezím error reporting ne na all, ale na něco co nevypisuje tydle blbosti, @nepíšu, je to s ním nepřehledné, a je to stejné :) ale tak, to už je tvoje věc :)
Apacuka
Profil
tek sem to na tvoje doporuceni otestoval + nechal vypis chyb ALL
a je to OK :)


Jak by se takove chyby dalo zneuzit, kdyz mam vsechno overovany pres session + prava uzivatele?
Apacuka
Profil
jeste ze sem se zeptal.

Misto 4 souboru mam ted jeden usporadanej :)

jeste jdnou moc dik :)
AM_
Profil
Jak by se takove chyby dalo zneuzit, kdyz mam vsechno overovany pres session + prava uzivatele?
chybová hláška podává často užitečné informace pro hackera - povahu chyby, absolutní cestu na disku serveru, název PHP souborů atd... přímo přes tu chybovou hlášku ti to nikdo nenahackuje, ale může to pomoct hackerovi najít si jinou potenciální chybu ve skriptu.

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: