Autor | Zpráva | ||
---|---|---|---|
MikelCz Profil |
#1 · Zasláno: 7. 3. 2013, 12:23:15
Zdravím, pomalu mi končí termín pro odevzdání maturitního projektu a pořád se mi nepodařilo vyřešit tenhle poměrně banální problém.
Mám 2 tabulky (filmy a comments) a chci, aby se k danému filmu vypsaly pouze komentáře k němu určené, takže u filmu mám řádek bez_diakritiky (konkretne to zkouším u záznamu "klub rvacu"), který používám jako id, propojil jsem jej s řádkem bez_diakritiky (automaticky se tam zapíše hodnota bez_diakritiky z filmů, takže v mojem případě "klub rvacu") v tabulce comments pomocí relace, bohužel se mi nepovedlo tenhle nápad dovést do konce, v PHP jsme nic neprobrali a tak mám opravdu jen nějaké základní znalosti.. díky za pomoc :) seznam filmů tu, pokud by ho bylo potřeba.. (ještě nefunguje ani hodnocení, ale to už si odvodím od těch komentářů): http://student.spsbv.cz/prosecky.el09a/maturita/seznam-eng.php takhle nějak vypadá php skript, zkoušel jsem do něj zapsat připojení k tabulce comments, ale to už pak nejelo vůbec nic.. <?php if($_GET["film"]){ $film = strtolower($_GET["film"]); $film = str_replace('_',' ',$film); mysql_connect("localhost","prosecky_el09a","*********"); mysql_set_charset("windows-1250"); mysql_select_db("prosecky_el09a"); $vysledek = mysql_query("SELECT * FROM `filmy` WHERE `anglicky_nazev` = '" . $film . "' OR `bez_diakritiky` = '" . $film . "' OR `original_nazev` = '" . $film . "' OR `nazev` = '" . $film . "'"); while ($radek = mysql_fetch_object($vysledek)) { ?> <div style="width: 799px; position: relative;margin: auto;"> <div id="hlavicka"> <div id="vyhledavani" style="padding-top: 80px; padding-left: 380px;"> <form action=""> <acronym title="Vyhledávání filmů. Zadávejte PŘESNÉ názvy, fungují české, bez diakritiky, anglické a původní. Na velkých/malých písmenech nezáleží.">[?]</acronym> <input class='textbox' name="film" value="<?=$_GET["film"]?>" type="text" maxlength="50" size="25" style="background-color:#FFDAB9; border-radius: 5px;" /> <input type='submit' value='Vyhledat' class='button' style="background-color: #D2691E; border-radius: 5px;"/> </form> </div> takhle vypadá vypisování z tabulky filmy <?=$radek->anglicky_nazev?> a takhle z tabulky comments (po nepovedený úpravě jsem to vrátil do původního) Jméno: <?=$radek->name?> |
||
Kajman Profil |
#2 · Zasláno: 7. 3. 2013, 12:48:53
Uvnitř while si uděláte druhý dotaz
$komentare=mysql_query("select * from comments where bez_diakritiky='".mysql_real_escape_string($radek->bez_diakritiky)."'"); Jen si dejte pozor, název filmu nebývá vždy jedinečný. Je to tedy nevhodný primární klíč. |
||
MikelCz Profil |
#3 · Zasláno: 7. 3. 2013, 14:50:46
MikelCz:
Tak naprostým kamikadze stylem se mi to povedlo zprovoznit bez cizí pomoci, můžete lock :) |
||
Joker Profil |
#4 · Zasláno: 7. 3. 2013, 15:15:45
MikelCz:
„Tak naprostým kamikadze stylem se mi to povedlo zprovoznit bez cizí pomoci“ V čem nevyhovovaly Kajmannovy rady? A jaké bylo řešení? „můžete lock“ To my tady neděláme. |
||
MikelCz Profil |
Joker:
No, povedlo se to ještě než jsem stihl přečíst Kajmanovu odpověď, ale teď, když jsem došel ze školy domů, to už zase nefunguje (byl jsem docela nepříjemně překvapenej), takže se v tom jdu vrtat dál.. Když jsem po těch úpravách zkoušel Kajmanův script, tak celá stránka nefungovala.. Teď jsem v obou tabulkách udělal řádky id, kde jsou filmy očíslovány. id z tabulky filmy jsem dal primární klíč a pomocí relace jsem ho propojil s id z comments, takže ve filmy má Klub rváčů v řádku id číslo 5 a když někdo přidá komentář ke Klubu rváčů, tak komentář má taky id 5, tohle by teda mělo být dobře... teď už to jen vypsat na stránku BTW: Kdyby byl i nějaký jiný (třeba i jednodušší :D) způsob toho vypsání, tak ho beru, dělat to pomocí relací 1:N není povinnost, ale bylo mi sděleno, že jinak to asi nepůjde.. |
||
Sir Tom Profil |
#6 · Zasláno: 7. 3. 2013, 18:19:44
MikelCz:
„ale teď, když jsem došel ze školy domů, to už zase nefunguje“ To není možné :)) Kajmanovo řešení je ideální. Nejdříve dotazem vybereš všechny filmy a poté při zpracovávání tohoto dotazu uděláš druhý dotaz na komentáře (a ty vypíšeš). Mimochodem, kde ten tvůj první while ve tvém kódu končí? |
||
MikelCz Profil |
Sir Tom:
To řešení mi nefunguje, nevím proč, zkoušel jsem to vkládat všude do php scriptu a vždycky to vyhodí prázdnou stránku.. :/ Ten while příjde divnej i mně, protože když ho ukončím, tak to opět vyplivne prázdnou stránku, když ho neukončím, tak to funguje.. Jinak jsem zkusil pod ten původní php skript... <?php if($_GET["film"]){ $film = strtolower($_GET["film"]); $film = str_replace('_',' ',$film); mysql_connect("localhost","prosecky_el09a","********"); mysql_set_charset("windows-1250"); mysql_select_db("prosecky_el09a"); $vysledek = mysql_query("SELECT * FROM `filmy` WHERE `anglicky_nazev` = '" . $film . "' OR `bez_diakritiky` = '" . $film . "' OR `original_nazev` = '" . $film . "' OR `nazev` = '" . $film . "'"); while ($radek = mysql_fetch_object($vysledek)) { ?> ...přidat druhej, na místo, kde chci ty komentáře, díky tomuhle zápisu mi to na každý profil filmu (takže i když má třeba id 50) vypisuje komentáře, které mají id 19 <?php $výsledek = mysql_query("SELECT * from comments where id = '19' "); while ($řádek = mysql_fetch_object($výsledek)) { echo "<tr>"; echo "<td > <i> <b><u>".$řádek->name."</u></b></i></td>"; echo "<td>".$řádek->komentar."</td>"; echo "</tr>"; echo "<tr>"; echo "<td >".$řádek->date."</td>"; echo "</tr>"; echo "<tr>"; echo "<td >".$řádek->mail."</td>"; echo "</tr>"; echo "<tr>"; echo "<td> <hr/> </td>"; echo "</tr>"; } mysql_free_result($výsledek); ?> |
||
Sir Tom Profil |
#8 · Zasláno: 8. 3. 2013, 08:35:23
MikelCz:
<?php if($_GET["film"]){ $film = strtolower($_GET["film"]); $film = str_replace('_',' ',$film); mysql_connect("localhost","prosecky_el09a","Ad7hddN5"); mysql_set_charset("windows-1250"); mysql_select_db("prosecky_el09a"); $vysledek = mysql_query("SELECT * FROM `filmy` WHERE `anglicky_nazev` = '" . $film . "' OR `bez_diakritiky` = '" . $film . "' OR `original_nazev` = '" . $film . "' OR `nazev` = '" . $film . "'"); //dotaz na film while ($radek = mysql_fetch_object($vysledek)){ //zde se vypisují informace o filmu $výsledek = mysql_query("SELECT * from comments where id =". $vysledek->id); // dotaz na komentáře k filmu while ($řádek = mysql_fetch_object($výsledek)){ //vypisování komentářů echo "<tr>"; echo "<td > <i> <b><u>".$řádek->name."</u></b></i></td>"; echo "<td>".$řádek->komentar."</td>"; echo "</tr>"; echo "<tr>"; echo "<td >".$řádek->date."</td>"; echo "</tr>"; echo "<tr>"; echo "<td >".$řádek->mail."</td>"; echo "</tr>"; echo "<tr>"; echo "<td> <hr/> </td>"; echo "</tr>"; }//konec vnořeného while } //konec prvního while }// konec if ?> |
||
MikelCz Profil |
#9 · Zasláno: 8. 3. 2013, 09:13:33
Sir Tom: Vložil jsem tenhle script tam, kde byl ten první, ten druhý jsem smazal úplně a výsledek je, že se na stránku nevypíše vůbec nic (ale funguje, není úplně bílá jako obvykle :D )
Asi bude lepší, když pošlu celej zdroják Tenhle je po vložení vašeho skriptu.. <body> <?php if($_GET["film"]){ $film = strtolower($_GET["film"]); $film = str_replace('_',' ',$film); mysql_connect("localhost","prosecky_el09a","********"); mysql_set_charset("windows-1250"); mysql_select_db("prosecky_el09a"); $vysledek = mysql_query("SELECT * FROM `filmy` WHERE `anglicky_nazev` = '" . $film . "' OR `bez_diakritiky` = '" . $film . "' OR `original_nazev` = '" . $film . "' OR `nazev` = '" . $film . "'"); //dotaz na film while ($radek = mysql_fetch_object($vysledek)){ //zde se vypisují informace o filmu $výsledek = mysql_query("SELECT * from comments where id =". $vysledek->id); // dotaz na komentáře k filmu while ($řádek = mysql_fetch_object($výsledek)){ //vypisování komentářů echo "<tr>"; echo "<td > <i> <b><u>".$řádek->name."</u></b></i></td>"; echo "<td>".$řádek->komentar."</td>"; echo "</tr>"; echo "<tr>"; echo "<td >".$řádek->date."</td>"; echo "</tr>"; echo "<tr>"; echo "<td >".$řádek->mail."</td>"; echo "</tr>"; echo "<tr>"; echo "<td> <hr/> </td>"; echo "</tr>"; }//konec vnořeného while } //konec prvního while }// konec if ?> <div style="width: 799px; position: relative;margin: auto;"> <div id="hlavicka"> <div id="vyhledavani" style="padding-top: 80px; padding-left: 380px;"> <form action=""> <acronym title="Vyhledávání filmů. Zadávejte PŘESNÉ názvy, fungují české, bez diakritiky, anglické a původní. Na velkých/malých písmenech nezáleží.">[?]</acronym> <input class='textbox' name="film" value="<?=$_GET["film"]?>" type="text" maxlength="50" size="25" style="background-color:#FFDAB9; border-radius: 5px;" /> <input type='submit' value='Vyhledat' class='button' style="background-color: #D2691E; border-radius: 5px;"/> </form> </div> </div> <div id="obsah"> <div id="nadpisfilmu"> <?=$radek->nazev?> </div> <br> <center> <div id="obsahkrasnyram"> <img src="img/USA.jpg"> <span id="textkrasnyram"> <?=$radek->anglicky_nazev?> | <?=$radek->delka?> | <?=$radek->zeme_vzniku?> | <?=$radek->zanr?> | <?=$radek->rok?></span> </div> </center> <div id="ramherci"> <span id="textkrasnyram" style="padding-left: 7px;">Režisér:</span> <span id="pismoobsahdej" style="padding-left: 5px"><?=$radek->reziser?></span> <center><hr width="98%" color="black" shade="noshade" size="1"></center> <span id="textkrasnyram" style="padding-left: 7px;">Herci:</span> <span id="pismoobsahdej" style="padding-left: 5px"><?=$radek->herci?></span> </div> <div id="obsahdej"> <center> <div id="pismoobsahdej" style="padding-left: 5px; padding-bottom: 3px;"><?=$radek->dej?></div> </center> </div> <div id="ramtrailer"> Trailer <center><iframe width="560" height="315" src="http://www.youtube.com/embed/<?=$radek->trailer?>" frameborder="0" allowfullscreen></iframe></center> </div> </div> <div id="hodnoceni"> <center> <img src="img/hodnoceni.png"> <div id="pismohodnoceni"> <?=$radek->hodnoceni?> </span> </center> </div> <div id="vasehodnoceni"> <center> <img src="img/vasehodnoceni.png"> <br><br> <form action="hodnocenisql.php" method="GET"> <input type="text" name="id" value="<?=$radek->id?>" width="1px" style="display:none"> <input type="text" name="film" value="<?=$radek->bez_diakritiky?>" width="1px" style="display:none"> <input type="text" name="hodnoceni"> <input type="submit" value="zapsat"> </form> </center> </div> <div id="plakatramecek"> <center> <div id="plakat"> <img src="img/posters/<?=$radek->plakat?>" width="115" height="175" style="border-color: brown; border-style: solid; border-width: 1px;"> </div> </center> </div> <div id="komentare"> <center> <form action="commentssql.php" method="GET"> <input type="text" name="id" value="<?=$radek->id?>" width="1px" style=" display:none"> <input type="text" name="bez_diakritiky" value="<?=$radek->bez_diakritiky?>" width="1px" style=" display:none"> <table width="600" height="200" style="table-layout:fixed; border-collapse: collapse; border-color:black;" border="1"> <tr class="peru" bordercolor="black" onmouseover="this.className='chocolate'" onmouseout="this.className='peru'"> <td height="30" bordercolor="black"><span style="padding-left:90px">Jméno </span> <span style="padding-right:90px; float:right"> Mail</span> <br> <span style="padding-left:20px"> <input type="text" name="name" size="26" style="background-color:#FFDAB9; border-width: 1px; border-style: solid; border-color: brown"> </span> <span style="padding-right:20px; float:right"><input type="text" name="mail" size="26" style="background-color:#FFDAB9; border-width: 1px; border-style: solid; border-color: brown"></span></td> <tr bordercolor="black" class="peru" onmouseover="this.className='chocolate'" onmouseout="this.className='peru'"> <td height="80" bordercolor="black"> <center>Text:<br> <textarea name="komentar" placeholder="Váš komentář, maximálně 1000 znaků" height="150" wrap="soft" cols="40" rows="3" style="background-color:#FFDAB9; border-width: 1px; border-style: solid; border-color: brown"></textarea></center></td> </tr><br> <tr bordercolor="black" class="peru" onmouseover="this.className='chocolate'" onmouseout="this.className='peru'"><td height="30" bordercolor="black"> <center><input type="submit" value="Odeslat komentář" onClick="xxx();" /></center></td> </td></tr> </table> </form> </center> <br><br> </div> <div id="celapatka"> <div id="pismo3"> Filmová databáze || © Michal Prosecký || Maturita 2012/2013 </div> </div> </div> </body> </html> Není teda úplně celej, protože by se sem nevešel, proto je to taky tak nahňahňaný na sebe a chybí tam menu a jeden javascript. Nebo by bylo lepší poslat ten předešlý? |
||
juriad Profil |
#10 · Zasláno: 8. 3. 2013, 09:20:38 · Upravil/a: juriad
na řádku 15 má být:
$výsledek = mysql_query("SELECT * from comments where id =". $radek->id); // dotaz na komentáře k filmu Navíc provádíš celý skript (2-34) na nesprávném místě, nemá žádnou sovislost se zbytkem stránky. <html> <body> <div style="width: 799px; position: relative;margin: auto;"> <div id="hlavicka"> <div id="vyhledavani" style="padding-top: 80px; padding-left: 380px;"> <form action=""> <acronym title="Vyhledávání filmů. Zadávejte PŘESNÉ názvy, fungují české, bez diakritiky, anglické a původní. Na velkých/malých písmenech nezáleží.">[?]</acronym> <input class='textbox' name="film" value="<?=$_GET["film"]?>" type="text" maxlength="50" size="25" style="background-color:#FFDAB9; border-radius: 5px;" /> <input type='submit' value='Vyhledat' class='button' style="background-color: #D2691E; border-radius: 5px;"/> </form> </div> </div> <div id="obsah"> <?php if($_GET["film"]){ $film = strtolower($_GET["film"]); $film = str_replace('_',' ',$film); mysql_connect("localhost","prosecky_el09a","********"); mysql_set_charset("windows-1250"); mysql_select_db("prosecky_el09a"); $vysledek = mysql_query("SELECT * FROM `filmy` WHERE `anglicky_nazev` = '" . $film . "' OR `bez_diakritiky` = '" . $film . "' OR `original_nazev` = '" . $film . "' OR `nazev` = '" . $film . "'"); //dotaz na film while ($radek = mysql_fetch_object($vysledek)){ //zde se vypisují informace o filmu ?> <div class="nadpisfilmu"> <?=$radek->nazev?> </div> <br> <center> <div class="obsahkrasnyram"> <img src="img/USA.jpg"> <span id="textkrasnyram"> <?=$radek->anglicky_nazev?> | <?=$radek->delka?> | <?=$radek->zeme_vzniku?> | <?=$radek->zanr?> | <?=$radek->rok?></span> </div> </center> <div class="ramherci"> <span id="textkrasnyram" style="padding-left: 7px;">Režisér:</span> <span id="pismoobsahdej" style="padding-left: 5px"><?=$radek->reziser?></span> <center><hr width="98%" color="black" shade="noshade" size="1"></center> <span id="textkrasnyram" style="padding-left: 7px;">Herci:</span> <span id="pismoobsahdej" style="padding-left: 5px"><?=$radek->herci?></span> </div> <div class="obsahdej"> <center> <div class="pismoobsahdej" style="padding-left: 5px; padding-bottom: 3px;"><?=$radek->dej?></div> </center> </div> <div class="ramtrailer"> Trailer <center><iframe width="560" height="315" src="http://www.youtube.com/embed/<?=$radek->trailer?>" frameborder="0" allowfullscreen></iframe></center> </div> </div> <div class="hodnoceni"> <center> <img src="img/hodnoceni.png"> <div class="pismohodnoceni"> <?=$radek->hodnoceni?> </span> </center> </div> <div class="vasehodnoceni"> <center> <img src="img/vasehodnoceni.png"> <br><br> <form action="hodnocenisql.php" method="GET"> <input type="text" name="id" value="<?=$radek->id?>" width="1px" style="display:none"> <input type="text" name="film" value="<?=$radek->bez_diakritiky?>" width="1px" style="display:none"> <input type="text" name="hodnoceni"> <input type="submit" value="zapsat"> </form> </center> </div> <div class="plakatramecek"> <center> <div class="plakat"> <img src="img/posters/<?=$radek->plakat?>" width="115" height="175" style="border-color: brown; border-style: solid; border-width: 1px;"> </div> </center> </div> <div class="komentare"> <center> <form action="commentssql.php" method="GET"> <input type="text" name="id" value="<?=$radek->id?>" width="1px" style=" display:none"> <input type="text" name="bez_diakritiky" value="<?=$radek->bez_diakritiky?>" width="1px" style=" display:none"> <table width="600" height="200" style="table-layout:fixed; border-collapse: collapse; border-color:black;" border="1"> <?php $výsledek = mysql_query("SELECT * from comments where id =". $radek->id); // dotaz na komentáře k filmu while ($řádek = mysql_fetch_object($výsledek)){ //vypisování komentářů echo "<tr>"; echo "<td > <i> <b><u>".$řádek->name."</u></b></i></td>"; echo "<td>".$řádek->komentar."</td>"; echo "</tr>"; echo "<tr>"; echo "<td >".$řádek->date."</td>"; echo "</tr>"; echo "<tr>"; echo "<td >".$řádek->mail."</td>"; echo "</tr>"; echo "<tr>"; echo "<td> <hr/> </td>"; echo "</tr>"; }//konec vnořeného while ?> <tr class="peru" bordercolor="black" onmouseover="this.className='chocolate'" onmouseout="this.className='peru'"> <td height="30" bordercolor="black"><span style="padding-left:90px">Jméno </span> <span style="padding-right:90px; float:right"> Mail</span> <br> <span style="padding-left:20px"> <input type="text" name="name" size="26" style="background-color:#FFDAB9; border-width: 1px; border-style: solid; border-color: brown"> </span> <span style="padding-right:20px; float:right"><input type="text" name="mail" size="26" style="background-color:#FFDAB9; border-width: 1px; border-style: solid; border-color: brown"></span></td> <tr bordercolor="black" class="peru" onmouseover="this.className='chocolate'" onmouseout="this.className='peru'"> <td height="80" bordercolor="black"> <center>Text:<br> <textarea name="komentar" placeholder="Váš komentář, maximálně 1000 znaků" height="150" wrap="soft" cols="40" rows="3" style="background-color:#FFDAB9; border-width: 1px; border-style: solid; border-color: brown"></textarea></center></td> </tr><br> <tr bordercolor="black" class="peru" onmouseover="this.className='chocolate'" onmouseout="this.className='peru'"><td height="30" bordercolor="black"> <center><input type="submit" value="Odeslat komentář" onClick="xxx();" /></center></td> </td></tr> </table> </form> </center> <br><br> </div> <!-- komentare --> </div> <!-- nadpis-filmu --> <?php } //konec prvního while }// konec if ?> </div> <!-- obsah --> <div id="celapatka"> <div id="pismo3"> Filmová databáze || © Michal Prosecký || Maturita 2012/2013 </div> </body> </html> Všude uvnitř div#obsah musíš používat class místo id, protože výsledkem vyhledávání může být spousta filmů a id se na stránce nesmí opakovat.
|
||
MikelCz Profil |
juriad:
Díky! Komentáře mi to teď vypisuje v pohodě, ale údaje k filmu ne, ale myslím si, že vím, kde je problém.. jak píšete, ten skript se ukončí dřív, než se dostane na vypisování edit: koukám, že jsi upravil příspěvek, takže zatím na toto reagovat nemusíte :) |
||
Sir Tom Profil |
#12 · Zasláno: 8. 3. 2013, 12:45:14
juriad:
> na řádku 15 má být: > $výsledek = mysql_query("SELECT * from comments where id =". $radek->id); // dotaz na komentáře k filmu Ajo - zmýlil jsem se v proměnné - to je z toho z tech zvláštně pojmenovaných proměnných. |
||
Časová prodleva: 3 dny
|
|||
MikelCz Profil |
#13 · Zasláno: 11. 3. 2013, 08:19:37
S odstupem času chci všem poděkovat za pomoc, byl jsem přes víkend nedostupnej.. :) Snad nevadí, když sem pošlu ještě dva menší dotazy..
Pro zapisování hodnocení využívám <input type="text" name="hodnoceni" maxlength="3"> (je to jen provizorní řešení) a potřebuju omezit vkládání v rozmezí 0-100, následně nějak zrušit desetinná místa v tom vypočítaném průměrném hodnocení (mám tam 4, takže např. 60,0000%) |
||
juriad Profil |
#14 · Zasláno: 11. 3. 2013, 09:46:41
Existuje
<input type="number"> , ale nijak moc podporovaný není: http://caniuse.com/input-number
Dále můžeš javascriptem zabránit vložení čtvrtého a dalšího znaku a znaků jiných než číslic. Ale bacha toto řešení není spolehlivé: existují lidé bez JS, text lze do políčka přetáhnout Drag & Drop-em atp. Nikdy nevěř, že ti od klienta přijde požadavek ve tvaru, který očekáváš. Takže kontrole na straně PHP se nevyhneš. Použití nějaké klientské technologie je jen ozdůbka pro uživatele. |
||
MikelCz Profil |
#15 · Zasláno: 11. 3. 2013, 11:19:32
juriad:
No, čtvrtý znak tam vkládat nejde, protože mám nastavenou maxlength, ale zapsat například 999 není problém, potřeboval bych to omezit na 0-100 |
||
Sir Tom Profil |
#16 · Zasláno: 11. 3. 2013, 18:12:18
MikelCz:
„potřeboval bych to omezit na 0-100“ To můžeš omezit za pomoci JavaScriptu - při události stisku klávesy kontroluj hodnotu políčka a pokud bude mimo interval, tak nedovol uživatelovi toto zadání. :) |
||
Časová prodleva: 11 let
|
0