Autor Zpráva
Amaterupl
Profil
Ahoj,
učím se PHP.
Ale mám teď problém se syntaxí jednoho příkazu (asi se budete smát, ale jsem úplný začátečník):

Zde můj kód pro zaheslování zobrazení stránky aktualni.html (funguje..., ale vždy pouze jen na jedno heslo):

zadej heslo <form action="t.php" method="post">
<input name="heslo" type="password">
<input type="submit" value="ok">
</form>
 
<?php
$heslo =$_POST['heslo'];
 
if ($heslo=="aa") include "aktualni.html";
else echo "Chybné heslo";
?>

Ale potřeboval bych, abych do toho rozhodovacího bloku "if" mohl zadat ještě více možných hesel, tedy nějak do tohoto bloku vložit podmínku "nebo".

Např. tedy, že uživateli se zobrazí stránka "aktualni.html", pokud zadá heslo "aa" nebo "22" nebo "fk5" nebo "88" nebo "koj" nebo atd. atd. ....

Pokouším se to nějak napsat pomocí logického operátoru "||" , ale nějak mi to pořád nejde.

Můžete mi prosím poradit nebo tu syntaxi rovnou napsat?

Předem Vám moc a moc děkuji za vaši ochotu a laskavost,

Moderátor juriad: Neobaluj prosím celý příspěvek mezi značky [pre] a [/pre].
Moderátor juriad: Nikdy nezakládej duplicity. Myslíš-li, že vlákno potřebuje nějakou úpravu, zavolej moderátora napsáním třech mmm
Taps
Profil
Nejlpsi by bylo podle me hesla ulozit do pole a pak kontrolovat vyskyt v poli
<?
$hesla  = ['heslo1', 'heslo2'];

If (in_array($heslo,$hesla)){
Echo ' heslo je spravne';
}else{
Echo ' chyyba';
}
?>
RastyAmateur
Profil
if($heslo == "aa") or ($heslo == "bb"))
Co, když budeš chtít přidat nebo odebrat heslo? Psát další část podmínky není moc ideální. Přečti si dokumentaci funkce in_array() a zkus vymyslet jiné řešení... (jde vymyslet spooousta řešení, ale toto není tak složité :-) )


Taps:
Já než to na tom mobilu napíšu... Ale máš prohozené argumenty ve funkci.
Amaterupl
Profil
RastyAmateur:
díky moc, já jsem rád, že zatím "vůbec jsem", zkusím to :)
Taps
Profil
RastyAmateur:
Diky za upozorneni, opravil jsem to - taky pisi z mobilu :-)
Amaterupl
Profil
tak jsem tu jednodussi variantu zkusil vlozit, ale nejede to...

takto jsem to napsal, co tam muze byt za chyba (v mezerách, v závorkách? ....)?

zadej heslo <form action="t.php" method="post">
<input name="heslo" type="password">
<input type="submit" value="ok">
</form>

<?
$heslo =$_POST['heslo'];

if($heslo == "aa") or ($heslo == "bb")) include "aktualne.html";
else echo "Chybné heslo";
?>
Taps
Profil
Chybi ti zavorka u if
Amaterupl
Profil
ÚÚÚUŽ to frčí.... jste fakt dobří.... je to paráda učit se u odborníků.... DÍKY MOC
juriad
Profil
A dost. Pánové, chápu, že chcete poradit, ale opravdu musíte svůj příspěvek plný chyb naklepat za několik sekund na mobilu? Nikomu tím nepomáháte, vlákno se zaplevelí vzájemným poukazováním chyb.

Amaterupl:
Lépe použij řešení od Tapse, to je teď správné a v připadě většího počtu hesel i nejpřehlednější.
Ještě ti doporučím u podmínek vždy psát závorky { }, každý příkaz psát na nový řádek a vyhnout se operátoru or (nahradit jej za ||, který jsi správně chtěl použít).
Amaterupl
Profil
aha, tak to za chvili zkusim podle TAPSE,

