PHP - 如何在表单提交后继续执行SESSION变量

时间:2017-07-07 05:19:38

标签: php html

使用SESSION变量时出现问题。我计划在每次用户在generar.php脚本上点击“提交”时向SQL添加数据。我也指望第一个pag index.html的登录数据这里是我遇到问题的地方,每当我点击“提交”它将清理变量。我查了好几个 论坛寻找答案,但我仍然没有答案。有什么想法吗?

的index.html

<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>Creacion de receta</title>
<link rel="stylesheet" type="text/css" href="default.css">
</head>
<body>
<br>
<div style="text-align: center;"><img style="width: 125px; height: 125px;" alt="Rpi" src="large_logo_white.png"><br></div>
<br>
<table style="text-align: left; margin-left: auto; margin-right: auto;">
<form method="post" action="generar.php">
<tbody>
<tr>
<td>Codigo del Medico</td>
<td><input name="v_codigo"><br>
</td>
</tr>
<tr>
<td>Cedula del paciente</td>
<td><input name="v_cedula"><br>
</td>
</tr>
<tr>
<td> Enviar</td>
<td align="right"><input name="submit" value="Enviar" type="submit"></td>
</tr>
</tbody>
</form>
</table>
<br>
</body>
</html>

generar.php

<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>Creacion de receta</title>
<link rel="stylesheet" type="text/css" href="default.css">
</head>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<tbody>
<tr>
<td>Medicamento</td>
<td>
<select name="v_meds"><option>Seleccionar</option><option>Rojo</option><option>Verde</option><option>Azul</option><option>Amarillo</option><option>Blanco</option><option>Negro</option></select>
<br>
</td>
</tr>
<tr>
<td>Via</td>
<td>
<select name="v_via"><option>Seleccionar</option><option>Oral</option><option>Rectal</option><option>Nasal</option><option>Otica</option><option>Oftalmica</option><option>Vaginal</option><option>Topica</option></select>
<br>
</td>
</tr>
<tr>
<td>Frecuencia</td>
<td>
<select name="v_frec"><option>Seleccionar</option><option>6</option><option>8</option><option>12</option><option>24</option></select>
<br>
</td>
</tr>
<tr>
<td>Duracion</td>
<td>
<select name="v_dur"><option>Seleccionar</option><option>5</option><option>7</option><option>15</option><option>30</option><option>PRN10</option><option>PRN20</option><option>PRN30</option></select>
<br>
</td>
</tr>
<tr>
<td> Enviar</td>
<td align="right"><input name="submit" value="Enviar" type="submit"></td>
</tr>
<tr>
<td style="text-align: center;" colspan="2" rowspan="1"><a href="view.php">Ver historial de recetas</a></td>
</tr>
</tbody>
</form>

<?php
error_reporting(E_ALL);
session_start();
if (isset($_REQUEST['v_codigo']) || isset($_REQUEST['v_cedula'])) { 
 $codigo = $_REQUEST['v_codigo'];
 $cedula = $_REQUEST['v_cedula'];
}
 $_SESSION['sesion_codigo'] = $codigo;
 $_SESSION['sesion_cedula'] = $cedula;

 //$codigo1 = $_SESSION['sesion_codigo'];
 //$cedula1 = $_SESSION['sesion_cedula'];
 $tabla = 'p'.$cedula1;
 
 print 'Codigo: ' . $codigo . '<br/>';
 print 'Cedula: ' . $cedula . '<br/>';
 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name1 = $_POST['v_meds']; 
	$name2 = $_POST['v_via'];
	$name3 = $_POST['v_frec'];
	$name4 = $_POST['v_dur'];
    if ($name1 == 'Seleccionar' || $name2 == 'Seleccionar' || $name3 == 'Seleccionar' || $name4 == 'Seleccionar') {
        echo "Receta contiene errores, favor llenar correctamente el formulario.<br/>";
    } else {
        echo $name1 . $name2 . $name3 . $name4;
    }
}
?>

</body>
</html>

编辑1: 我改变了session_start();到html文件的开头。但结果相同。我第一次选择变量$ codigo和$ cedula他们是正确的设置,当我点击提交按钮他们消失。我的想法是,在单击提交按钮后,我会保留losgin数据以连续发送多个请求。

每个步骤的图像下方。再次感谢所有花时间回答的人。

登录数据: codigovar cedulavar

First time the page is loaded After clicking the submit button

编辑2:我也使用@RamRaider代码建议来填充变量,只有填充变量。

3 个答案:

答案 0 :(得分:0)

您应该在顶部开始会话

<?php
error_reporting(E_ALL);
session_start();
?>
<!DOCTYPE html>
<html>
<head>

因为在您的代码中,它会显示已发送的标头错误 当我们在php开始会话时,不应该在

