Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tietokannasta haku

Sivun loppuun

artz86 [10.04.2010 13:31:58]

#

elikkäs tarkoituksena olisi saada haettua taulukosta tietyn sarakkeen tiedot ja laittaa ne alasvetovalikkoon ja kun sen valitsee se tulostaa kyseisen tietueen tiedot.
esimerkki taulukon sisältö

id INT AUTO_INCREMENT,
paikka VARCHAR(64),
aika VARCHAR(64),
nimi VARCHAR(64),
jarjestaja VARCHAR(64),

Tuolta pitäisi saada NIMI-kohdan tiedot alasvetovalikkoon.

Toivottavasti joku ymmärsi ongelman. Hankala kirjoittaa auki sitä. Kiitän jo etukäteen.

Teuro [10.04.2010 13:45:03]

#

Ei ollenkaan hankalaa valitset vain sopivan kentän ja tulostat saadun sisällön.

<?php
$hakulauseke = "SELECT nimi FROM taulu ORDER BY nimi ASC";

$nimet = mysql_query($hakulauseke);

if($nimet){
	echo"<select>";

	while($rivi = mysql_fetch_array($nimet)){
		$nimi = $rivi['nimi'];
		echo"<option value=\"{$nimi}\">{$nimi}</option>";
	}

	echo"</select>";
}else{
	echo mysql_error();
}
?>

artz86 [10.04.2010 17:02:38]

#

kiitokset... vielä semmonen, että nyt kun on valinnut sen valikosta, jonkun pitäisi nappia painamalla tulla näytölle kyseisen valinnan tiedot.
eli

nimi
paikka
aika
järjestäjä

Teuro [10.04.2010 17:08:22]

#

Miten sen sinusta pitäisi toimia, tai siis miten sinusta tuota koodia tulisi muutella, jotta tuo toiminta olisi tarkoituksen mukaista? Minusta olisi fiksua hakea ensimmäisessä vaiheessa id ja nimi. id tulee valinnan arvoksi ja nimi tulostetaan valikkoon käyttäjää varten. Haku taasen olisi varmaankin fiksua toteuttaa valitsemalla halutut kentät ja rajaamalla haku vastaamaan valittua id:t. Osannet tehdä tämän itsekin.

artz86 [10.04.2010 19:37:18]

#

<?php
$hakulauseke = "SELECT id ,nimi FROM taulu ORDER BY nimi ASC";
$nimet = mysql_query($hakulauseke);
	if($nimet)
	{
    	echo "<select>";
    	while($rivi = mysql_fetch_array($nimet))
	{
        $nimi = $rivi['nimi'];
		$id = $rivi['id'];
        echo "<option value=\"{$id}\">{$nimi}</option>";
    }
    	echo "</select>";
		echo "<BR /><BR />";
	}
	else
	{
    	echo mysql_error();
	}
?>

Tuon osasin, mutta mitenkäs se tulee tuo rajaus id:n perusteella...
Yritin jotain

<?php
$query = mysql_query('SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = ?');
while($kisa = mysql_fetch_array($id))
{
//tänne halutut tulosteet ECHO ....
}
?>

Virheilmoitus: Warning: mysql_fetch_array() expects parameter 1 to be resource, null given
Kiitokset taas etukäteen...

pistemies [10.04.2010 20:16:45]

#

Lainausmerkit ja hipsut kehiin...
Haku id:stä numero 2

$query = mysql_query("SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = '2'");

trilog [10.04.2010 20:23:52]

#

Pekka Mansikka kirjoitti:

Lainausmerkit ja hipsut kehiin...

Heittomerkkejä ei numeroarvoihin kuulu laittaa. Tosin MySQL nähtäväksi antaa anteeksi tämän(kin) erheen.

artz86: Tuossa rajaat kyselyn ID:lle; ?, jota tuskin kannasta löytyy. Ja kuten virheviestistä voi päätellä, tuollaista muuttujaa ($id) ei ole olemassa.

artz86 [10.04.2010 21:24:28]

#