Juriade, může tě poprosit, napsal by jsi sem ten script i s těmi závorkami } { podle tebe,

Díky moc, ať v tom nemám chaos už od začátku , díky moc
Keeehi
Profil
Amaterupl:
Zejší diskutéři sepsali nějaké základy PHP. Zde jsou popsané podmínky. Hned na začátku je popsán právě ten problém se závorkami. Doporučuji si pak projít celou učebnici.
juriad
Profil
<?php # vždy používej dlouhý otevírací tag, zkracené totiž vyžadují speciální konfiguraci PHP

# tímto zajistíš, že když uživatel přijde na t.php jinak, než skrz formulář s heslem, tak mu vynadáš
if (!isset($_POST['heslo'])) { # pokud neexistuje heslo:
  die("Nevyplněné heslo");
}

# teď víme, že heslo existuje, můžeme si ho přiřadit do proměnné
$heslo = $_POST['heslo'];

# pole obsahující povolená hesla
$hesla  = ['aa', 'bb'];

if (in_array($heslo, $hesla)) { # pokud je heslo mezi povolenými
  include "aktualne.html";
} else {
  echo "Chybné heslo";
}

# pokud nic dalšího v souboru není, nemusíš psát zavírací značku 
?>

Všimni si také, kde píši v zdrojovém kódu mezery.

Opraveno, doplnil jsem na 4. řádku podtržítko. Omlouvám se.
Amaterupl
Profil
Juriade zkouším to.
Když spustím ten jednoduchý skript od Rastyamateura, tak to funguje bezvadně. I když tam vložím třeba 50 hesel.

Ale když spustím ten tvůj-Tapsův, tak to pořád píše pouze hlášku "Nevyplněné heslo" (a to i když nějaké heslo vložím do okénka)
juriad
Profil
Amaterupl:
Opravil jsem to. Ta proměnná se má jmenovat $_POST, nikoli $POST. Sypu si popel na hlavu.
Amaterupl
Profil
no joo, už to frčí... tak už vím pár chyb, na které si dávat pozor... tady se líp učí, jak podle nějaké knihy...

ještě mi prosím řekni, co vlastně znamenají ty závorky {} ... k čemu jsou dobré?
RastyAmateur
Profil
Amaterupl:
Označuje blok příkazů, které se mají provést, pokud je (není) podmínka splněná. Pokud je tam nedáš, podmínka se vztahuje pouze na první následující příkaz.
<?php
if(1 == 2) 
echo "Jedna";
echo "Dva";
echo "Tři";
# Vypíše to "DvaTři"

if(1 == 2){ 
echo "Jedna";
echo "Dva";
}
echo "Tři";
# Vypíše to "Tři"
?>
juriad
Profil
Amaterupl:
Ty se používají, když máš víc přikazů v podmínce:
if (1 < 2) {
  echo "To asi nikoho nepřekvapí, že:";
  echo "1 < 2";
} else {
  echo "Vesmír se nám zhroutil.";
  echo "Utíkejte, co vám jen nohy stačí";
}


Porovnejme to všemi možnými variantami. Upozorňuji, že odřádování a odsazení nemá v PHP žádný význam, používá se jen pro tvé pohodlí a zvýšení čitelnosti.
if (1 < 2)
  echo "To asi nikoho nepřekvapí, že:";
  echo "1 < 2";
else
  echo "Vesmír se nám zhroutil.";
  echo "Utíkejte, co vám jen nohy stačí";
Toto způsobí chybu, protože else není očekávané. První přikaz po ifu je podmíněný, druhý je už úplně mimo podmínku a else k ničemu nepatří.

if (1 < 2) {
  echo "To asi nikoho nepřekvapí, že:";
  echo "1 < 2";
} else
  echo "Vesmír se nám zhroutil.";
  echo "Utíkejte, co vám jen nohy stačí";
Toto funguje, ale v každém případě to vypíše "Utíkejte, co vám jen nohy stačí", protože druhé echo je už mimo else, podmíněný je jen první příkaz.

if (1 < 2)
  echo "To asi nikoho nepřekvapí, že:";
  echo "1 < 2";
else {
  echo "Vesmír se nám zhroutil.";
  echo "Utíkejte, co vám jen nohy stačí";
}
Toto opět skončí chybou.


Často se doporučuje složené závorky psát vždy. Protože se můžeš rozhodnout přepsat původně funkční kód:
if (1 < 2)
  echo "To asi nikoho nepřekvapí, že: 1 < 2";
else
  echo "Vesmír se nám zhroutil. Utíkejte, co vám jen nohy stačí";
na víc řádků a zapomeneš napsat závorky.

Můžeš tedy uvažovat tak, že závorky automatikcy patří za: if, else, for, foreach, while, do.
Někdy jsou totiž ty závorky povinné: class, interface, trait, function, switch, try, catch, finally.
Někdy je možné nahradit konstrukci se závorkami za dvojtečkovou notaci, ale tomu se doporučuji vyhnout.
Amaterupl
Profil
díky moc..., ty joo, to je dobrý, to si proštuduju

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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