Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

Zdravím,
ti kteří mě už znají (kit... :D ) ví,že jsem dřív použival takovou tu "bezdatabázovou" diskuzi na vše možné... Pořád mi říkáte že se mám učit databázi,OK zkouším to,a to na vtipech (vtipy.bobikpa­ge.cz)
Ale je tam nějaká chybička,a navíc vůbec nevím jak se to dělá,tak bych prosil poučení :)

---pridat.php---

<h2>Přidat vtip !</h2>
  <form action="pridej.php" method="post">
  <textarea name="vtip" rows="20" cols="60"></textarea>
  <select title="Vyber...">
  <option name="kategorie" value="blondynky">Blondýnky</option>
  <option name="kategorie" value="doktori">Doktoři</option>
  <option name="kategorie" value="opilci">Opilci</option>
  <option name="kategorie" value="pocitace">Počítače</option>
  <option name="kategorie" value="policejni">Policejní</option>
  <option name="kategorie" value="programatori">Programátoři</option>
  <option name="kategorie" value="skola">Škola</option>
  <option name="kategorie" value="urednici">Úředníci</option>
  <option name="kategorie" value="zvirata">Zvířata</option>
  <option name="kategorie" value="ostatni">Ostatní</option>
  </select> <input type="submit" name="odeslat" value="Přidej !">

  </form>

---pridej.php---

<?php
$spojeni = mysql_connect('localhost','vtipybobikpage','***********************');
if (!$spojeni) die('Připojení k databázi selhalo...');
$databaze = mysql_select_db('vtipybobikpage',$spojeni);
if (!$databaze) die('Výběr databáze selhal !');
?>