之前输出到页面
session_start();

所以你的代码应该是这样的: -

<?php
session_start();
error_reporting(E_ALL);
?>
<!DOCTYPE html>
<html>
<head>

答案 1 :(得分:0)

我认为,主要问题是SELECT个元素都没有OPTION个值。对session_start()的调用也应该在任何html输出之前 - 通常在脚本的最顶部。此外,设置会话变量的调用可以设置空白值 - 在设置之前确保值存在的测试是个好主意。

<?php

    session_start();
    error_reporting(E_ALL);

    /* utility function to debug session and request data */
    function pre($data,$title){
        echo "<h1>".strtoupper($title)."</h1><pre>".print_r($data,true)."</pre>";
    }
?>



<!DOCTYPE html>
<html>
   <head>
      <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
      <title>Creacion de receta</title>
      <link rel="stylesheet" type="text/css" href="default.css">
   </head>
   <body>
    <?php
        if( isset( $_SESSION['sesion_codigo'], $_SESSION['sesion_cedula'] ) ){
            echo '<h1>Debug session variables</h1>';
            pre($_SESSION,'session');
            pre($_POST,'post');

        }
    ?>

      <form method="post">
        <table>
             <tbody>
                <tr>
                   <td>Medicamento</td>
                   <td>
                      <select name="v_meds">
                         <option value=''>Seleccionar
                         <option value='Rojo'>Rojo
                         <option value='Verde'>Verde
                         <option value='Azul'>Azul
                         <option value='Amarillo'>Amarillo
                         <option value='Blanco'>Blanco
                         <option value='Negro'>Negro
                      </select>
                      <br>
                   </td>
                </tr>
                <tr>
                   <td>Via</td>
                   <td>
                      <select name="v_via">
                         <option value=''>Seleccionar
                         <option value='Oral'>Oral
                         <option value='Rectal'>Rectal
                         <option value='Nasal'>Nasal
                         <option value='Otica'>Otica
                         <option value='Oftalmica'>Oftalmica
                         <option value='Vaginal'>Vaginal
                         <option value='Topica'>Topica
                      </select>
                      <br>
                   </td>
                </tr>
                <tr>
                   <td>Frecuencia</td>
                   <td>
                      <select name="v_frec">
                         <option value=''>Seleccionar
                         <option value='6'>6
                         <option value='8'>8
                         <option value='12'>12
                         <option value='24'>24
                      </select>
                      <br>
                   </td>
                </tr>
                <tr>
                   <td>Duracion</td>
                   <td>
                      <select name="v_dur">
                         <option value=''>Seleccionar
                         <option value='5'>5
                         <option value='7'>7
                         <option value='15'>15
                         <option value='30'>30
                         <option value='PRN10'>PRN10
                         <option value='PRN20'>PRN20
                         <option value='PRN30'>PRN30
                      </select>
                      <br>
                   </td>
                </tr>
                <tr>
                   <td>Enviar</td>
                   <td align="right"><input name="submit" value="Enviar" type="submit"></td>
                </tr>
                <tr>
                    <td style="text-align: center;" colspan="2" rowspan="1">
                        <a href="view.php">Ver historial de recetas</a>
                    </td>
                </tr>
             </tbody>
         </table>
      </form>

    <?php
        $codigo = !empty( $_REQUEST['v_codigo'] ) ? $_REQUEST['v_codigo'] : false;
        $cedula = !empty( $_REQUEST['v_cedula'] ) ? $_REQUEST['v_cedula'] : false;

        if( $codigo & $cedula ){

            $_SESSION['sesion_codigo'] = $codigo;
            $_SESSION['sesion_cedula'] = $cedula;

            $tabla = 'p'.$cedula1;

            printf( "Codigo: %s<br />Cedula: %s<br />", $codigo, $cedula );
        }


        if ( $_SERVER["REQUEST_METHOD"] == "POST" ) {


            $name1 = !empty( $_POST['v_meds'] ) ? $_POST['v_meds'] : false; 
            $name2 = !empty( $_POST['v_via'] ) ? $_POST['v_via'] : false;
            $name3 = !empty( $_POST['v_frec'] ) ? $_POST['v_frec'] : false;
            $name4 = !empty( $_POST['v_dur'] ) ? $_POST['v_dur'] : false;


            if( $name1 && $name2 && $name3 && $name4 ){
                $message=$name1 . $name2 . $name3 . $name4;
            } else {
                $message="Receta contiene errores, favor llenar correctamente el formulario.<br/>";
            }

            echo $message;
        }

    ?>

   </body>
</html>

答案 2 :(得分:-1)

试试这个

<?php
    session_start();
    ob_start();
?>
<!DOCTYPE html>
<html>
...
</html>