Autor Zpráva
ra100
Profil *
ahojte,
moja otázka sa týka výpisu správy z DB na obrazovku.
Ide o fórum, kde sa správa po pridaní zobrazuje.
Problém spočíva v tom, že krátka správa, ktorá sa zmestí do width: 450px špecifikovaných v css pre <span>, sa zobrazí samozrejme dobre, no tzv. viac-riadkový príspevok sa mne zobrazuje samozrejme ako jeden riadok. Znamená to, že ak niekto bude písať do fóra hodinu, tak ja tam budem mať hodinu dlhý riadok !
Pokúšal som sa tento problém nekonečného riadku eliminovať nadstavením šírok v css, no skoro som zistil, že to nefunguje.
Tu už nestačím ani ja, ani moje knihy.
Posielam blok kódu, ktorý zobrazuje výpis z DB na stránku.


while ($vypis = mysqli_fetch_array($show_added)) 
{ 
echo '<hr />'; 
echo 'Dátum a čas : ',$vypis['datum'],'<br />'; 
echo 'Odosielateľ : ',$vypis['meno'],' (',$vypis['email'],')<br />'; 
echo 'Komentár :<span>',$vypis['sprava'],'</span><br />'; 
echo '<br />'; 
} 
echo '<hr />';


Moderátor nightfish: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
panther
Profil
ra100:
tohle nemá s PHP nic společného. Dej sem odkaz na stránku, ať je vidět, jak máš komentáře stylované. Něco tam máš špatně, dlouhý text se v čemkoliv zalomí, obzvláště, pokud je zadaná šířka.

Tvůj zápis je stejně nějaký divoký. Proč je komentář ve spanu? Je to řádkový element, kterému normálně nelze zadat rozměry. Má display: block; nebo float?

Znamená to, že ak niekto bude písať do fóra hodinu, tak ja tam budem mať hodinu dlhý riadok !
tohle jsem už vůbec nepochopil.
ra100
Profil *
panther:
Momentálne to mám len v mojom pc, púšťam to na localhoste.
Daj mi trochu času a nahrám to aj na web. Pridám aj kód.
K tomuto Něco tam máš špatně, dlouhý text se v čemkoliv zalomí, obzvláště, pokud je zadaná šířka.

a k tomuto Tvůj zápis je stejně nějaký divoký. Proč je komentář ve spanu? Je to řádkový element, kterému normálně nelze zadat rozměry.

ešte dodám, že chyba je možno niekde tu - echo 'Komentár :<span>',$vypis['sprava'],'</span><br />';
kde som asi nesprávne pochopil a predpokladal, že prvok <span> bude mať vpliv hoci aj na premennu $vypis['sprava'].
Ako som už písal prvok <span>, skúšal som to meniť aj s <p> napr., majú vpliv len na farbu, vyzľad typ atd. fontu.

Súhlasím, ako vravíš dlouhý text se v čemkoliv zalomí, obzvláště, pokud je zadaná šířka.
Preto som prekvapený, že <span> alebo <p> alebo <div> kde je to celé vložené, nemajú vpliv na zalamovanie riadku...

Takže poprosím o maly mmnt !
potrebujem to dostať do formy a na web.
panther
Profil
ra100:
ešte dodám, že chyba je možno niekde tu - echo 'Komentár :<span>',$vypis['sprava'],'</span><br />';
ve výsledku se vypíše obsah té proměnné, bude to tedy obyčejné HTML.

Teď koukám spíš na jinou věc. Nepíše ti to nějaké chyby celé?
echo 'Komentár :<span>',$vypis['sprava'],'</span><br />';
ke spojování řetězců slouží tečka, ne čárka.
Majkl578
Profil
panther:
To není tak úplně pravda, echo se chová jako funkce a dokáže tedy brát hodnoty oddělené čárkou. A dokonce je to takto údajně rychlejší.
panther
Profil
Majkl578:
To není tak úplně pravda, echo se chová jako funkce
aha, tak to se omlouvám, netušil jsem :-)
ra100
Profil *
panther:
Tu je stránka - http://inoutdesign.eu/forum.php

skús vpísať dlhší text.

... a tu je kód -


<html>
<head>
<title>Forum</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<style type="text/css">
body {
    background: #b0c4de;
}
* {
margin: 0;
padding: 0;
}
div {
    width: 600px;
    height: auto;
    background: #e6e6fa;;
    z-index: 1;
    margin-left: 200px;
}
p {
    width: 450px;
    background-color: #FFFFFF;
    color: #000000;
    position: absolute;
}
#form {
    width: 420px;
    height: 325px;
    background:  #ff8c00;
    left: 300px;
    position: absolute;
}
#form ul {
    width: 70px;
    height: 70x;
    background: red;
    list-style-type: none;
    margin-left: 10px;
    margin-top: 10px;
    font-family: verdana, georgia, arial;
    font-size: 13px;
    font-weight: bold;
    color: #FFFFFF;
    position: absolute;
}
#form ul li {
    width: 70;
    line-height: 13px;
    background: none;
    position: absolute;
}
.li_mail {
     margin-top: 30px;
}
.li_sprava {
    margin-top: 58px;
}
.meno, .email, .sprava {
    margin-left: 90px;
    position: absolute;
    background: #f5fffa;
    border: 0;
    color: #666666;
}
.meno, .email {
   width: 320px;
}
.meno {
 margin-top: 10px;
}
.email {
 margin-top: 38px;
}
.sprava {
    width: 400px;
    height: 200px;
    margin-left: 10px;
    margin-top: 90px;
    color: #666666;
    position: absolute;
    background-position: top;
}
#odosli {
    width: 130px;
    margin-top: 295px;
    margin-left: 160px;
    color: #ff8c00;
    background: #FFFFFF;
    border: 1px;
    padding-top: 2px;
    font-weight: bold;
    padding-bottom: 2px;
}
</style>
</head>
<body><div id="frst">
<?php 
$db_spojenie = mysqli_connect
  ('x', 'x', 'x', 'x', 3308);
if (!$db_spojenie)
{
  echo 'Pripojenie sa nepodarilo, sorry';
  echo '<br />';
  echo 'Popis chyby: ', mysqli_connect_error();
  exit();
}
$show_added = mysqli_query($db_spojenie, "SET NAMES 'utf8'");
if (!$show_added)
{
  echo 'Posielanie SQL príkazu se nepodarilo, sorry';
  echo '<br />';
  echo 'Popis chyby: ', mysqli_error($db_spojenie);
  exit();
}
if (isset($_POST['sprava']))
{
  $sql_prikaz = 
    "INSERT INTO forum(datum,meno,email,sprava) "
    ."VALUES(NOW(),'"
    .mysqli_real_escape_string($db_spojenie,$_POST['meno'])
    ."','"
    .mysqli_real_escape_string($db_spojenie,$_POST['email'])
    ."','"
    .mysqli_real_escape_string($db_spojenie,$_POST['sprava'])
    ."')"
    ;
$meno = $_POST['meno'];
$meno = $_POST['email'];
$meno = $_POST['sprava'];
if ($meno == '')
die('Vyplňte, prosím všetky polia !');
if ($email == '')
die('Vyplňte, prosím všetky polia');
if ($sprava == '')
die('Vyplňte, prosím všetky polia');
$show_added = mysqli_query($db_spojenie, $sql_prikaz); 
  if ($show_added)
    echo 'Váš komentár bol pridaný. Ďakujeme.<br />';
    else
    die('Neznáma chyba ! - Váš komentár sa nepodarilo vložiť do diskusie. Skúste sa pripojiť, prosím nekor !');     
}
$show_added = mysqli_query($db_spojenie,
  'SELECT * FROM forum ORDER BY datum DESC');
