Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tiedon haku lomakkeeseen

Sivun loppuun

eija [03.11.2010 17:30:07]

#

Miten ihmeessä/onko mahdollista?

Minulla on yksinkertainen lomake:

<form action="<?php print $PHP_SELF?>" method = "POST">
<!--Kentät-->
Etunimi: <br/><input type="text" name="etunimi" /><br/>
Sukunimi: <br/><input type="text" name="sukunimi""
<!--Painikkeet-->
<input type="submit" name="lisays" value="Lisää" />
<input type="submit" name="haku" value="Hae sukunimellä" />
</form>

Ja käsittelen lomaketta:

if (isset(lisays))
//Koodi, joka tallentaa tietokantaan. Tämä on helppo.
if (isset (haku))
//Olen syöttänyt sukunimen sukunimi-kenttään ja haluan hakea etunimen.
//Tämäkin on vielä helppoa.

Mutta millä ihmeellä saan hakemani etunimen laitettua formin etunimi -kenttään? Täytyykö tässä nyt käyttää JavaScriptiä tai tulostaa PHP:llä ihan erillinen lomake vai onnistuuko tuon tiedon haun tekemään jotenkin PHP:llä?

Mod. lisäsi kooditagit!

Teuro [03.11.2010 17:44:42]

#

Millainen on haluttu lopputulos? Riittääkö sellainen toiminto, jossa jo syötetty etu- ja sukunimi on tulostettuina lomakkeen kenttiin, kuten tuosta tajusin vai tarvitaanko jotain muuta? Mikäli tuo riittää voit vain tulostaa value atribuutille arvon $_POST['sukunimi'] ja vastaavan etunimelle.

eija [03.11.2010 18:03:21]

#

Riittää sellainen toiminto, että etunimi ja sukunimi ovat tulostettuina lomakkeen kenttiin. Ja näinkin olen sitä kokeillut (mutta lomake pysyy tyhjänä):

if (isset($haku))
{
    $_POST['etunimi'] ="Eemeli";
    $_POST['sukunimi']="Meikäläinen";
}

Jaa, niin tietty. Ohjelmahan suorittaa ensin lomakkeen, sitten if- testit ja tiedosto päättyy siihen. Mitenkähän sen saisi kutsumaan itseään uudelleen yhden kerran, kun nuo sijoitukset on tehty?

-tossu- [03.11.2010 18:10:58]

#

Haluat ilmeisesti, että käyttäjän antama arvo pysyy siinä lomakkeessa?

<form action="" method="post">
<input type="text" name="etunimi" value="<?php echo $_POST ['etunimi']; ?>">

Tuohon kannattaa lisätä vielä tarkistus, onko $_POST ['etunimi'] olemassa.

Teuro [03.11.2010 18:11:25]

#

Eikös olisi ihan ok jos teet sen näin?

if (isset($_POST['etunimi'])) {
    $etunimi = $_POST['etunimi'];
    $sukunimi = $_POST['sukunimi'];
}
?>

Tämän jälkeen vain tuo sinun lomakekoodi, mutta input-kenttien value atribuuttiin nuo $etunimi ja $sukunimi muuttujat vaikka echolla tulostellen.

Macro [03.11.2010 18:11:31]

#

Sun pitää muuttaa sitä inputin value-attribuuttia.

Edit. Hidas minä.

Metabolix [03.11.2010 18:21:42]

#

-tossu- varmaankin ratkaisi ongelman oikein, mutta lisäksi pitää ehdottomasti käyttää htmlspecialchars-funktiota tulostettavan arvon ympärillä, erityisesti silloin, kun se tulee suoraan käyttäjän lähettämistä tiedoista.

eija [03.11.2010 18:43:32]

#

Ei onnistu vieläkään. Selvennän uutta oppimaani käyttäen.

<form action="<?php print $PHP_SELF?>" method = "POST">
<!--Kentät-->
Etunimi: <br/><input type="text" name="etunimi" value="<?php echo $_POST ['etunimi']; ?>"/><br/>
Sukunimi: <br/><input type="text" name="sukunimi" value="<?php echo $_POST ['sukunimi']; ?>"/><br/>
<!--Painikkeet-->
<input type="submit" name="lisays" value="Lisää" />
<input type="submit" name="haku" value="Hae sukunimellä" />
</form>

<?php
if (isset($lisays))
//Tähän lisäys koodia, OK toimii.

if (isset ($haku))
//Tähän hakukoodia ja tulokset halutaan sinne lomakkeen etu- ja sukunimi -kenttiin, haun tuloksena esim. Eemeli Meikalainen
{
    $_POST['etunimi'] ="Eemeli";
    $_POST['sukunimi']="Meikäläinen";
}
?>

Lomakkeiden kentät pysyvät tyhjinä. Mitähän minä nyt ymmärrän väärin?
Kyllä, tuo htmlspecialchars-funktio on tärkeä.

Metabolix [03.11.2010 18:47:32]

#

PHP-koodi ajetaan jokaisella sivunlatauksella alusta loppuun ylhäältä alaspäin. Käsittelykoodin pitää siis olla ennen tulostusta, eihän noita uusia etunimi- ja sukunimiarvoja muuten tiedetä tulostusvaiheessa.

Teuro [03.11.2010 18:55:50]

#

Joku tällainen versio voisi olla ihan paikallaan oikeasti funktiot olisi hyvä olla jossakin yhdessä paikassa, jotta kokonaisuus pysyisi loogisena. Tämä nyt kuitenkin toimii virheittä ja juuri kuten eija haluaa.

