Tuossa jokinaika sitten
(https://www.ohjelmointiputka.net/keskustelu/6244-mysql-kanta-aakkosten-mukaan-haku)
kyselin tapaa toteuttaa mysqlkannasta aakkostenmukaan haun. Tänään lähdin toteuttamaan tuota helppien mukaan, mutta joku mättää enkä löydä itse vikaa. Neovoja..?
<?php include "./gonf.php"; //täällä kannan avaukset yms. $k = "abcdefghijklmnopqrstuvwxyzåäö"; for ($i = 0; $i < strlen($k); $i++) { echo "<a href=\"products.php?kirjain={$k[$i]}\">{$k[$i]}</a> "; } echo("<table>"); $kirjain = $_GET['kirjain']; $sql = "SELECT *FROM tuote WHERE nimi LIKE '($kirjain)%' ORDER BY nimi"; $res = mysql_query($sql); echo("<tr><td>id</td><td>nimi</td><td>hinta</td>"); while ($values = mysql_fetch_array($res)) { echo("<td>{$values["id"]}</td>"); echo("<td>{$values["nimi"]}</td>"); echo("<td>{$values["hinta"]}</td>"); echo("</tr></table>"); } ?>
Miten ongelma ilmenee? Mahdolliset virheilmoitukset?
Itse en ainakaan keksinyt koodista kuin pari pikku virhettä, joiden en uskoisi toimitaan pahemmin vaikuttavan: Ainakin yhteyden sulkeminen puuttuu ja tuo taulukko lopetetaan useampaan otteeseen.
Ja mikset laittanut tätä kysymystä vanhaan ketjuun?
Akseli F kirjoitti:
Miten ongelma ilmenee? Mahdolliset virheilmoitukset?
Ja mikset laittanut tätä kysymystä vanhaan ketjuun?
Itseasiassa toi ei anna mitään virheilmoitusta. :/ Toi vaan ei tuo näytölle esim. a:lla alkavia tuotteita.
Typeryyttäni en laittanut, sorry!
Olisikohan noi sulut tuolla SQL-lauseessa ylimääräiset. Kohdassa LIKE '($kirjain)%'
btw.
$kirjain = get_magic_quotes_gpc() ? $_POST['kirjain'] : mysql_escape_string($_POST['kirjain']);
Lomakkeelta tulevat tiedot on hyvä tarkistaa AINA ennen kyselyn suoritusta.
Tässä korjattu koodi:
<?php //yhteys ulkoiselle palvelimelle $yhteys = mysql_connect("palvelin", "kayttaja", "salasana"); //valitaan tietokanta "test" mysql_select_db("tietokanta", $yhteys); $k = "abcdefghijklmnopqrstuvwxyzåäö"; for ($i = 0; $i < strlen($k); $i++) { echo "<a href=\"s.php?kirjain={$k[$i]}\">{$k[$i]}</a> "; } echo("<table>"); $kirjain = $_GET['kirjain']; $sql = "SELECT *FROM tuote WHERE nimi LIKE '{$kirjain}%' ORDER BY nimi"; $res = mysql_query($sql); echo("<tr><td>id</td><td>nimi</td><td>hinta</td>"); while ($values = mysql_fetch_array($res)) { echo("<tr><td>{$values["id"]}</td>"); echo("<td>{$values["nimi"]}</td>"); echo("<td>{$values["hinta"]}</td>"); echo("</tr>"); } mysql_close($yhteys); ?>
Edit: ajv oli nopeampi :)
Tuo skriptille annettu kirjain okisi tosiaan hyvä tarkistaa, ettei käytäjä saisi jatkaa SQL-lausetta.
Ajv tosiaan oli oikeassa noiden sulkujen suhteen, ei niitä välttämättä tarvitse ja jos haluaa niitä käyttää niin niiden pitäisi ollla tyyppiä { ja }.
DankeDanke! mä huomasin kanssa ite et noissa suluissa oli vikaa.
ajv kirjoitti:
$kirjain = get_magic_quotes_gpc() ? $_POST['kirjain'] : mysql_escape_string($_POST['kirjain']);
Lomakkeelta tulevat tiedot on hyvä tarkistaa AINA ennen kyselyn suoritusta.
Ajv. Viitsisitkö selittää tuon ylläolevan toiminnan?
Aihe on jo aika vanha, joten et voi enää vastata siihen.