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.