Mutta mitenkäs tuo, kun tarkoituksena on saada tuosta aiemmasta php-koodista tuo alasvetovalikon value id:ksi, jonka mukaan rajataan haku.

trilog [10.04.2010 21:27:43]

#

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=phpj4#tietojenvalitys

pistemies [10.04.2010 23:38:22]

#

Tuossa mysql_query lauseessa siis pitääpi olla lomakkeelta tuleva muuttuja vastaanottamassa lomakkeen tietoja...arvannet mihin kohtaan $_POST['id'] (tai mikä sinulla onkin lomakkeen kentän nimi ja muoto), tulisi sijoittaa....

Munnu [10.04.2010 23:57:16]

#

Lisätään vielä, että esitelty tapa tehdä kyselylausekkeita aiheutta reiän mahdolliselle SQL-hyökkäykselle. Tuon ID:n perään voi laittaa mitä tahansa, vaikka toisen ikävämmän kyselyn. Bind_param:lla on tapa laittaa php:ssa kyselyihin muuttujat paikalleen,

https://www.php.net/manual/en/mysqli-stmt.bind-param.php

temu92 [11.04.2010 02:46:32]

#

trilog kirjoitti:

Heittomerkkejä ei numeroarvoihin kuulu laittaa. Tosin MySQL nähtäväksi antaa anteeksi tämän(kin) erheen.

Tiedä sitten, mutta jossakin oppaassa jota lueskelin joskus (oliskos ollu joku CodeIgniterin dokumentaatio tai sinne päin) kehotettiin laittamaan heittomerkit kaikkien syötettävien arvojen ympärille, eli siis myös numeroihin.

Grez [11.04.2010 03:37:51]

#

MySQL omassa dokumentaatiossaan kehottaa käyttämään hipsuja, mutta mielestäni perustelu ontuu. Koska hipsuja käytettäessäkin käyttäjän syöte joudutaan käsittelmään, niin eikö numeron tapauksessa voisi vaan käsitellä sen eri tavalla kuin tekstin (esim. poistamalla kaiken muun kuin numerot tai muuntamalla numeroksi).

Joissakin tietokannoissa tuollaisesta on myös nopeushaittaa. Esim. haussa ...where blaa=234 käyttäisi indeksiä ja ...where blaa='234' ei käyttäisi indeksiä. MySql:ssä ilmeisesti ei ole näin.

artz86 [11.04.2010 11:36:08]

#

$query = mysql_query('SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = $_POST['id']');

Noin, jos tulee niin kuitenkin erroria heittää... nyt en vain keksi muutakaan... jäätyy tosi pahasti :D

pistemies [11.04.2010 12:04:03]

#

suunnilleen näin

$query = mysql_query("SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = '".$_POST['id']."'")

Siinä voi sittä harkita, laittaako noita ' hipsui vai eih.

Metabolix [11.04.2010 12:44:28]

#

Muista mysql_real_escape_string, muuten käy vielä jonain päivänä pahasti.

artz86 [11.04.2010 13:22:49]

#

Pekka Mansikka kirjoitti:

suunnilleen näin

$query = mysql_query("SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = '".$_POST['id']."'")

Siinä voi sittä harkita, laittaako noita ' hipsui vai eih.

Mutta edelleen tulee virheilmoitus: Warning: mysql_fetch_array() expects parameter 1 to be resource, null given

Metabolix [11.04.2010 13:42:36]

#

No katso sitten oppaasta, miten sitä mysql_fetch_arrayta oikein käytetään. Ei sille suinkaan id:tä anneta vaan mysql_queryn tulos, josta se hakee rivit järjestyksessä. Ensin kannattaa kuitenkin myös tarkistaa, että mysql_query onnistui.

pistemies [11.04.2010 14:22:00]

#

Tuohon loppuun kannaattaa laittaa aina errori-tarkistus

mysql_query("Pla pla pla") or die (mysql_error());

artz86 [13.04.2010 23:29:43]

#

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sarjatiedot</title>
</head>

<body>
<?PHP
  function connect_db()
  {
    mysql_connect('localhost', 'root', '');
    mysql_select_db('kilpailut');
  };