<?php
if (isset($_POST['odeslat']))
{

if (mysql_query('INSERT INTO ' . $_POST['kategorie'] . 'VALUES ($_POST['vtip'])',$spojeni))
{
                echo ('Vtip úspěšně přidán !');
}
        else
{
                echo (' Vtip nepřidán,někde nastala chyba...');
}

?>


<a href="#" onClick="window.close()">POKRAČOVAT</a><br>

Píše mi to

Parse error: syntax error, unexpected T_STRING in /home/users/birdsoftware/bobikpage.cz/sub/vtipy/vtipy/pridej.php on line 19

Line 19 je

if (mysql_query('INSERT INTO ' . $_POST['kategorie'] . 'VALUES ($_POST['vtip'])',$spojeni))
 
Odpovědět 6.8.2012 19:27
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:

Kite mužeš na slovíčko ?? :D

 
Nahoru Odpovědět 6.8.2012 19:31
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

To tu nikdo není ?? :(

 
Nahoru Odpovědět 6.8.2012 19:54
Avatar
Raiper34
Redaktor
Avatar
Odpovídá na Daniel Vítek
Raiper34:

Btw chybu nemusíš mať iba na 19 ale už oveľa skôr, ide o to že tá chyba sa prejavila na 19

Nahoru Odpovědět 6.8.2012 19:55
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
 
Nahoru Odpovědět 6.8.2012 19:56
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
David Čápka:

No fuj, escapování ti nic neříká?

Nahoru Odpovědět 6.8.2012 19:58
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Daniel Vítek:

já už možnáá vím,chybí mi tam závorka

 
Nahoru Odpovědět 6.8.2012 20:03
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Daniel Vítek:

okej,zde máš to escapování (stačí ??)

<?php
if (isset($_POST['odeslat']))
{
$vtip = htmlspecialchars($_POST['vtip']);

if (mysql_query('INSERT INTO ' . $_POST['kategorie'] . 'VALUES ($vtip)',$spojeni))
{
                echo ('Vtip úspěšně přidán !');
                }
        else
            {
                echo (' Vtip nepřidán,někde nastala chyba...');
            }
}
?>

Ale vypíše to chybové hlášení (Vtip nepřidán,někde nastla chyba...)

 
Nahoru Odpovědět 6.8.2012 20:07
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Daniel Vítek:

btw. když už jsme u toho escapování,ty tu taky jednu věc nemáš escapovanou...

 
Nahoru Odpovědět 6.8.2012 20:09
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:
$kategorie=mysql_real_escape_string($_POST['kategorie']);
$vtip=mysql_real_escape_string($_POST['vtip']);

$result=mysql_query("INSERT INTO vtipovnik (kategorie, vtip) VALUES ('$kategorie','$vtip')",$spojeni);

Sice tento zastaralý způsob už nepoužívám, ale snad to mám správně. Ty první dva řádky ber jako nezbytnou nutnost, pokud o tu databázi nechceš přijít. Každý uživatelský vstup musíš takto ošetřit proti útokům nebo použít novější ovladač s parametrizovanými dotazy.

Na esapování rozhodně nepoužívej htmlspecialchars(), tato funkce se používá až při výstupu z databáze do HTML.

Nejsem tady nonstop, nevolej mě.

A ještě něco: Oprav si datový model. Byla by velká hloupost mít jednu tabulku pro každou kategorii vtipů.

Nahoru Odpovědět 6.8.2012 20:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Kit
Kit:

A ještě přídavek: Po přidání vtipu do tabulky zavolej tyto funkce:

header("Location: .");
exit();

Je to prevence před tzv. doublepostem. Proces ukládání do tabulky se navíc neuloží do historie prohlížeče. Pokud někdo stiskne F5, nepošle se znovu a ani při návratu o stránku zpět.

Nahoru Odpovědět 6.8.2012 20:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

to mě už taky napadlo :)

 
Nahoru Odpovědět 7.8.2012 6:19
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

takže .......

.....
{
echo ('Vtip byl úspěšně přidán');
header("Location: .");
exit();
}

??

 
Nahoru Odpovědět 7.8.2012 6:20
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

To echo tam nesmí být, protože pak by ta funkce header() přestala fungovat a vypisovala by varovné hlášení. Před ní nesmí být žádný textový výstup.

Nahoru Odpovědět 7.8.2012 8:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

Mám takhle (zatím bez header)

<?php
if (isset($_POST['odeslat']))
{
$kategorie=mysql_real_escape_string($_POST['kategorie']);
$vtip=mysql_real_escape_string($_POST['vtip']);


if (mysql_query($vysledek=mysql_query("INSERT INTO dbvtipy (kategorie, vtip) VALUES ('$kategorie','$vtip')",$spojeni)))
{
                echo ('Vtip úspěšně přidán !');
                }
        else
            {
                echo (' Vtip nepřidán,někde nastala chyba...');
            }
}
?>

Ale nechce se to do té tabulky vložit,kontroloval jsem to i v adminovi a nic tam není :(

 
Nahoru Odpovědět 7.8.2012 8:05
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:

ou to je blbost :D už asi vím

 
Nahoru Odpovědět 7.8.2012 8:06
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:

už mi to jedéé :D
kam si tím heder tedy ? před echo ?

 
Nahoru Odpovědět 7.8.2012 8:08
Avatar
Kit
Redaktor
Avatar
Kit:

Asi máš jinou strukturu tabulek. Proto je dobré používat nové ovladače MySQL a nechat si vyhodit výjimku.

Asi máš jinak strukturu DB.

Je zvykem pojmenovávat DB tabulky v jednotném čísle.

Také tam vidím vnořené volání funkce mysql_query(), což je blbost vzniklá opisováním.

Nahoru Odpovědět 7.8.2012 8:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

<?php
if (isset($_POST['o­deslat']))
{
$kategorie=mys­ql_real_escape_strin­g($_POST['kate­gorie']);
$vtip=mysql_re­al_escape_strin­g($_POST['vtip']);

if (mysql_query("IN­SERT INTO dbvtipy (kategorie, vtip) VALUES ('$kategorie','$vtip')"­,$spojeni))
{
echo ('<script type="text/ja­vascript" src="pridan.js"></scrip­t>');
}
else
{
echo ('<script type="text/ja­vascript" src="nepridan­.js"></script>');
}
}
?>

 
Nahoru Odpovědět 7.8.2012 8:15
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

To echo tam vůbec nebude. Stejně by se nezobrazilo, protože header() dělá přesměrování. Můžeš ho napsat třeba takto:

header('Location: uspech.php');

a napsat speciální podstránku uspech.php.

Nahoru Odpovědět 7.8.2012 8:15
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

a mužu to mít jak jsem teď posílal ?
obsah souborů js :
pridan.js

alert("Vtip úspěšně přidán");
window.close();

nepridan.js

alert("Vtip nepřidán...........");
window.close();
 
Nahoru Odpovědět 7.8.2012 8:17
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Můžeš, ale nebude to fungovat správně. Zkus si několikrát F5 za sebou. Vtip se ti přidá opakovaně.

Nahoru Odpovědět 7.8.2012 8:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

Ale na to nebude dostatek času,nebo jo ? Vtip se přidá,vyletí zpráva,a když kliknu na OK tak se okno hned zavře,nebo ne ?

 
Nahoru Odpovědět 7.8.2012 8:21
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Po každém odeslání dat metodou POST je nutné ta odeslaná data z formuláře zrušit. Nejlépe přes zmíněný header(). Javascript bych do toho vůbec netahal, protože zablokuje funkci header(), viz výše.

Nahoru Odpovědět 7.8.2012 8:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

ok nějak to zkusím ;)

 
Nahoru Odpovědět 7.8.2012 8:31
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Jde to celé udělat i přes AJAX, ale nejprve se nauč klasiku. Ta funguje vždy.

Zmíněná technika se nachází v knížce od Koska
http://www.kosek.cz/…aplikaci.pdf
Trochu jsem si ji vylepšil.

Nahoru Odpovědět 7.8.2012 8:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

Fajn,mám to tam :) akorát to tak napůl nefunguje... Vtip se přidává bez problému,ale kategorie se nechce poslat,v PhPMyAdmin je "kategorie" prázdná - na stránce se nic nevypíše. Zkoušel jsem ručně v adminovi upravit "kategorie" na "ostatní" a na stránce se text vypsal :) takže vypisování funguje,jen tu mám problém s posláním té kategorie... posílám zdroják...

