Autor Zpráva
Viktor 36
Profil
Ahojte,

Chcem urobiť výpis z MySQL, ale chcem, aby to písalo iba jeden riadok, kde sa mnou zadané ID rovná niečomu v MySQL.

<?php

if($_GET["id"]){
$id = strtolower($_GET["id"]);

mysql_connect("localhost","meno","heslo");
mysql_select_db("menodb");
$výsledek = mysql_query("SELECT * from filmy WHERE nazev = '$id'");
  while ($řádek = mysql_fetch_object($výsledek))
  {
       
    echo "<TR>";
    echo "<TD>".$řádek->nazev."</td>";
    echo "<TD>".$řádek->original_nazev."</td>";
    echo "<TD>".$řádek->zeme_vzniku."</td>";
    echo "<TD>".$řádek->reziser."</td>";
    echo "<TD>".$řádek->herci."</td>";
    echo "<TD>".$řádek->zanr."</td>";
    echo "<TD>".$řádek->delka."</td>";
    echo "<TD>".$řádek->rok."</td>";
    echo "<TD>".$řádek->hodnoceni."</td>";
    echo "</TR>";
  }
  mysql_free_result($výsledek);
?>

Údaje v MySQL sú nazev, original_nazev, atď. (Môžete vidieť vo výpise). Keď to vypisujem ako celú databázu, tak to funguje.

Jediný problém mám s riadkom $výsledek = mysql_query("SELECT * from filmy WHERE nazev = '$id'");
Amunak
Profil
Nedoporučuji používat diakritiku v názvech proměnných v PHP. Taky bys neměl používat zastaralé mysql_query, ale nějaké jeho novější obdoby (mysqli, PDO). Co se dotazu týče, pokud je ID číslo, nepiš kolem něj uvozovky. Jsi si taky jistý, že záznam s takovým ID existuje? Zkus toto:
mysql_query( "SELECT * FROM `filmy` WHERE `nazev` = " . $id );

Taky snad nepotřebuješ ten cyklus, vždycky dostaneš jen jeden řádek.
Viktor 36
Profil
To id má byť reťazec znakov(string). Zatiaľ skúsim toto. A robím to kamarátovi. On tam použil tie premenné s diakritikou, ale ešte som to nezmenil.

Edit : Skúsil som to s číslami a už to funguje, ale potreboval by som to so slovami a to mi nefunguje.
Amunak
Profil
Viktor 36:
Musíš porovnávat to, co máš v databázi. Pokud je to sloupec textový, třeba varchar, porovnáváš text (a je to v apostrofech). Pokud je to číslo, porovnáváš číslo. Když jsem četl název proměnné id, předpokládal jsem, že jde o unikátní číselný identifikátor. Můžeš zkusit třeba
mysql_query( "SELECT * FROM `filmy` WHERE `nazev` = '" . $id . "'");
Tori
Profil
Viktor 36:
Chybí ošetření vstupu: pokud je $id číslo, přetypovat na číslo. Pokud může obsahovat i písmena, prohnat přes mysql_real_escape_string.
Viktor 36
Profil
No, ja som to kopíroval z jedného mojho scriptu, kde to berie čísla a nezmenil som premennú. Ďakujem vám za pomoc. Už mi to funguje bez problému :)


Potrebujem ešte niečo ...

<?php
if($_GET["film"]){
$film = strtolower($_GET["film"]);
$film = str_replace('_',' ',$film);

mysql_connect("localhost","prosecky_el09a","********");
mysql_select_db("prosecky_el09a");
$vysledek = mysql_query("SELECT * FROM `filmy` WHERE `original_nazev` = '" . $film . "'");
  while ($radek = mysql_fetch_object($vysledek))
  {    
?>
Ten script končí niekde inde... Dalo by sa urobiť, aby som do premennej $film dal niečo s diakritikou a porovnalo by to dobre s niečím s diakritikou v databáze? Skúšal som to, ale nefunguje to.

Moderátor Davex: Zcenzurováno heslo do databáze. Příště ho prosím raději nezveřejňuj.
Tori
Profil
Viktor 36:
Dalo by sa urobiť, aby som do premennej $film dal niečo s diakritikou a porovnalo by to dobre s niečím s diakritikou v databáze?
Pro jistotu bych nastavila správné kódování pro spojení s DB. Uvedený dotaz najde pouze záznamy, kde se zadání přesně shoduje s textem v DB. Jinak můžete použít LIKE + zástupné znaky, nebo fulltext (nemám teď po ruce lepší odkaz na fulltextové vyhledávání).
Jestli chcete aby i zadání bez diakritiky našlo v DB text s diakritikou, musí mít ten sloupec správně nastavené porovnávání. Koukněte např. na porovnávání podle utf8_czech_ci vs. podle utf8_general_ci.

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: