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: 10 let
|
0