<h2>Přidat vtip !</h2>
  <form action="pridej.php" method="post">
  <textarea name="vtip" rows="20" cols="60"></textarea>
  <select title="Vyber...">
  <option name="kategorie" value="blondynky">Blondýnky</option>
  <option name="kategorie" value="doktori">Doktoři</option>
  <option name="kategorie" value="opilci">Opilci</option>
  <option name="kategorie" value="pocitace">Počítače</option>
  <option name="kategorie" value="policejni">Policejní</option>
  <option name="kategorie" value="programatori">Programátoři</option>
  <option name="kategorie" value="skola">Škola</option>
  <option name="kategorie" value="urednici">Úředníci</option>
  <option name="kategorie" value="zvirata">Zvířata</option>
  <option name="kategorie" value="ostatni">Ostatní</option>
  </select> <input type="submit" name="odeslat" value="Přidej !">
<?php
if (isset($_POST['odeslat']))
{
$kategorie = mysql_real_escape_string($_POST['kategorie']);
$vtip = mysql_real_escape_string($_POST['vtip']);


if (mysql_query("INSERT INTO dbvtipy (kategorie, vtip) VALUES ('$kategorie','$vtip')",$spojeni))
            {
        header('Location: pridan.html');
            }
        else
            {
           header('Location: nepridan.html');
            }
}
?>
 
Nahoru Odpovědět 7.8.2012 15:32
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:

koukám že se mi tu ty CODE spojily - tam kde začíná <?php tak to už je další soubor

 
Nahoru Odpovědět 7.8.2012 15:34
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

