Autor Zpráva
RastyAmateur
Profil
Dobrý den, opravdu již nevím, proč mi to stále hlásí "Parse error: syntax error, unexpected '}', expecting ',' or ';' in G:\web\Programy\VertrigoServ\www\tjsh\action_novinky2.php on line 44". Mám kód:

    <?php
    # Legenda
      $legend = $_POST['legend'];
      $nadpis = $_POST['nadpis'];
      $text = $_POST['text'];
      $pass = $_POST['heslo'];
      $password = "krtek";
      $password1 = "sysel";
      
    # Podpisy
      if ($pass == $password) $autor = "Krtek";
      if ($pass == $password1) $autor = "Sysel";
      
    # Vložení příspěvku do "novinky_archiv.txt"   
      if ($pass == $password or $password1){
        file_put_contents("novinky_archiv.txt", "<fieldset><legend>".$legend."</legend><b>".$nadpis."
        </b><br>".$text."<br><i><small><small>".$autor."</small></small></i></fieldset>"."\r\n".file_get_contents("novinky_archiv.txt"));
        
    # Oznámení     
        echo'
              <h1 style=/"font-size: 50px;/">
                Příspěvek byl úspěšně přidán!
              </h1>
              <div style="text-align: center;">
                <span class="_002">
                  <a href="novinky.php">Pokud Váš prohlížeč nepodporuje automatické přesměrování, klikněte zde!
                </span>
              </div>
            '
        } else { echo '
                    <h1 style=/"font-size: 35px;/">
                      Příspěvek nebyl přidán, heslo nebylo zadáno správně!
                    </h1>
                    <div style="text-align: center;">
                      <span class="_002">
                        <a href="novinky.php">Pokud Váš prohlížeč nepodporuje automatické přesměrování, klikněte zde!
                      </span>
                    </div>  
                  '}                                   
    ?>

Kde je chyba? Primitivní kód!!


Dodávám: line 44 = " } elseif { echo '" (line 27)
juriad
Profil
Řádek 17: Za echem musí být mezera.
Řádek 26: Na konci chybí středník.
Řádek 36: Za apostrofem chybí středník.

Chybová hláška: Nečekáná uzavírací složeně závorka, očekávaná čárka nebo středník.
RastyAmateur
Profil
Díky :-) Již mi to funguje, ale stále ne tak jak bych chtěl :(
Joker
Profil
RastyAmateur:
Chyby syntaxe = špatně napsaný kód se v první řadě snažte najít sám.
Použijte editor, který na ně upozorňuje rovnou při psaní kódu.
Viz také Jaký editor pro PHP (přehled editorů), nebo povídání o editorech na Péhápko.cz.

Jelikož není označené co je řádek 44, nevím, jestli to je ta chyba, ale například řádek 27 je nesmysl:
} elseif { echo '

Kromě toho tam je spousta potenciálních problémů a z pohledu logického je docela vtipné třeba tohle:

if ($pass == $password or $password1)
= splněno pokud $pass je stejné jako $password anebo se $password1 vyhodnotí jako TRUE, tzn. jelikož to je řetězec, není prázdné a není "0".

Doplnění: Než jsem to napsal, obsah vlákna se poněkud aktualizoval.
RastyAmateur
Profil
Joker mohl by jsi mi prosím blíže vysvětlit to s tou podmínkou? Jak mám tedy udělat, aby to fungovalo?


Tak předtím mi nefungovalo $password1 a nyní mi to tam hází příspěvky i se špatným heslem :(
Joker
Profil
RastyAmateur:
Tak odhadoval bych, že $password1 se má taky kontrolovat proti $pass?
if (($pass == $password) or ($pass == $password1))
- ta úplně nejzákladnější oprava.

Ale budoucí přidání dalšího uživatele do takového kódu bude opravdu „radost“.
Když už nic, alespoň by mohli uživatelé být definovaní na začátku jako pole a testovat, jestli heslo (nebo spíš bych řekl něco jako přístupový klíč) v poli existuje a podle toho vybrat jméno.
RastyAmateur
Profil
Joo! díky Joker, konečně mi to funguje..

Nemyslím si, že by přidání "uživatele" bylo nějak složité. Nastavím pro něj jen $passwordX, vložím ho do podmínky a vytvořím pro něj $autora...

Vím, že pomocí MySQL by to jistě šlo řešit mnohem lépe, ale nevím jak udělat, aby mi SQL při vypisování dalo každou novinku do jednoho fieldsetu...

A co myslíš tím, že by uživatelé mohli být definováni a testováni na začátku a to s tim přístupovým kódem?

Ještě jednou díky :)
juriad
Profil
# definujeme uživatele:
$users = array(
  'pass1' => 'user1',
  'pass2' => 'user2'
);

# pokud v poli $users neexistuje klíč $pass
if (!isset($users[$pass])) {
  # nepřihlášenému se ukáže chyba
  exit("Nemáš oprávnění!");
}
$autor = $users[$pass];
# sem se dostane jen přihlášený uživatel
Joker
Profil
RastyAmateur:
Nemyslím si, že by přidání "uživatele" bylo nějak složité. Nastavím pro něj jen $passwordX, vložím ho do podmínky a vytvořím pro něj $autora...
A přidat jméno autora.
Když vezmu, že ten skript se skládá prakticky z definice hesel, definice podpisů a toho IF-u vypisujícího HTML kód, všechno z toho se musí při přidání uživatele upravit.

Vím, že pomocí MySQL by to jistě šlo řešit mnohem lépe, ale nevím jak udělat, aby mi SQL při vypisování dalo každou novinku do jednoho fieldsetu
Nemusí to být hned databáze, ale alespoň něco, co půjde snadno upravit.

Docela primitivní řešení by bylo:
<?php
// Definice uživatelů
$uzivatele = array(
  /* jeden uživatel je array, abych šly případně evidovat i další věci kromě jména */
  "krtek" => array("jmeno" => "Krtek")
  , "sysel" => array("jmeno" => "Sysel")
);

$klic = $_POST["heslo"];
// Pokud v poli uživatelů heslo existuje jako klíč, je přihlášen
$prihlasen = array_key_exists($klic, $uzivatele);

if ($prihlasen) {
  $jmeno = $uzivatele[$klic]["jmeno"];
// uděláme akce pro přihlášeného uživatele
}

juriad byl opět rychlejší :) Obě řešení jsou hodně podobná, ale tak nechávám i to moje.
RastyAmateur
Profil
Abych toto zmákl, natolik PHP neumím, jsem rád, že jsem pochopil, co jste mi tu napsali :) Ještě jednou děkuji, pro dnešek končím :) Ahojte
Joker
Profil
RastyAmateur:
Tak co zkusit nějakou učebnici, třeba obligátní Péhápko?
RastyAmateur
Profil
Joker, ty jsi doplnil text v #4. Ano, za to se omlouvám, pokud si správně vzpomínám, u "elseif" jsem umazával "-if"...
A ještě jsem v prvním příspěvku doplnil Legendu

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: