【问题标题】:Array is empty using session variables PHP使用会话变量 PHP 数组为空
【发布时间】:2011-09-03 19:35:46
【问题描述】:

我在传递带有浮点值的数组时遇到问题。它在另一个文件中是空的。这是代码。请任何帮助...

 //file 1 
session_start();
//...
while ($row = pg_fetch_assoc($sql))
{       
    $notas[$i] = ($row['grade'] - 57.3)/12;                 
    $i++;
}

print("<FORM method=post action='../indicadores/distr_notas.php'>");
print("<input type=hidden name=notas value='$notas'>");
print("<INPUT type=submit>");
print("</FORM>");

//file 2
session_start();

$_SESSION['notas'] = $_POST['notas'];
$notas = $_SESSION['notas'];


$cant = count($notas);
echo $cant; 

我仍然有问题。我想我使用 POST 错误。我有 3 个脚本。第一个获取条目,第二个获取数组,第三个使用 jpgraph 显示包含数组的图形。

file 1 // get the array
<?php  
    print("<FORM method=post action='proc_notas.php'>");
    print("Codigo de Carrera.<p>");
    print("<INPUT type=text name='cod_depto'><p>");
    print("<INPUT type=submit>");
    print("</FORM>");
 ?>


//file 2. 

if($_SERVER['REQUEST_METHOD'] != "POST")
{
print("<FORM method=post action='normal.php'>");
print("Desviación estándar.<p>");
print("<INPUT type=text name='desviacion'><p>");
print("<INPUT type=submit>");
print("</FORM>");
}
else
{
    $depto = $_REQUEST['cod_depto'];
    $ordenada = array();
    $z = array();
        $i = 0;
        $suma = 0;
    $conectar = new Conector();
    $cadena =  "select distinct a.grade FROM evaluation_student_evals a inner join td_estudiantes b on a.party_id = b.id_estudiante where b.cod_depto = '$depto' and a.grade >= 0 and a.grade <= 100 order by a.grade ";
    $sql = $conectar-> consultas($cadena);      
    //calcular sigma y miu      
    $total = pg_num_rows($sql);
    $sumanotas = new distribucion();
    $totalnotas = $sumanotas -> suma_notas($sql);
    $media = $totalnotas/$total;

//Normalizar datos de notas Z = (X-miu)/sigma
    while ($row = pg_fetch_assoc($sql))
    {       

        $ordenada[$i] = (1/(12*sqrt(pi())))*(exp(-0.5*(($row['grade']-$media)*($row['grade'] - $media))/($desviacion*$desviacion)));                                    
        $i++;   }               

    if (!isset($row))
    {
        header("Content-Type: text/html");
        print("<HTML><HEAD><TITLE>Desempeño de Aprendizaje</TITLE>");
        print("</HEAD>");
        print("<BODY>");
        print("$depto no se encuentra.");
        print("</BODY></HTML>");


//file 3 Graph the array
Here, I don´t know how to get the array $ordenada

【问题讨论】:

  • 你没有把 $notas 数组放在会话中
  • 谢谢大家。我发现了问题,但没有找到解决方案。

标签: php session-variables jpgraph


【解决方案1】:
 $_SESSION['notas'][] = ($row['grade'] - 57.3)/12;     

【讨论】:

    【解决方案2】:

    这将适用于按钮提交

     //file 1 
    session_start();
    //...
    while ($row = pg_fetch_assoc($sql))
    {       
        $notas[$i] = ($row['grade'] - 57.3)/12;                 
        $i++;
    }
    
    print("<FORM method=post action='../indicadores/distr_notas.php'>");
    print("<input type=hidden name=notas value='".implode(',' $notas)."'>"); // use implode to convert array to string
    print("<INPUT type=submit>");
    print("</FORM>");
    
    //file 2
    session_start();
    
    $notas = explode(',' $_POST['notas']);  // use explode to convert string to array
    
    $cant = count($notas);
    echo $cant;
    

    这将适用于会话

    //file 1 
    session_start();
    //...
    while ($row = pg_fetch_assoc($sql))
    {       
        $_SESSION['notas'][$i] = ($row['grade'] - 57.3)/12;                 
        $i++;
    }
    
    print("<FORM method=post action='../indicadores/distr_notas.php'>");
    print("<input type=hidden name=notas value='$notas'>");  // no need to use
    print("<INPUT type=submit>");
    print("</FORM>");
    
    //file 2
    session_start();
    
    $notas = $_SESSION['notas'];
    
    
    $cant = count($notas);
    echo $cant;
    

    【讨论】:

      【解决方案3】:

      在第一个文件中设置$notas 数组,但在第二个文件中使用$_POST['notas'] 将其添加到会话变量中,然后分配给$notas。第二个文件中的计数是0,因为您不计算第一个文件中生成的数组元素,而是计算POST请求传递的值之一的元素(存储在$_POST数组中) .

      总结一下:你创建一个数组,但是计算不同的一个数组的元素

      根据您调用第二个文件的方式(它是不同的请求吗?它是否包含在第一个文件中?),您有以下选项:

      A. (如果是不同的请求)像这样将$notas 变量分配给会话数组元素:

      // at the end of the first file:
      $_SESSION['notas'] = $notas;
      

      在第二个文件中从它读取而不是从$_POST['notas'],或者

      B. (如果第二个文件包含在第一个文件中)使用与第一个文件中相同的变量名称 ($notas) 并分配它而不是 $_POST['notas']

      // in the second file, instead of " $_SESSION['notas'] = $_POST['notas']; "
      $_SESSION['notas'] = $notas;
      

      【讨论】:

        【解决方案4】:

        我想对文件 2 中的查询结果进行一些计算,然后将其发送到文件 3 的 jgraph。我仍然不知道为什么这部分不起作用:

        //文件2

        $depto = $_REQUEST['cod_depto'];
        $desviacion = $_REQUEST['desviacion'];
        $ordenada = array();
        $i = 0;
        $suma = 0;
        $conectar = new Conector();
        $cadena =  "select distinct a.grade FROM evaluation_student_evals a inner join td_estudiantes b on a.party_id = b.id_estudiante where b.cod_depto = '$depto' and a.grade >= 0 and a.grade <= 100 order by a.grade ";
        $sql = $conectar-> consultas($cadena);      
        
        //calcular sigma y miu          
        $total = pg_num_rows($sql);
        $sumanotas = new distribucion();
        $totalnotas = $sumanotas -> suma_notas($sql);
        $media = $totalnotas/$total;
        
        //Normalizar datos de notas Z = (X-miu)/sigma
        while ($row = pg_fetch_assoc($sql))
            {       
                $ordenada[$i] = (1/($desviacion*sqrt(pi())))*(exp(-0.5*(($row['grade']-$media)*($row['grade'] - $media))/($desviacion*$desviacion)));                                      $i++;
            }
        $tmp= serialize($ordenada);
        $tmp= urlencode($tmp);
        echo "<form method=post action='../indicadores/distr_notas.php'>";
        echo "<input type=hidden name=ordenada value=$tmp>";
        echo "<input type=submit name=enviar>";
        echo "</form>";
        

        我决定注释“calcular sigma y mui”部分,现在我可以将数组传递给文件 3。

        //文件3

        function array_recibe($url_array) {
            $tmp = stripslashes($url_array);
            $tmp = urldecode($tmp);
            $tmp = unserialize($tmp);
        
           return $tmp;
        } 
        
        $notas =$_REQUEST['ordenada'];
        $notas =array_recibe($notas);
        
        //jpgraph code
        $graph = new Graph(600,400,"auto");
        

        【讨论】:

          猜你喜欢
          • 2014-03-24
          • 2020-09-21
          • 1970-01-01
          • 2018-01-24
          • 2019-09-26
          • 2014-10-10
          • 1970-01-01
          • 1970-01-01
          • 2011-01-19
          相关资源
          最近更新 更多