co s tím tedy je ? :(

 
Nahoru Odpovědět 7.8.2012 18:09
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
David Čápka:

Máš špatně select, viz zdejší HTML 5 manuál: http://www.itnetwork.cz/index.php?…

Nahoru Odpovědět 7.8.2012 18:53
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Však už možná víš, že to obvykle všechno spojuji do jednoho souboru. Jenom ty kusy kódu dávám v opačném pořadí.

Ještě jsi neposlal strukturu tabulky. Také je dobré si přečíst chybové hlášení, které ti databáze pošle při neúspěchu.

Nahoru Odpovědět 7.8.2012 18:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Vidíš, to mě nenapadlo nakouknout do formuláře. Nečekal jsem, že to někdo zvoře, když je kolem tolik návodů.

Nahoru Odpovědět 7.8.2012 19:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

Teď mám maličký problém s vypisováním...
mám toto

$vypis = mysql_query("SELECT vtip FROM dbvtipy WHERE kategorie='ostatni'",$spojeni);

$radek=mysql_fetch_array($vypis);
if ($radek)                 //Povedlo se? Kdyby ne, vyšla by logická nula.
 $vtipy=$radek['vtip'];  //OK, máme to - přečti číslo.
 else $vtipy='Error';           //Nepovedlo se - dej tam nějakou chybovou hlášku.

echo($vtipy);

Jenže to nevypíše všechny vtipy,jen ten 1.
Asi se to dělá nějak přes "for"..nevím jak :/

 
Nahoru Odpovědět 7.8.2012 21:14
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Zkus tohle:

while($radek=mysql_fetch_assoc($vypis)){
...
}
Nahoru Odpovědět 7.8.2012 21:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:
<?php
$vypis = mysql_query("SELECT vtip FROM dbvtipy WHERE kategorie='ostatni'",$spojeni);

$radek=mysql_fetch_array($vypis);



while($radek=mysql_fetch_assoc($vypis))
{
 if ($radek)                 //Povedlo se? Kdyby ne, vyšla by logická nula.
 $vtipy=$radek['vtip'];  //OK, máme to - přečti číslo.
 else $vtipy='Error';           //Nepovedlo se - dej tam nějakou chybovou hlášku.

echo($vtipy);
}

?>

Takto ?

 
Nahoru Odpovědět 8.8.2012 6:49
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Proč tak složitě?

<?php
$vypis = mysql_query("SELECT vtip FROM dbvtipy WHERE kategorie='ostatni'",$spojeni);
while($radek=mysql_fetch_assoc($vypis)) {
   echo "<p>", htmlspecialchars($radek['vtip']),"</p>\n";
}
Nahoru Odpovědět 8.8.2012 6:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

ahá :D jdu ozkoušet ;)
dík :)

 
Nahoru Odpovědět 8.8.2012 7:28
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

takže jsem zase něco pokazil :D

<?php
$vypis = mysql_query("SELECT vtip FROM dbvtipy WHERE kategorie='ostatni'",$spojeni);

$radek=mysql_fetch_array($vypis);


while($radek=mysql_fetch_assoc($vypis)) {
   echo "<p>", htmlspecialchars($radek['vtip']),"</p>\n";
}


?>

takto nebo ještě jinak ?

 
Nahoru Odpovědět 8.8.2012 7:34
Avatar
Kit
Redaktor
Avatar
Kit:

K čemu je dobrá funkce mysql_fetch_a­rray()? Jenom ti zlikviduje první vtip.

Nahoru Odpovědět 8.8.2012 7:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:

teď na to tak koukám,ono to funguje,ale ten poslední vtip se nevypíše

 
Nahoru Odpovědět 8.8.2012 7:36
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

takže jen

?php
$vypis = mysql_query("SELECT vtip FROM dbvtipy WHERE kategorie='ostatni'",$spojeni);
while($radek=mysql_fetch_assoc($vypis)) {
   echo "<p>", htmlspecialchars($radek['vtip']),"</p>\n";
}

????

 
Nahoru Odpovědět 8.8.2012 7:38
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:

OK,moc moc moc moc moc moc moc dííííííííík =D

 
Nahoru Odpovědět 8.8.2012 7:39
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

To jsi jen zkopíroval můj post. Samozřejmě, víc není třeba.

Možná bys mohl doplnit detekci chybových stavů, ale pro začátek je tam kvůli jednoduchosti dávat nemusíš. Proto používám PDO. Udělá spoustu práce za mne a navíc je i rychlejší.

Nahoru Odpovědět 8.8.2012 7:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

...dá se nějak jednoduše nastavit řazení od nejstaršího po nejnovější ?

 
Nahoru Odpovědět 8.8.2012 7:48
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Samozřejmě to jde.

SELECT vtip FROM dbvtipy WHERE kategorie='ostatni' ORDER BY Datum;
Nahoru Odpovědět 8.8.2012 8:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

