| 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 |
#2 · Zasláno: 1. 3. 2015, 20:45:00
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 |
#3 · Zasláno: 1. 3. 2015, 20:55:34
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 |
#4 · Zasláno: 1. 3. 2015, 20:56:13
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 |
#5 · Zasláno: 1. 3. 2015, 21:04:26
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 |
#10 · Zasláno: 1. 3. 2015, 22:21:14
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 |
#11 · Zasláno: 1. 3. 2015, 22:25:08
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 |
#12 · Zasláno: 1. 3. 2015, 22:38:45
lionel messi:
Konečně už to jede! :-) Díky moc! :-) |
||
|
Časová prodleva: 11 let
|
|||
0