Autor Zpráva
Hanisx
Profil
Dobrý večer,

Mám stránku, kde si vypisuji data z mysql tabulky (jako jmeno, prijmeni). A já bych chtěl, aby si je uživatel mohl filtrovat, tzn: když si např zadá jméno, tak aby po stisknutí tlačítka "Vyhledat", aby se mu vyfiltrovali lidé s tím jménem, které zadal.

Takhle to zatím mám ale nefunguje to:
<form method="POST" action="">
<label>Jméno:</label>
<input type="text" name="Jmeno">
<label>Příjmení</label>
<input type="text" name="Prijmeni">
<br />
<input type="submit" value="Vyhledat" name="search">
</form>

<?php 
$con = mysqli_connect("localhost","xxxxx","xxxxx","xxxx") 
or die('Could not connect to MySQL database. ' . mysql_error());   
mysqli_query($con, "SET NAMES 'utf8'"); 
if(isset($_POST['search']))
{
$jmeno = $_GET['Jmeno'];
$result = mysql_query($con,"SELECT * FROM xxxxxxxx WHERE Jmeno LIKE '".$jmeno."'");
}       
?>               

Díky předem za radu.
lionel messi
Profil
Hanisx:
Pracuješ s mysqli, ale na riadku 18 používaš mysql_query.

Taktiež by sa hodilo escapovať vstupné dáta, keď sa niekto bude volať O'Reilly, dotaz zlyhá. Ešte závažnejšia je však náchylnosť proti útoku SQL Injection.
Hanisx
Profil
lionel messi:
I když to přepíši na "mysqli" tak to stejně nejede..... jinak co se týče toho, že to bude náchylné k útokům, tak to je mi celkem jedno. A zatím bych ani neřešil to, že se někdo bude jmenovat O'Reilly.
mimochodec
Profil
Navíc LIKE vyžaduje i nějaké zástupné znaky % nebo _ , viz http://www.w3resource.com/mysql/string-functions/mysql-like-function.php
Fisir
Profil
Reaguji na Hanisxe:
co se týče toho, že to bude náchylné k útokům, tak to je mi celkem jedno. A zatím bych ani neřešil to, že se někdo bude jmenovat O'Reilly.
A kdy to hodláš řešit? Až bude zbytek webu/aplikace hotový? To bude pozdě, na něco zapomeneš.
Hanisx
Profil
Fisir:
Já budu rád, když vůbec to bude fungovat, což zatím nefunguje. Trošku sem to upravil ale výsledek stále žádný, prostě to nevypisuje.

Zde tedy dávám celý kod stránky:
<form method="POST" action="">
<label>Jméno:</label>
<input type="text" name="Jmeno">
<label>Příjmení</label>
<input type="text" name="Prijmeni">
<br />
<input type="submit" value="Vyhledat" name="search">
</form>

<?php 
$con = mysqli_connect("localhost","xxxx","xxxx","xxxxxx") 
or die('Could not connect to MySQL database. ' . mysql_error());   
mysqli_query($con, "SET NAMES 'utf8'"); 
$result = mysqli_query($con, "SELECT * FROM xxxxx");  
if(isset($_POST['search']))
{        
$result= mysqli_query($con,"SELECT * FROM xxxxx WHERE Jmeno = ".$_GET["Jmeno"].""); 
while($row = mysqli_fetch_array($result)) { 
  echo "<tr>";
  echo "<td>" . htmlspecialchars($row['Jmeno']) . "</td>";
  echo "<td>" . htmlspecialchars($row['Prijmeni']) . "</td>";
  echo "</tr>";
}  
}                      
echo "<table>
<tr>
<th>Jméno</th>
<th>Příjmení</th>
</tr>";

while($row = mysqli_fetch_array($result)) { 
  echo "<tr>";
  echo "<td>" . htmlspecialchars($row['Jmeno']) . "</td>";
  echo "<td>" . htmlspecialchars($row['Prijmeni']) . "</td>";
  echo "</tr>";
}  

echo "</table>";

mysqli_close($con);
?>  
lionel messi
Profil
Hanisx:
R. 17 uprav takto:
$result = mysqli_query($con,"SELECT * FROM xxxxx WHERE Jmeno = '".$_GET["Jmeno"]."'"); 

MySQL a MySQLi nie je to isté a reťazce sa v SQL ohraničujú apostrofmi.

Podobnú chybu máš na r. 12, potrebuješ mysqli_error, ktorej navyše predáš ako argument $con. Ešte by som podotkol, že konštrukcia or die() nie je najlepšie riešenie výpisu chyby, na ostrom serveri by mala byť tabu a na testovacom je taktiež na zváženie.


Hanisx:
Já budu rád, když vůbec to bude fungovat, což zatím nefunguje.
Kód obsahujúci závažnú (a pritom ľahko opraviteľnú) bezpečnostnú chybu by som zrovna ako funkčný neoznačil. A pritom je to prosté:

$result= mysqli_query($con,"SELECT * FROM xxxxx WHERE Jmeno = '". mysqli_real_escape_string($con, $_GET["Jmeno"])."'"); 
Hanisx
Profil
lionel messi:
opravil jsem to jak si napsal, ale stále to nevypisuje :-(
lionel messi
Profil
Hanisx:
opravil jsem to jak si napsal, ale stále to nevypisuje
Čo vypíše toto:
if(isset($_POST['search']))
{        
  $result= mysqli_query($con,"SELECT * FROM xxxxx WHERE Jmeno = '".$_GET["Jmeno"]."'"); 
  if (mysqli_error($con))
  {
    echo "Chyba SQL dotazu: ". mysqli_error($con);
  }
}
Hanisx
Profil
Hanisx:
Takhle ta stránka vypadá normálně (normálně se to vypisuje):

Ale když do pole jméno zadám např: Adam a kliknu na Vyhledat, tak to prostě nevypíše lidi ze jménem Adam.... :-(
lionel messi
Profil
Hanisx:
Používaš method="post", tak nepracuj s $_GET.

$result= mysqli_query($con,"SELECT * FROM xxxxx WHERE Jmeno = '". mysqli_real_escape_string($con, $_POST["Jmeno"])."'"); 
Hanisx
Profil
lionel messi:
Konečně už to jede! :-) Díky moc! :-)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: