Autor Zpráva
Milan1236000
Profil
Zdravím,
při načtení stránky se ukazuje, že je chyba v označeném řádku, co je ale špatně?
$vysledekhledani = $_GET['hledanytext'];
        <h2 class="modry_nadpis">Interpreti</h2>
          <ul>
<?php
$vysledek_interpreti = $pripojeni->query("SELECT * FROM `tabulka` WHERE Interpret LIKE '%$vysledekhledani%'");
while($zaznam_interpreti = $vysledek_interpreti->fetch_object())
{
  printf("<li class=\"odkazovy_seznam\"><a href=\"/%s\">%s</a></li>", $zaznam_interpreti->Url, $zaznam_interpreti->Interpret);
}
?>          
          </ul>
        <h2 class="modry_nadpis">Skladby</h2>
          <ul>
<?php
$vysledek_skladby = $pripojeni->query("SELECT * FROM `tabulka` WHERE Skladby LIKE '%$vysledekhledani%'");
while($zaznam_skladby = $vysledek_skladby->fetch_object())
{
  printf("<li class=\"odkazovy_seznam\"><a href=\"/%s\">%s</a></li>", $zaznam_skladby->Url, $zaznam_skladby->Interpret);
}
?>          
          </ul>
První část (interpreti) se vypíše, druhá už ne.
Díky.
Camo
Profil
Milan1236000:
No zrejme je ten dotaz chybný. To by si mal testovať, či ti volanie query() vracia platný výsledok než ho hodíš do while cyklu. Niečo ako
if(!$vysledek_skladby){ echo $mysqli->error; }
Ešte by sa hodilo, keby si tú chybu sem skopíroval.
Milan1236000
Profil
Camo:
Tak chybu jsem našel. V databázi jsem měl jinak pojmenovaný sloupec. Teď ale mám problém. Po vypsání výsledku vyhledávání se zobrazí tohle. Jak docílit toho, aby se část 2 vypsala až za část 1?
mimochodec
Profil
Milan1236000:
To je věc nastylování. Pro řešení tohoto je php irelevantní, je potřeba odkaz na stránku, kde se to děje, případně to zkopíruj na http://kod.djpw.cz/ a uveď do toho stavu, který máš.
Joker
Profil
Milan1236000:
Bylo by dobré vstup ošetřit proti SQL injection, resp. aby to nespadlo, když dám vyhledat např. O'Connor.
Milan1236000
Profil
mimochodec:
Áno, máš pravdu, bylo to stylem, měl jsem napevno nastavenou výšku <ul>.
Joker:
O SQL injection jsem už slyšel, časem to tam taky asi přidám. Ale proč by to mělo spadnout při hledání O'Connor?
Camo
Profil
Milan1236000:
Pretože znak ' v jazyku sql zanamené koniec reťazca takže všetko za ' bude vyhodnotené ako príkaz. Takže 'Sarah 'O Conor' spôsobí, že server si nebude vedieť vysvetliť, čo za príkaz je O Conor preto vyhodí chybu. Takže nie že to tam ASI pridáš ale pridáš to tam hneď. Lebo keď niekto zadá pri prihlasovaní meno injection' or 1=1 -- tak to spraví
SELECT * FROM users WHERE name = 'injection' OR 1=1 --' AND password = SHA1('heslo'). To znamená, že všetko za -- sa chápe ako komentár(pretože v sql znamená -- komentár). Takže sa ti tam prihlási bez hesla. Toto je sql injection a keďže si o tom už počul určite si zachytil, že je to nebezpečné.
Milan1236000
Profil
Camo:
Fajn, ošetřím to. Díky.

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: