Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Lomakkeen tiedot MySQL-tietokantaan ja käyttäjä uudelle sivulle

Puistokemisti [30.11.2003 22:33:29]

#

Tässä yksinkertaistettuna sivu, jolla käyttäjä syöttää lukuja lomakkeeseen ja submit-painikkeen painamisen jälkeen syötetty tieto tarkastetaan ja talletaan MySQL-tietokantaan:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<HTML>

<HEAD>

<META http-equiv="Content-Type" content="text/html; charset=windows-1252">

<TITLE>Otsikko</TITLE>

<LINK rel=stylesheet type="text/css" href="perus.css">

</HEAD>

<BODY>

<FORM action="<?php print "check.php" ?>" method="POST">

<TABLE width="800" cellspacing="0" cellpadding="0" border="0">
<TBODY>
<TR>
    <TD>
        <INPUT type="text" name="eka" size="2" maxlength="2">
    </TD>
    <TD>
        <INPUT type="text" name="toka" size="2" maxlength="2">
    </TD>
</TR>

<TR>
    <TD>
        <INPUT type="submit" name="tulokset" value="Lähetä">
    </TD>
</TR>
</TBODY>
</TABLE>

</FORM>
<?php

$dbserver = "localhost";
$dbuser   = "eka";
$dbpass   = "toka";
$db       = "database";
$table    = "table";

// Muodostetaan yhteys MySQL-palvelimeen
$connect = @mysql_connect($dbserver, $dbuser, $dbpass);

if (!$connect) {
    die("VIRHE! Palvelimeen ei saatu yhteyttä.");
}

// Valitaan käytettävä tietokanta
mysql_select_db($db);

if (!@mysql_select_db($db)) {
    die("VIRHE! Tietokantaan ".$db." ei saatu yhteyttä.");
}

// Suoritetaan submit-painikkeen painamisen jälkeen
if (isset($_POST["tulokset"])) {
    $check_input = $_POST["eka"];
        if (ereg ("([0-9]{1,2})", $check_input)) {
            $checked[] = $check_input;
        } else {
            $checked[] = -1;
        }

    $check_input = $_POST["toka"];
        if (ereg ("([0-9]{1,2})", $check_input)) {
            $checked[] = $check_input;
        } else {
            $checked[] = -1;
        }

    $update = "UPDATE ".$table." SET
              eka_arvo  = '$$checked[0]',
              toka_arvo = '$$checked[1]'
              WHERE ID = '1'";

    if (@mysql_query($update)) {
        echo ("Tiedot lähetetty. ". mysql_affected_rows() ." riviä muutettu.");
    } else {
        echo ("Virhe tietojen päivittämisessä: ". mysql_error());
    }

}

mysql_close($connect);

?>

Ongelmana on se, ettei tässä tapauksessa tiedot päivity tietokantaan. Jos määritän actioniksi esim. $PHP_SELF, niin tietokanta päivittyy aivan oikein. Pitäisikö minun viedä nuo tiedot tietokantaan vasta check.php scriptissä?

Voi olla hieman sekava selitys, mutta kysykää jos tuosta puuttuu jotain olennaista tai tarvitsette tarkennusta johonkin.

pistemies [30.11.2003 22:43:55]

#

<FORM action="<?php print "check.php" ?>" method="POST">

Tuossa printtauksen jälkeen puuttuu ; -puolipiste.

T.M. [30.11.2003 23:07:05]

#

ei siihen tarvita puolipistettä, koska viimeiseen riviin ei tarvita sitä, muistaakseni. mut en kylläkään tajua miksi toi check.php pitää tulostaa PHP:llä tonne tuolla tavalla....

Puistokemisti [01.12.2003 15:03:07]

#

Ei tuota tarvitsekaan tulostaa, jäi vain tuohon koska korvasin $PHP_SELF:in sillä. Mutta lyhyesti ja ytimekkäästi kaikki tapahtuisi seuraavasti:

1. Käyttäjä syöttää jonkun luvun välillä 1-99
2. Syöte tarkistetaan ja talletetaan tietokantaan
3. Talletettu tieto tarkistetaan tietokannasta
4. Jos syötettiin virheellistä tietoa, ohjataan korjaussivulle
5. Jos kaikki kunnossa, jatketaan eteenpäin

En vain tiedä, pitäisikö tuo tieto lähettää ensin POST:in avulla tuolle check.php skriptille ja vasta siellä tarkistaa ja tallettaa tietokantaan. Tällöin ei myöskään tarvitsisi hakea tietokannasta juuri sinne talletettua tietoa vertailua varten, vaan vertailu voitaisiin tehdä tallennusvaiheessa.

Kannattaisiko tuo siis tehdä siten, että määrittää tuohon formin actioniin tuon check.php:n tiedot käsitteleväksi skriptiksi ja jättää tältä syöttösivulta kaikki php- ja sql-komennot pois ja suorittaa ne vasta check.php:ssa?

Puistokemisti [01.12.2003 15:26:16]

#

Tein tuon nyt seuraavasti:

Sivu, jolla syötetään tieto:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<HTML>

<HEAD>

<META http-equiv="Content-Type" content="text/html; charset=windows-1252">

<TITLE>Otsikko</TITLE>

<LINK rel=stylesheet type="text/css" href="perus.css">

</HEAD>

<BODY>

<FORM action="check.php" method="POST">

<TABLE width="800" cellspacing="0" cellpadding="0" border="0">
<TBODY>
<TR>
    <TD>
        <INPUT type="text" name="eka" size="2" maxlength="2">
    </TD>
    <TD>
        <INPUT type="text" name="toka" size="2" maxlength="2">
    </TD>
</TR>

<TR>
    <TD>
        <INPUT type="submit" name="tulokset" value="Lähetä">
    </TD>
</TR>
</TBODY>
</TABLE>

</FORM>

</BODY>

</HTML>

Ja check.php näyttää tältä:

<?php

$dbserver = "localhost";
$dbuser   = "eka";
$dbpass   = "toka";
$db       = "database";
$table    = "table";

// Muodostetaan yhteys MySQL-palvelimeen
$connect = @mysql_connect($dbserver, $dbuser, $dbpass);

if (!$connect) {
    die("VIRHE! Palvelimeen ei saatu yhteyttä.");
}

// Valitaan käytettävä tietokanta
mysql_select_db($db);

if (!@mysql_select_db($db)) {
    die("VIRHE! Tietokantaan ".$db." ei saatu yhteyttä.");
}

// Suoritetaan submit-painikkeen painamisen jälkeen
if (isset($_POST["tulokset"])) {
    $check_input = $_POST["eka"];
        if (ereg ("([0-9]{1,2})", $check_input)) {
            $checked[] = $check_input;
        } else {
            $checked[] = -1;
        }

    $check_input = $_POST["toka"];
        if (ereg ("([0-9]{1,2})", $check_input)) {
            $checked[] = $check_input;
        } else {
            $checked[] = -1;
        }

    $update = "UPDATE ".$table." SET
              eka_arvo  = '$$checked[0]',
              toka_arvo = '$$checked[1]'
              WHERE ID = '1'";

    if (@mysql_query($update)) {
        echo ("Tiedot lähetetty. ". mysql_affected_rows() ." riviä muutettu.");
    } else {
        echo ("Virhe tietojen päivittämisessä: ". mysql_error());
    }

}

mysql_close($connect);

for ($i = 0; $i < count($checked); $i++) {

    if ($checked[$i] == -1) {
        $check = 1;
    }
}

if ($check == 1) {
    header("Location: fix.php");
} else {
    header("Location: results.php");
}

?>

Kai tuohon loppuun kävisi myös foreach, pitää katsella. Onko tuossa nyt joitain ongelmia, joita tällainen ratkaisu aiheuttaa?

Vastaus

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

Tietoa sivustosta