...ale já tam nemám datum vložení vtipu,asi to tam mám přidat že ?

 
Nahoru Odpovědět 8.8.2012 8:14
Avatar
Kit
Redaktor
Avatar
Nahoru Odpovědět 8.8.2012 8:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

jasně,chápu :D

....btw. pořád mi červená že není definován index

 
Nahoru Odpovědět 8.8.2012 8:24
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Co znamená "pořád mi červená"? Indexy do cca 1000 záznamů obvykle nejsou nutné.

Nahoru Odpovědět 8.8.2012 9:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

že to je červené :D
ok až bude 1000 záznamů tak napíšu :D

 
Nahoru Odpovědět 8.8.2012 9:39
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Ale _co_ je červené?

Nahoru Odpovědět 8.8.2012 9:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

Kolem toho je červený rámeček (podobný tomuto - #FF746A) který hlásí

[vykřičník] Není definován žádný index!
 
Nahoru Odpovědět 8.8.2012 9:45
Avatar
Kit
Redaktor
Avatar
Kit:

Kolem _čeho_ je červený rámeček? Mně to nikdy nic takového nedělá ani když mám milióny řádek bez indexu.

Nahoru Odpovědět 8.8.2012 9:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

pak pošlu fotku,teď bych potřeboal poradit jak odřádkovaat...

nejede
\n nejede
další způsoby už neznám,a myslím,že by taky nefungovaly

 
Nahoru Odpovědět 8.8.2012 11:15
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Odřádkování v HTML se dělá značkou
, ale často je lepší členit pomocí <p>

Pokud jen potřebuješ "\n" převést na
, tak na to je v PHP funkce nl2br().

Nahoru Odpovědět 8.8.2012 11:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Kit
Kit:

Vidím, že značka <br> byla redakčním systémem interpretována.

Nahoru Odpovědět 8.8.2012 11:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

Nebo mám ještě nápad :D
Bylo by hodně složitý kdyby se automaticky na konec každého řádku přidala ta značka pro odřádkování ?

 
Nahoru Odpovědět 8.8.2012 11:25
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Nerozumím. Děláš to snad jinak? Hlavně to nestrkej do databáze. tam to nepatří.

Nahoru Odpovědět 8.8.2012 11:42
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

no na vkládání vtipu mám textarea,ale když odřádkuju tak to HTML nepozná a klidně si vš píše na jeden řádek

 
Nahoru Odpovědět 8.8.2012 12:20
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Ty jsi asi nečetl můj příspěvek o funkci nl2br(), že?

Nahoru Odpovědět 8.8.2012 12:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
 
Nahoru Odpovědět 8.8.2012 12:29
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

ok mám tam textarea name="vtip"
a do scriptu toto:

$zadani = $_POST['vtip']
$vtip = nl2br($zadani);
......

takže takto ?

 
Nahoru Odpovědět 8.8.2012 12:33
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

né jinak to mám...mám to dát před real escape nebo až za to ?

$kategorie = mysql_real_escape_string($_POST['kategorie']);
$vtip = mysql_real_escape_string($_POST['vtip']);


if (mysql_query("INSERT INTO dbvtipy (kategorie, vtip) VALUES ('$kategorie','$vtip')",$spojeni))
 
Nahoru Odpovědět 8.8.2012 12:36
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Ne. Vtipy máš přece v databázi.

<?php
$vypis = mysql_query("SELECT vtip FROM dbvtipy WHERE kategorie='ostatni' ORDER BY Datum DESC LIMIT 10",$spojeni);
while($radek=mysql_fetch_assoc($vypis)) {
   echo "<p>",nl2br( htmlspecialchars($radek['vtip'])),"</p>\n";
}
Nahoru Odpovědět 8.8.2012 12:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

ahá :D
...co znamená DESC LIMIT 10 ?

 
Nahoru Odpovědět 8.8.2012 12:39
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Hlavně to nestrkej do databáze. Kolikrát musím psát, že to tam nepatří?

Nahoru Odpovědět 8.8.2012 12:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

co tam nemám strkat,co tam nepatří ??

 
Nahoru Odpovědět 8.8.2012 12:40
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

DESC - od nejnovějších ke starším
LIMIT 10 - prvních deset.

Nahoru Odpovědět 8.8.2012 12:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Zjednodušeně: Do databáze nesmí přijít žádná značka HTML. Funkce nl2br() vytváří HTML značku <br>, použiješ ji až při výběru dat z databáze.

Nahoru Odpovědět 8.8.2012 12:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Avatar
martinkobelka
Redaktor
Avatar
Odpovídá na Daniel Vítek
martinkobelka:

Vytvoř jednu tabulku, ve které budeš mít kategorie, a druhou, ve které budeš mít vtipy.

tabulka pro kategorie může být třeba
create table kategorie(
id tinyint auto_increment primary key,
nazev varchar(30)
)
tabulku pro vtipy třeba
create table vtipy(
id int auto_increment primary key,
kategorie int,
obsah text
)
a přečti si něco o spojování tabulek v databázi. http://www.linuxsoft.cz/article.php?…

A ještě jeden tip ti dám. Když neumíš pořádně pracovat z databází, nesnaž se s ní hned programovat. Nejdřív se nauč pořádně pracovat s databází (třeba pomocí adminer nebo phpmyadmin nebo příkazová řádka), a až potom se snaž databázi používat ve svých programech.

ps : když myslím nauč se pracovat s databází, nemyslím tím jedno odpoledne, ale třeba týden nebo měsíc ;)

 
Nahoru Odpovědět 8.8.2012 12:50
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
Daniel Vítek:

o čem to mluvíš ? v jakých programech ?
pořádně si přečti můj první příspěvek ;)
http://vtipy.bobikpage.cz

 
Nahoru Odpovědět 8.8.2012 12:53
Avatar
martinkobelka
Redaktor
Avatar
Odpovídá na Daniel Vítek
martinkobelka:

Databáze nemusí být netně využita jen v programech. Databáze může být třeba seznam žáků ve škole s jejich prospěchem a známkami.

 
Nahoru Odpovědět 8.8.2012 13:01
Avatar
Kit
Redaktor
Avatar
Odpovídá na martinkobelka
Kit:

Normalizaci jsem chtěl nechat na později, abych Dana nezahltil, když s tím předevčírem začal. Prozatím stačí 1NF.

Místo další tabulky s názvy kategorií stačí datový typ ENUM. Ovšem i na to je dost času.

Názvy tabulek doporučuji volit v jednotném čísle.

Nejlepší je spustit si MySQL v terminálu a projít si to třeba takto:
http://www.youtube.com/watch?…
Je toho víc dílů. Možná se dá totéž najít i pro MySQL, ale neměl jsem potřebu to hledat.

Nahoru Odpovědět 8.8.2012 13:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
Daniel Vítek:

to vím,ale já odpovídal na toto:
A ještě jeden tip ti dám. Když neumíš pořádně pracovat z databází, nesnaž se s ní hned programovat. Nejdřív se nauč pořádně pracovat s databází (třeba pomocí adminer nebo phpmyadmin nebo příkazová řádka), a až potom se snaž databázi používat ve svých programech.

..já chtěl pomoct s těma vtipama,tak jsem nechápal proč sem taháš programy...

 
Nahoru Odpovědět 8.8.2012 13:30
Avatar
martinkobelka
Redaktor
Avatar
Odpovídá na Kit
martinkobelka:

datový typ enum je sice dobrý, ale jen pokud bude seznam kategorií statický. Pokud bude seznam kategorií dynamický, je mnohem jednoduší přidávat další kategorie, když jsou zvlášť v jedné tabulce, než když je typ enum.

 
Nahoru Odpovědět 8.8.2012 13:31
Avatar
Kit
Redaktor
Avatar
Odpovídá na martinkobelka
Kit:

DanVitek nyní řeší, jak se naučit pracovat s jednou DB tabulkou. Nepleť mu hlavu se zbytečnou další tabulkou s kategoriemi, která nijak nepřispívá ke zlepšení schématu. V tuto chvíli může přidávat kategorie tak, jak se mu zrovna bude hodit.

Nahoru Odpovědět 8.8.2012 13:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
martinkobelka
Redaktor
Avatar
martinkobelka:

ok, já jsem jenom myslel, že by se mohl naučit něco nového.

 
Nahoru Odpovědět 8.8.2012 13:48
Avatar
Kit
Redaktor
Avatar
Odpovídá na martinkobelka
Kit:

Správně normalizovaná tabulka ve 3NF by byla rozšířena vlastně jen o primární klíč id:

CREATE TABLE vtip(
   id int auto_increment primary key,
   kategorie varchar(30),
   vtip text
);

id je potřebné pro správnou identifikaci při manipulaci se záznamy. Zpravidla každá tabulka obsahuje id jako primární klíč.

Nahoru Odpovědět 8.8.2012 13:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

stejně nechápu na co zvlášť tabulku na kategorie ?

 
Nahoru Odpovědět 8.8.2012 13:54
Avatar
martinkobelka
Redaktor
Avatar
Odpovídá na Daniel Vítek
martinkobelka:

když chceš vypsat seznam kategorií, nebo vytvořit dynamicky formulář pro výběr kategorie, tak jednoduše vypíšeš z té tabulky název. Když chceš přidat kategorii, tak jednoduše přidáš do tabulky řádek, a tvoje scripty se postarají samy o ostatní, a nemusíš nic předělávat.

 
Nahoru Odpovědět 8.8.2012 13:58
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

Je hodně případů, ve kterých je výhodné mít samostatnou tabulku kategorie. Ve tvém případě není potřebná.

Jde o to, že když postupně smažeš všechny vtipy o blondýnkách, zmizí ti i kategorie 'blondýnky'. Záleží teď na tom, zda ti to vadí nebo ne. Pokud to vadí (a takových případů je hodně), je nutné udělat další tabulku kategorie tak, jak popsal martinkobelka.

Nahoru Odpovědět 8.8.2012 14:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
martinkobelka
Redaktor
Avatar
Odpovídá na Daniel Vítek
martinkobelka:

Databáze je mocný nástroj. Normálně se i menu, v tvém případě seznam kategorií generuje z databáze. Pro tento případ je třeba lepší mít v jedné tabulce seznam kategorií.

 
Nahoru Odpovědět 8.8.2012 14:10
Avatar
Kit
Redaktor
Avatar
Odpovídá na martinkobelka
Kit:

Výpis seznamu kategorií:

SELECT DISTINCT kategorie FROM vtip;

Kategorii přidá tak, že napíše název kategorie a nový vtip.

Uznávám, že pro větší množství vtipů (>1000) by to nebylo zrovna efektivní, ale to teď neřešíme.

Nahoru Odpovědět 8.8.2012 14:10
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Kit:

Ještě taková pomůcka: Datová struktura se dá zapsat nejen do databáze, ale i do XML. Ve chvíli, kdy v XML podvědomě uděláme vnořenou strukturu, v SQL bychom měli udělat další tabulku.

Nefunguje to vždy, relace M:N se takto dělají hůř, ale za zkoušku to stojí. Minimálně tím autor datového modelu získá nový pohled na data a na vlastní uvažování. Ideálně jsou tato schémata mezi sebou převoditelná.

Také jsem zkusil do databáze ukládat XML a JSON. Ano, za jistých okolností to může porušovat 1NF - je potřeba na to dát pozor. S výsledkem jsem byl velmi spokojen.

Nahoru Odpovědět 10.8.2012 15:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

No napřed se podívám na ty databáze :)

 
Nahoru Odpovědět 10.8.2012 15:34
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

No napřed se podívám na ty databáze :)

 
Nahoru Odpovědět 10.8.2012 15:34
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

XML je také dobré znát. Vypadá podobně jako HTML, ale na rozdíl od něj značky přímo vyjadřují, co je uvnitř.

Nahoru Odpovědět 10.8.2012 15:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:

Ok
...mám další dotaz :)
Když chci udělat jak je třeba tu -
itnetwork.cz/in­dex.php?art=stran­ka tak to se dělá jak ? přes GET ?

 
Nahoru Odpovědět 10.8.2012 15:51
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:

Už nic,už jsem to vygooglil (asi po půl hodině) :D
dělá se to přes get a switch

 
Nahoru Odpovědět 11.8.2012 9:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 93 zpráv z 93.