<html>
	<head>
		<title>Esimerkki</title>
	</head>
	<body>
<?php

function siivoa_syote($s) {
    $s = stripcslashes($s);
    $s = htmlspecialchars($s);

    return trim($s);
}

if (isset($_POST ['etunimi'])) {
    $etunimi = siivoa_syote($_POST['etunimi']);
    $sukunimi = siivoa_syote($_POST['sukunimi']);
} else {
    $etunimi = "";
    $sukunimi = "";
}
?>

		<form action="" method="post">
			<p><label for="etunimi">Etunimi:</label><input type="text" name="etunimi" value="<?php echo $etunimi ?>"/></p>
			<p><label for="sukunimi">Sukunimi:</label><input type="text" name="sukunimi" value="<?php echo $sukunimi ?>"/></p>
			<p><input type="submit" name="lisays" value="Lisää" />
			<input type="submit" name="haku" value="Hae sukunimellä" /></p>
		</form>
	</body>
</html>

eija [03.11.2010 18:57:55]

#

Kiitos kaikille vastauksista. Tuo Metabolixin ohje oli se viimeinen puuttuva palikka tämän koodaus toteutuksen ymmärtämiseksi!

Olen opettelemaa MVC-arkkitehtuuria ja olio-ohjelmointia PHP:llä, mutta nuo PHP:n alkeetkin on vielä hakusessa. Suomenkielistä oppikirjaa PHP:n olio-ohjlemoinnista ei ole saatavissa, olemassa olevissa on vain vähän vihjauksia siihen miten olio-ohjelmointia PHP:llä toteutetaan.Perintä löytyy jostain kirjasta, assosiaatio toisesta, mutta aggregaattia ja rajapintaa ei mistään. Kauko Kolehmaisen kirjassa on tuosta MVC-arkkitehtuurista aika selkeä sovellusesimerkki.

Metabolix [03.11.2010 20:53:15]

#

eija kirjoitti:

Kauko Kolehmaisen kirjassa on tuosta MVC-arkkitehtuurista aika selkeä sovellusesimerkki.

Kauko Kolehmaisen kirja kannattaa välittömästi vetää vessanpöntöstä alas. Kirjan koodiesimerkit ovat netissä jaossa, ja jokainen ohjelmointia kunnolla ymmärtävä näkee suoraan, että suurin osa niistä on toteutettu todella hankalasti, rumasti, huonosti ja jopa bugisesti. Niistä ei todellakaan kannata ottaa mallia.

Esimerkiksi mainitsemallasi "MVC-arkkitehtuurista" kertovalla koodilla ei ole kerta kaikkiaan mitään yhteistä sen oikean MVC-arkkitehtuurin kanssa.

Kaikkein huolestuttavinta on, että tuollaista materiaalia julkaistaan kehuvien takakansitekstien saattelemana. Herran suosio taitaa perustua siihen, että huonotkin koodarit tuntevat olevansa aika taitavia, kun osaavat kirjoittaa yhtä "hyvää" koodia kuin oppikirjassa.

Grez [03.11.2010 21:33:52]

#

Metabolix kirjoitti:

Kauko Kolehmaisen kirja kannattaa välittömästi vetää vessanpöntöstä alas.

Jos ei kuitenkaan: http://www.pytty.fi/files/591/suomi_ruotsi_englanti.pdf

Mutta joo, kieltämättä huolestuttavaa kun meriitiksi mainitaan

lainaus:

Koodilistauksia on noin 150 kappaletta, jotka on testattu koeajoin.

Metabolix kirjoitti:

Herran suosio taitaa perustua siihen, että huonotkin koodarit tuntevat olevansa aika taitavia, kun osaavat kirjoittaa yhtä "hyvää" koodia kuin oppikirjassa.

Tai sitten ohjelmoinnissa pätee sama kuin musiikissa: ne jotka eivät osaa riitävän hyvin ryhtyäkseen ammattilaisiksi, ryhtyvät opettajiksi.

Teuro [03.11.2010 21:35:12]

#

Lukaisin tuon materiaalin läpi, mutta ei oikein kyllä vakuuta. Epäselkeä ohjelmointityyli, epäonnistuneet muuttujanimet, epälooginen sisennys tällaisia tuli ensimmäisenä mieleen. MVC-mallista kertovaa koodia en tuossa nähnyt missään, joskaan en sitä juuri hakenutkaan.

Jokotai [03.11.2010 22:16:42]

#

Onko Kauko Kolehmainen ammattilainen, mitä minä oikein luen? O_o

Metabolix [03.11.2010 22:19:24]

#

Grez kirjoitti:

Metabolix kirjoitti:

Kauko Kolehmaisen kirja kannattaa välittömästi vetää vessanpöntöstä alas.

Jos ei kuitenkaan: ...

Hyppäsin suoraan lopputulokseen. Välivaiheiksi sopivat kirjan vieminen kierrätyspisteeseen, jotta siitä voidaan valmistaa uusiovessapaperia, jonka vetäminen vessanpöntöstä on pönttösäädösten mukaista.

Teuro kirjoitti:

MVC-mallista kertovaa koodia en tuossa nähnyt missään

Katso hakemistoihin 18 ja 23. Voi olla, että koodin ajatus aukeaisi paremmin kirjan tekstin kanssa, mutta ei se missään tapauksessa järkevää koodia ole.

Santeri P. [04.11.2010 15:57:23]

#

Tarkoitatkos että kenttiin tulee alussa jotkin sanat?


Sivun alkuun

Vastaus

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

Tietoa sivustosta