Autor Zpráva
MikelCz
Profil
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
Uvnitř while si uděláte druhý dotaz

$komentare=mysql_query("select * from comments where bez_diakritiky='".mysql_real_escape_string($radek->bez_diakritiky)."'");
a případné vrácené řádky zpracujete a vypíšete.

Jen si dejte pozor, název filmu nebývá vždy jedinečný. Je to tedy nevhodný primární klíč.
MikelCz
Profil
MikelCz:
Tak naprostým kamikadze stylem se mi to povedlo zprovoznit bez cizí pomoci, můžete lock :)
Joker
Profil
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
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
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
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">
&nbsp;&nbsp;&nbsp;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
na řádku 15 má být:
$výsledek = mysql_query("SELECT * from comments where id =". $radek->id); // dotaz na komentáře k filmu
A začni používat nějaké lepší názvy než jen "výsledek" a "řádek"; třeba "filmy" pro výsledek query a "film" pro jeden řádek při dotazu do tabulky filmy a "komentare" pro výsledek query a "komentar" pro jeden "řádek" při dotazu do tabulky komentáře.

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">
&nbsp;&nbsp;&nbsp;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
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.
MikelCz
Profil
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
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
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
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í. :)

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: