Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: $_POST ja php

lrp [16.05.2009 23:09:12]

#

Tällainen lomake:

<?php
require("config.php");
$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);
if($_POST['submit']) {
    input_clean();
    $potilas=$_SESSION['ASIAKAS'];
    //$cat=$_POST['cat'];
    if (empty($_POST['subject']))
        $error['subject'] = 'Aihe ei voi olla tyhjä';
    if (empty($_POST['body']))
        $error['body'] = 'Merkintä ei saa olla tyhjä';
    if(!isset($error)){/*
            escapestrings();
            //extract($_POST);
            //$sqltime=gmdate(date("Y-m-d H:i:s"));
            $sqltime=date("Y-m-d H:i:s");
            //$setzonesql="SET time_zone = '+3:00';";
            //$setzonesql="SET SESSION time_zone = 'Europe/Helsinki';";
            $sql = "INSERT INTO entries(pat_id, cat_id, dateposted, subject, body)VALUES('$potilas', '$cat', '$sqltime', '$subject', '$body');";
            //mysql_query($setzonesql);
            //$sql = "INSERT INTO entries(pat_id, cat_id, dateposted, subject, body)VALUES(" .$_SESSION['POTILAS'] . ", " . $_POST['cat'] . ", NOW(), '" . $_POST['subject'] . "', '" . $_POST['body'] . "');";
            //$sql = "INSERT INTO entries(pat_id, cat_id, dateposted, subject, body)VALUES(" .$_SESSION['POTILAS'] . ", " . $_POST['cat'] . "', '" . $entrytime . "', '". $_POST['subject'] . "', '" . $_POST['body'] . "');";
            mysql_query($sql);
            header("Location: " . $config_basedir);
    */}
}
	require("header.php");
    $potilas=$_SESSION['POTILAS'];
$nimisql="SELECT patient.pat_sukunimi, patient.pat_id, patient.pat_etunimet FROM patient WHERE pat_id=$potilas;";
$result=mysql_query($nimisql);
$rivi=mysql_fetch_assoc($result);

?>

<h1>Tee uusi merkintä asiakkaalle: <?php echo $rivi['pat_sukunimi']," ",$rivi['pat_etunimet'];echo $entrytime=date("Y-m-d H:i:s");?> </h1>
<form action="<?php echo $SCRIPT_NAME ?>" method="post">
<table>
<tr>
	<td>Kategoria</td>
	<td>
	<select name="cat">
	<?php
		$catsql = "SELECT * FROM categories;";
		$catres = mysql_query($catsql);
		while($catrow= mysql_fetch_assoc($catres)) {
			echo "<option value='" . $catrow['cat_id']. "'>" . $catrow['cat'] . "</option>";
		}
	?>
	</select>
	</td>
</tr>
<tr>
	<td>Aihe:</td>
	<td><input type="text" name="subject" <?php if (isset($error)) echo "value='$subject'";?>></td>
    <td <?php if (isset($error['subject'])){echo "class=\"warning\">". $error['subject'];
    }?></td>
</tr>
<tr>
	<td>Merkintä</td>
	<td><textarea name="body" rows="10" cols="50"><?php if (isset($error)){echo $body;}?></textarea></td>
    <td <?php if (isset($error['body'])){echo "class=\"warning\">". $error['body'];
        }?></td>
</tr>
<tr>
	<td></td>
	<td><input type="submit" name="submit" value="Lisää merkintä"></td>
</tr>
</table>
</form>

<?php
require("dump_vars.php");
require("footer.php");
?>

En käytä missään tota $subject-muuttujaa.

Eli ei ole sijoitusta:

$subject=$_POST['subject']

Silti muuttujassa on sisältö. Eli tuleeko jotenkin automaattisesti muuttuja $_POST arraysta?

map_ [17.05.2009 00:00:08]

#

Luultavasti palvelimella on päällä vanhanaikainen register_globals -asetus, jonka seurauksena mm. $_POST:n ja $_GET:n alkiot luetaan muuttujiin.
Lisätietoa:
https://www.php.net/manual/en/security.globals.php

Antti Laaksonen [17.05.2009 00:08:02]

#

Todellakin jos register_globals on käytössä, sekä $_POST['subject'] että $subject sisältävät lomakkeen kentän subject arvon. Useimmilla palvelimilla register_globals lienee käytössä, koska monet vanhat skriptit eivät toimi muuten.

lrp [17.05.2009 19:30:58]

#

Olisko tällaisesta mihinkään?

<?php
function input_clean(){
    foreach ($_POST as $key => $arvo){
        $_POST[$key]=trim($arvo);
    }
    foreach ($_GET as $key => $arvo){
        $_GET[$key]=trim($arvo);
    }
    foreach ($_COOKIE as $key => $arvo){
        $_COOKIE[$key]=trim($arvo);
    }
    foreach ($_REQUEST as $key => $arvo){
        $_REQUEST[$key]=trim($arvo);
    }
}
function escapestrings(){
    if(get_magic_quotes_gpc()){
        $_GET=array_map('stripslashes', $_GET);
        $_POST=array_map('stripslashes', $_POST);
        $_COOKIE=array_map('stripslashes', $_COOKIE);
        $_REQUEST=array_map('stripslashes', $_REQUEST);
    }
    foreach ($_POST as $key => $arvo){
        $_POST[$key]=mysql_real_escape_string($arvo);
    }
    foreach ($_GET as $key => $arvo){
        $_GET[$key]=mysql_real_escape_string($arvo);
    }
    foreach ($_COOKIE as $key => $arvo){
        $_COOKIE[$key]=mysql_real_escape_string($arvo);
    }
    foreach ($_REQUEST as $key => $arvo){
        $_REQUEST[$key]=mysql_real_escape_string($arvo);
    }
}
?>

Sitten itse lomakkeen sisäänveto skriptissä

<?php
if($_POST['submit']) {
    input_clean();
    extract($_POST);
    if (empty($cat))
        $error['cat']='laita kategoralle nimi';
//käydään kaikki läpi ja jos kelpaa
if (!isset($error)){
    escapestrings();
    extract($_POST);
	$sql = "INSERT INTO categories(cat) VALUES('$cat');";
	$result=mysql_query($sql)
    or die (mysql_error());
    //header("Location: " . $config_basedir . "viewcat.php");
    }
?>

Vai pitäisikö kaikki $_POST:in mukana tulleet lukea muuttujiinsa orjallisesti

<?php
$xxx=$_POST['xxx'];
$yyy=$_POST['yyy'];
?>

Oletus on kait register globalsille off niin tämä toimis silloinkin

Vastaus

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

Tietoa sivustosta