if (!$show_added)
{
  echo 'Posielanie SQL príkazu se nepodarilo, sorry';
  echo '<br />';
  echo 'Popis chyby: ', mysqli_error($db_spojenie);
  exit();
}
while ($vypis = mysqli_fetch_array($show_added)) 
{ 
echo '<hr />'; 
echo 'Dátum a čas : ',$vypis['datum'],'<br />'; 
echo 'Odosielateľ : ',$vypis['meno'],' (',$vypis['email'],')<br />'; 
echo 'Komentár :<p    >',$vypis['sprava'],'</p><br />'; 
echo '<br />'; 
} 
echo '<hr />';
mysqli_free_result($show_added);
if ($db_spojenie)
  mysqli_close($db_spojenie);
?>
</div>
<div id="div_form">
<form name="kniha" action="" method="post" id="form">
    <ul>
      <li class="li_meno">Meno :</li>
      <li class="li_mail">Mail :</li>
      <li class="li_sprava">Správa :</li>
    </ul>
<input type="text" name="meno" class="meno" />
<input type="text" name="email" class="email" />
<textarea name="sprava" class="sprava"></textarea>
<input type="submit" value="Vlož komentár" id="odosli">
</form>
</div>
</body>
</html>

Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
panther
Profil
ra100:
ten text je zalomený na dva řádky, tak je to správně. Leze pod formulář, protože ten je absolutně napozicován. Vše se zobrazuje tak, jak má (byť tvůj záměr byl asi jiný).
ra100
Profil *
panther

...skús ešte raz kliknúť na ten link....
ra100
Profil *
panther:

Ano, Leze pod formulář, protože ten je absolutně napozicován.,

ešte sa s tým pohrám aj v ďaľších prehliadačoch.
Odporúčam zatiaľ IE pre lepšie zobrazenie.
ra100
Profil *
panther:

...ja na tej stránke vidím strašný chaos..... neviem, ako ty.....
larryx
Profil
myslím, že by si mal použiť funkciu explode (rozdeliť text na slova) a potom pomocou funkcie strlen počítať znaky slov a keď bude dajme tomu viac ako 150 znakové slovo tak aj to slovo rozdeliť... nespomeniem si na tu poslednú funkciu, ktorou rozdelíš slova, ale určite ju nájdeš v manuáli

EDIT: ta posledná funkcia môže napríklad byť aj substr_replace()
petr 6
Profil
ra100:
Zalamuje se na celá slova. Pokud máš jedno slovo o délce 200 znaků, tak se to slovo nerozdělí (pokud to je tedy ten problém).
Pak bude potřeba použít overflow nebo dlouhá slova rozdělovat pomocí php.
ra100
Profil *
larryx:
Ďakujem larryx,
budem skúšať aj tvoj postup popri ďaľších. Smerujem aj k funkcii explode.
V php a mysql som ponorený len 3-4 mesiace. Takže interpretovať funkciu explode do php bude v mojom prípade trvať dni, ak nie týždne...
...zatiaĺ som celý rád, že som zbúchal aspoň toto fórum )))

V každom prípade ďakujem za radu.
ra100
Profil *
petr 6:
Ďakujem peter6,
po vložení overflow: hidden sa riadky upravily. Stále tam je však problém v zobrazení...
...dobrá rada )
ra100
Profil *
...riadky, ktoré presahovali, sa strácajú a celé sa to zobrazuje dosť šialene v http://inoutdesign.eu/forum.php, kde je použité overflow: hidden
a
http://inoutdesign.eu/forum1.php, je bez overflow: hidden.
...ale pokrok to je.
petr 6
Profil
ra100:
Opravdu očekáváš, že ti tam budou uživatelé psát slova o 60 znacích?
ra+éé
Profil *
petr 6:
Opravdu očekáváš, že ti tam budou uživatelé psát slova o 60 znacích? - to nie.
Takže, ak som správne pochopil, je nutné na to rozdeľovanie php ?
larryx
Profil
mozno ti pomoze toto na rozdelenie slova...
$val="dlheeeeeeeeeeeeeeeeeeeeeeeslovo";
if(strlen($val)>=20){
        $count=ceil(strlen($val)/20);
        for($i=0;$i < $count;$i++){
            echo substr($val,($i*20),20)." ";
        }
        echo "<br>".$val. " ".$count;
} 
ra100
Profil *
larryx:
Ďakujem larryx...
Idem to skúsiť...
Na začiatok mi stačí vedieť, či je možné to "dlheeeeeeeeeeeeeeeeeeeeeeeslovo" nahradiť v mojom prípade premennou $vypis['sprava'].
ra100
Profil *
while ($vypis = mysqli_fetch_array($show_added)) 
{ 
echo '<hr />'; 
echo 'Dátum a čas : ',$vypis['datum'],'<br />'; 
echo 'Odosielateľ : ',$vypis['meno'],' (',$vypis['email'],')<br />'; 
echo 'Komentár :<p>',$val=$vypis['sprava'];
if(strlen($val)>=20){
        $count=ceil(strlen($val)/20);
        for($i=0;$i < $count;$i++){
            echo substr($val,($i*20),20)." ";
        }
        echo "<br>".$val. " ".$count;
},
'</p><br />'; 
echo '<br />'; 
}