connect_db();
if(!isset($_POST['sarja_ok']))
{
?>
<FORM method = post action = 'sarjatiedot.php'>
<?php
$hakulauseke = "SELECT id ,kisanimi FROM kilpailu ORDER BY kisanimi ASC";
$nimet = mysql_query($hakulauseke);
    if($nimet)
    {
        echo "<select name=id>";
        while($rivi = mysql_fetch_array($nimet))
    {
        $nimi = $rivi['kisanimi'];
        $id = $rivi['id'];
        echo "<option value=\"{$id}\">{$nimi}</option>";
    }
        echo "</select>";
        echo "<BR /><BR />";
    }
    else
    {
        echo mysql_error();
    }
?>
<INPUT type = submit name = kisa_ok value = jatka />
</FORM>
<?PHP
	//}
	else
	{
	$query = mysql_query("SELECT id, paikka, aika, kisanimi, seura, hiihtotapa, viim_ilmoittautuminen FROM kilpailu  WHERE id = ".$_POST['id']);
		echo "<table border=1>";
		echo "<tr><td colspan=2 align=center><b>Kilpailun tiedot</b></td></tr>";
	while($kisa = mysql_fetch_array($query))
	{
    	echo "<tr>";
		echo "<td><b>Kisanimi</b></td>";
   		echo "<td>" . $kisa["kisanimi"] . "</td>";
		echo "</tr>";
    	echo "<tr>";
		echo "<td><b>Päivämäärä</b></td>";
    	echo "<td>" . $kisa["aika"] . "</td>";
		echo "</tr>";
    	echo "<tr>";
		echo "<td><b>Paikka</b></td>";
    	echo "<td>" . $kisa["paikka"] . "</td>";
		echo "</tr>";
    	echo "<tr>";
		echo "<td><b>Seura</b></td>";
    	echo "<td>" . $kisa["seura"] . "</td>";
		echo "</tr>";
    	echo "<tr>";
		echo "<td><b>Hiihtotapa</b></td>";
    	echo "<td>" . $kisa["hiihtotapa"] . "</td>";
		echo "</tr>";
    	echo "<tr>";
		echo "<td><b>Viimeinen ilmoittautuminen</b></td>";
    	echo "<td>" . $kisa["viim_ilmoittautuminen"] . "</td>";
		echo "</tr>";
		echo "</table>";
		echo "<br><br>";
	}
?>
<FORM method = post action = 'sarjatiedot.php'>
<INPUT type = hidden name = 'kisa' value = <?PHP print $_POST['id']; ?> />
<table width="30%" border="0">
  <tr>
    <td width="56%">Sarjan nimi: </td>
    <td width="44%"><input type = text name = 'sarjanimi' /></td>
  </tr>
  <tr>
    <td>Sarjan lyhyt nimi: </td>
    <td><input type = text name = 'sarjalyhytnimi' /></td>
  </tr>
  <tr>
    <td>Matka: </td>
    <td><input type = text name = 'matka' /></td>
  </tr>
</table>
<INPUT type = submit name = 'sarja_ok' value = 'jatka' />
</FORM>
<?php
	//}
	else
	{
	$sarjanimi = $_POST["sarjanimi"];
	$sarjalyhytnimi = $_POST["sarjalyhytnimi"];
	$matka = $_POST["matka"];
	$kisaid = $_POST['id'];
	}
	{
		$query = mysql_query("INSERT INTO laji (sarjanimi, sarjalyhytnimi, matka, kisaid)

VALUES('$sarjanimi','$sarjalyhytnimi','$matka','$kisaid')");
		echo "<table border=1>";
		echo "<tr><td colspan=2 align=center><b>Sarjan tiedot</b></td></tr>";
		$max_id = mysql_fetch_array(mysql_query('SELECT MAX(id) maxid FROM laji'));
		$max_id = $max_id['maxid'];
		$query2 = mysql_query('SELECT sarjanimi, sarjalyhytnimi, matka FROM laji WHERE id = '.$max_id);
	}
	while($sarja = mysql_fetch_array($query2))
	{
    	echo "<tr>";
		echo "<td><b>Sarjanimi</b></td>";
   		echo "<td>" . $sarja["sarjanimi"] . "</td>";
		echo "</tr>";
    	echo "<tr>";
		echo "<td><b>Päivämäärä</b></td>";
    	echo "<td>" . $sarja["sarjalyhytnimi"] . "</td>";
		echo "</tr>";
    	echo "<tr>";
		echo "<td><b>Paikka</b></td>";
    	echo "<td>" . $sarja["matka"] . "</td>";
		echo "</tr>";
		echo "</table>";
		echo "<br><br>";
	}
	else
	{
?>
<INPUT type = submit name = 'uusi' value = 'Uusi sarja' />
<?PHP
	}

}
}
?>
</body>
</html>

Ensinnäkin tiedän uupuu osasta kohtaa tuo error tarkistus. Mutta ne olen lisäämässä, kun saan ensin virheen korjattua. Eli virheenä on Parse error: syntax error, unexpected T_ELSE on line 44....
Olen tässä nyt yrittänyt etsiä virhettä, mutta ei satu silmään missä voisi olla virhe... Eihän sitä aina itse huomaa omia virheitä, kun tarpeeksi pitkään koodia katsoo. Voi olla, joku pikkuvirhe mutta kun ei huomaa niin ei sitten huomaa.... Kiitokset taasen etukäteen.

Metabolix [14.04.2010 02:25:16]

#

Laske aaltosulkujen määrä if- ja else-rivien välissä ja tarkista, että jokaista if-sanaa vastaa vain yksi else.

pistemies [14.04.2010 17:19:16]

#

Kannattaa vähentää ylimääräisiä sulkeita vaikka näin:

$nimet = mysql_query($hakulauseke) or die (mysql_error());

        echo "<select name=id>";
        while($rivi = mysql_fetch_array($nimet))
    {
        $nimi = $rivi['kisanimi'];
        $id = $rivi['id'];
        echo "<option value=\"{$id}\">{$nimi}</option>";
    }
        echo "</select>";
        echo "<BR /><BR />";

Itse vika lienee tuossa:

  //}
    else
    {

Poista kommenttimerkki.

artz86 [10.05.2010 10:37:28]

#

Hei taasen!

Edellisistä neuvoistta oli paljon apua, mutta nyt pitäs saada toimimaan niin, että id:llä on haetaan sitä vastaavat tiedot toisesta taulukosta...

tässä tapauksessa... ilmoittautuminen taulussa on laji_id, jolla pitäisi hakea laji taulusta id:tä vastaavat sarjalyhytnimi ja matka. Ja nämä vielä pitäisi sitten saada tulostettua....

Itse sain siihen asti, että jos yksi kilpailija on vain, mutta jos on useampi ja varsinkin eri sarjoissa niin ei tulostu kuin yhdelle sarja.

Kiitokset taas etukäteen.

Othnos [10.05.2010 17:49:11]

#

MySQL ja PHP, Osa 9 - Monta taulua löytynee ratkaisu tuohon ongelmaasi.

$sql = "SELECT laji.id, laji.sarjalyhytnimi, laji.matka FROM laji, ilmoittautuminen WHERE laji.id = ilmoittautuminen.laji_id";
$result = mysql_query($sql) or trigger_error(mysql_error(),E_USER_ERROR);

Kyseisellä koodilla saat todennäköisesti halutut tiedot haetuksi. Lopun saat hoitaa itse.

artz86 [14.05.2010 21:14:49]

#

Kiitokset taasen edellisestä.

Vielä semmoinen kysymys, että kuinka saisi helpoiten ja miten tehtyä. "tulostettava versio" sivun. Eli nyt heittää sivupohjaan osallistujaluettelon ja lisäsin sivun loppuun linkin tulostettava versio ja siitä täytyisi aueta blankko sivu ilman sivupohjaa, mutta sisältäen kilpailun nimen yms.

Lähinnä sitä vain tiedustelen, kuinka saisin tuon valitun kisa_id:n siirrettyä osallistujaluettelo.php:stä tulostus.php:n


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta