Autor Zpráva
martanius
Profil
Zdravím,

potřeboval byhc prosím poradit. Mám tu skript na komentáře a už jsem si to i trochu upravil, ale pořád nemohu přijít na jednu věc a tou je zalomení řádku v tabulce.

<h2>Pøidání komentáøe</h2>
      <form action="../gtasa/gtasastory.php" method="post">
        <table>
          <tbody>
            <tr>
              <th>*Jméno: </th>
              <td><input name="jmeno" maxlength="25" type="text"></td>
            </tr>
            <tr>
              <th>E-mail: </th>
              <td><input name="email" maxlength="25" type="text">
[nepovinné]</td>
            </tr>
            <tr>
              <th>Web: </th>
              <td><input name="web" value="http://" maxlength="30" type="text"> [nepovinné]</td>
            </tr>
            <tr>
              <th>*Text: </th>
              <td><textarea cols="60" rows="5" name="zprava"></textarea></td>
            </tr>
            <tr>
              <th><br>
              </th>
              <td><input name="submit" value="odeslat" type="submit"></td>
            </tr>
          </tbody>
        </table>
      </form>
<?php if(isset($_POST['submit'])){
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$web = $_POST['web'];
$zprava = $_POST['zprava'];

$jmeno=HTMLSpecialChars($jmeno); //pøevede nìkteré znaky na entity 
$email=HTMLSpecialChars($email);
$web=HTMLSpecialChars($web);
$zprava=HTMLSpecialChars($zprava);

$jmeno=stripslashes($jmeno); //odstraní lomítka
$email=stripslashes($email);
$web=stripslashes($web);
$zprava=stripslashes($zprava);

$zprava = str_replace("\n"," <br> ", $zprava); //nové øádky nahradí <br>
$zprava = substr($zprava, 0, 10000);//zpráva bude mít maximálnì 10000 znakù pomocí substr

$email_celek=" | <a href='mailto:$email'>$email</a>";
$web_celek=" | <a href='$web'>$web</a>";

if ($web=="http://"){$web_celek="";} //pokud se nevyplní nic se nevypí¹e 
if ($email==""){$email_celek="";} // -||-
if ($zprava!="" and $jmeno!=""){ //provede se pokud není prázdná zpráva a jméno
$datum = Date("j/m/Y H:i:s", Time());
$celek="<table style= table-layout=fixed width=100 border=2><tbody><tr><td style= width=100 max-width=100> <p>Komentáø odeslal <strong>$jmeno</strong>$email_celek $web_celek dne <i>$datum</i></p><p>$zprava</p> </td></tr></tbody></table><hr>";
$soubor = fopen ('cmnt/gtasastory/data.inc','a'); //otevøe soubor pro doplòování
fwrite ($soubor, $celek); //zapí¹e zprávu
fclose ($soubor); //zavøe soubor
$message = "Zpráva vlo¾ena!";
echo "<style>.zelena{color:green;}</style>";
echo "<div class=\"zelena\"><strong>$message<strong></div>";
}
}
$message = "Prosím, vyplòte pole jméno a text.";
echo "<style>.cervena{color:red;}</style>";
echo "<div class=\"cervena\"><strong>$message<strong></div>";
include "cmnt/gtasastory/data.inc";
?>

Ve skryptu sice je, aby když ten kdo píše koment a dá enter, tak aby se to zalomilo, ale při psaní komentu se to zalamuje samo a tudíž není třeba dávat enter, prostě vznikne z toho jeden dlooooooooouhý řádek.

Konkrétně zde se definuje konečný koment :

$celek="<table style= table-layout=fixed width=100 border=2><tbody><tr><td style= width=100 max-width=100> <p>Komentáø odeslal <strong>$jmeno</strong>$email_celek $web_celek dne <i>$datum</i></p><p>$zprava</p> </td></tr></tbody></table><hr>";

Mám to udělané ještě tak, aby kolem byl rámeček, takže jsem to dal do tabulky a zkoušel jsem nastavit šířku, maximální šířku atd..., ale prostě si ta tabulka dělá co chce a velikost se mění podle textu, takže když napíšu dlouhý text, tak se celý web roztáhne... Jak to prosím zalomit ? Nejlépe, aby se to nezalomilo v půlce slova, ale normálně.

Zkoušel jsem už pár způsobů, například word-wrap, ale ten to zalomí po každé mezeře, poté jsem se dočetl, že pomůže když se nastaví table-layout=fixed, ale žádná změna.

