2017-07-07 47 views
0

我在使用SESSION变量时遇到了问题。我计划每次用户在generar.php脚本上点击“提交”时都会将数据添加到SQL中。我也指望第一个pag index.html的登录数据,这里是即时通讯有问题,每当我点击“提交”它将清理变量。我查了几个 论坛寻找答案,但我仍然没有答案。有任何想法吗?PHP - 如何在表单提交后继承SESSION变量

的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']; 
 
\t $name2 = $_POST['v_via']; 
 
\t $name3 = $_POST['v_frec']; 
 
\t $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>

EDIT 1: 我改变在session_start();到html文件的开头。但有同样的结果。我第一次选择变量$ codigo和$ cedula他们是正确的设置,当我点击提交按钮他们disapear。这个想法是,点击提交按钮后,我保持losgin数据连续发送多个请求。

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

登录数据: codigovar cedulavar

First time the page is loaded After clicking the submit button

编辑2:我还使用@RamRaider码建议填写,只有当他们被填充的变量。

+0

要使用会话,您需要包含'session_start();'在php脚本的顶部 - 你有没有这样做? – RamRaider

+0

是的! <?php error_reporting(E_ALL); session_start(); – JCarax

+0

你想说会话变量在表单提交后会被破坏? –

回答

0

你应该因为你的代码会显示错误,如头部已经发送 当我们

session_start(); 
php开始会议不应该有输出到一页开始在顶部

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

会议

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

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

通过将session_start()切换到最初,得到了相同的结果。感谢您的建议! – JCarax

+0

@Pritamkumar但你没有。 –

-1

试试这个

<?php 
    session_start(); 
    ob_start(); 
?> 
<!DOCTYPE html> 
<html> 
... 
</html> 
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> 
+0

感谢您的建议,但我仍然看到相同的结果。会话变量是第一次设置的。每当我点击提交按钮,变量就会被清理干净。 – JCarax

+0

我无法复制您提到的失败。在创建'index.html'页面的副本后,使用上面的(作为'generar.php'),表单将提交给generar.php并设置会话变量。随后在generar.php上提交表单时,会话变量保持它们的值 – RamRaider