| 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 filmuNaví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: 13 let
|
|||
0