...je to niečo na tento sposob?
.....stránky, kde je to fórum to nezobrazujú a nehlási to ani chybu...

Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
larryx
Profil
to čo som ti postol, je len na rozdelenie slova, ešte musíš text rozdeliť na slova...

edit: tu to máš komplet aj s rozdelením textu, len si to prispôsob, ale na tvojom mieste si to prv pozriem takto samostatne
<?php
$text="dsadsadsadds dsaaaaaaaaad asdsad dlheeeeeeeeeeeeeeeeeeeeeeeslovodlheeeeeeeeeeeeeeeeeeeeeeeslovodlheeeeeeeeeeeeeeeeeeeeeeeslovodlheeeeeeeeeeeeeeeeeeeeeeeslovo dsadsadsad sasd dsad sadsadsadsad asdsadasdasd asdasd asdasdsadas dsadasd sssssssssssssssdddddasdasdasdas das dsadsadasd saddddddddsadsadsasdasdsada ";
$rozdel_text = explode(" ",$text);
echo "<div style=\"width:350px;background-color:#ccc\">";
foreach($rozdel_text as $val){
    if(strlen($val)>=20){
        $count=ceil(strlen($val)/20);
        for($i=0;$i < $count;$i++){
            echo substr($val,($i*20),20)." ";
        }
        

    } else echo $val." ";
}
echo "</div>---- ROZDELENE<br><br><div style=\"width:350px;background-color:#ccc\">".$text."</div>---- NEROZDELENE"
//var_dump($slovo);
?>
ra100
Profil *
larryx:
...idem si to poštudovať, aj keď tuším, že si na tom zuby vylámem... )
Ďakujem za každú radu....
larryx
Profil
petr 6:
Opravdu očekáváš, že ti tam budou uživatelé psát slova o 60 znacích?
hmm, to myslím, že nie, ale napríklad ak poznáš náš slovenský pokec tak oni to používajú...
panther
Profil
larryx:
ale napríklad ak poznáš náš slovenský pokec tak oni to používajú...
slovenský pokec sice neznám, nicméně není nutné tyhle písmenné orgie nechávat. Když každé podobné slovo vytvořené za asistence demence či zaseknuté klávesy zkrátíš na 20 znaků, nic se nestane (nevím, kolik je ve slověnštině slov delších 20 znaků, klidně si ten limit uprav).
ra100
Profil *
...ako tuším správne, možností je viac.
Ja som to nadstavil na 30 znakov, aj to len "pre istotu".

A čo sa týka toho kódu od larryx-a, snaźím sa to dostať do mojho kódu, ktorý je uvedený hore.
Jedna vec je dostať ho tam, čo som prekvapený, že mi nehádže chybové hlášky.
A druhá vec je rozhýbať ho v tom kóde aby robil, čo má a umiestniť ho tam, kde má byť.
S tým už toľko šťastia nemám, nezapadá mi to stále do seba.

....s mojími variáciamy v tom kóde nadnes končím. Keby som si to nazálohoval, tak už ani neviem, ako sa volám...)
Ďakujem všetkým, ktorý sa ochotne podujímajú na riešení mojho php začiatočníctva.

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:

0