Děkuji.
Taps
Profil
martanius:
za zkoušel jsi wordwrap v php?
<?
wordwrap();
?>
martanius
Profil
Děkuji, pomohlo to :)
Jan Kozák
Profil
martanius:
Kaskádové styly se nezapisují takto:
<table style= table-layout=fixed width=100 border=2><tbody><tr><td style= width=100 max-width=100>
Nýbrž:
<table style="table-layout:fixed; width:100px; border:2px solid"><tr><td>

Za druhé, při vkládání nového komentáře nezakládej novou tabulku, ale informace buď vlož jako nový řádek stávající jedné tabulky, nebo tabulky vůbec nepoužívej. Druhá možnost je v tomto případě lepší. Rámeček můžeš aplikovat i na jiné prvky (například na <div>, <p>…), tabulku k tomu vůbec nepotřebuješ.

Protože v souboru se ti styly zápisu komentáře s každým dalším stále opakují, bude praktičtější použít u nich třídy a jejich vzhled pak nastavit externě, jako máš nastavenou třídu red.

PHP funkci wordwrap nepoužívej, jde o chybnou radu. PHP neví, jak velké písmo se uživateli v prohlížeči zobrazí. Pokud si uživatel zobrazí větší nebo menší písmo, zalomíš mu to špatně. Zvlášť nevhodné to bude, pokud používáš proporcionální písmo, tedy font, kde znak „i“ je užší než „W“. Řádky s úzkými znaky pak budeš mít zbytečně krátké, ty s širokými se ti do vymezeného prostoru vůbec nevejdou.
martanius
Profil
Děkuji za rady, to s tou tabulkou jsem tedy předělal na jednu tabulku a přidávám už jen řádky a buňky.

S těmi kaskádovými styly, když přidám ty středníky a uvozovky, tak mě to píše chybu unexpected symbol.
S tím wordwrap, jak to tedy jinak udělat ?

Děkuji.
lionel messi
Profil
martanius:
S těmi kaskádovými styly, když přidám ty středníky a uvozovky, tak mě to píše chybu unexpected symbol.
Nečítal som celú diskusiu, ale veľmi pravdepodobne nepoužívaš escapovanie. Znaky, kt. používaš zároveň na ohraničenie reťazca v PHP, musíš totiž pri ich použití v bežnom kontexte (= v rámci reťazca, ktorý je nimi ohraničený) escapovať, čiže im predradiť spätné lomítko.

Správny zápis v kontexte reťazca v rámci PHP ilustrujem na príklade od Jana Kozáka:

$celek = "<table style=\"table-layout:fixed; width:100px; border:2px solid\"><tr><td>$jmeno</td></tr></table>";

Rovnocennou alternatívou je hodnoty HTML atribútov ohraničovať apostrofmi:

$celek = "<table style='table-layout:fixed; width:100px; border:2px solid'><tr><td>$jmeno</td></tr></table>";
martanius
Profil
Jo takhlé :D
Díky :)
Jan Kozák
Profil
martanius:
S tím wordwrap, jak to tedy jinak udělat ?
Použij CSS vlastnost word-wrap s hodnotou break-word. Pokud očekáváš trošku delší text, zvaž, zda je ta šířka 100 pixelů dostatečná. Pro většinu představitelných účelů to bude příliš úzké a text tam nebude vypadat pěkně.
martanius
Profil
Dobře, děkuju. Mám ještě jeden problém... když jsem psal nějaký příspěvek s diakritikou, tak se to chovalo jakoby jsem nic nenapsal, čili to nic neodeslalo, Pak jsem na webu našel toto :

strtr($_POST['jmeno'],"\xe1\xe4\xe8\xef\xe9\xec\xed\xbe\xe5\xf2\xf3\xf6\xf5\xf4\xf8\xe0\x9a\x9d\xfa\xf9\xfc\xfb\xfd\x9e\xc1\xc4\xc8\xcf\xc9\xcc\xcd\xbc\xc5\xd2\xd3\xd6\xd5\xd4\xd8\xc0\x8a\x8d\xda\xd9\xdc\xdb\xdd\x8e","aacdeeillnoooorrstuuuuyzAACDEEILLNOOOORRSTUUUUYZ");

Což by mělo odstranit diakritiku a nechat jen písmena bez háčků a čárek, ale teď jsem si všiml, že mě to píše ž jako l a když napíšu třeba ěščřžýáíéňůú, tak se to chová stejně jako předtím - nic se neodešle.
Jak udělat, aby to bralo i normální diakritiku ?

Pak jsem na webu našel toto :

header("Content-Type: text/html; charset=ISO-8859-2");

dal jsem to na začátek scriptu, ale žádná změna.

Děkuji.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0