【问题标题】:$_SESSION variables "disappear" after form is submitted提交表单后 $_SESSION 变量“消失”
【发布时间】:2019-09-30 03:14:34
【问题描述】:

我将表单中的值存储在 SESSION 变量中,但它们似乎在 if(isset($_POST['submit']) 之后被清空,即使我可以在代码中更早地回显它们。代码运行,插入工作,但 $toto$tata 为空。

_idmaster_labelclient_label下面的代码中插入正确。并且目标表字段匹配,因此错误不会来自那里。

<?php
session_start(); 
[...]

echo "<form id='organization' action='?' method='POST' enctype='multipart/form-data' >" ;
                    echo "<select name='organization' onchange='this.form.submit()'>";  //
                            echo '<option value="">Select ORGANIZATION</option>';
                                    while ($row=mysqli_fetch_array($result00)) {                                                                                                                                     
                                    echo '<option value="'.$row['company_id'].'">'.$row['company_id'].'</option>';
                                    }
                    echo "</select>";
                echo "</form>";         

                $cie_ticker = $_POST['organization'] ;      
                $_SESSION['company_id'] = $cie_ticker ;

$sql="(SELECT company_id, databasefile, company_name FROM `settings` WHERE company_id='$cie_ticker') LIMIT 1"; 
$result=mysqli_query($connect,$sql) or die('Could not execute the query ' . mysqli_error()) ;
$data_bis=$result->fetch_array() ;

$_SESSION['selected_cie_id'] = $data_bis['company_id'];
$_SESSION['selected_cie_name'] = $data_bis['company_name'];

            <form id='demoForm' action="?" method="POST" enctype="multipart/form-data" target="_top"> 
                        <?php
                        $file = fopen('./company/'.$cie_ticker.'/'.$_SESSION['selected_cie_db'], "r") ; // $file = fopen('./company/'.$_SESSION["company_id"].'/'.$_SESSION['selected_cie_db'], "r") ;
                        $headers=fgetcsv($file, 1000, "|");
                        fclose($file);
                        ?>      
                        <table id="user_table">
                            <tr><th>HEADERS </th><th>MASTER DB HEADERS</th></tr>

                            <?php foreach ($headers as $entete) {   

                                $query01="SELECT master_label FROM `mastertable`";
                                $result01=mysqli_query($connect,$query01); ?>

                                    <tr  id="<?php echo $entete;?>">
                                            <td>  <?php echo $entete ?></td>
                                            <td id="<?php echo $row['_id'];?>">
                                                    <?php                           
                                                    echo "<br>";                    
                                                        echo "<select name=".$entete.">";  
                                                                echo '<option value="MASTER DATA">Select MASTER DATA</option>';
                                                                        while ($row=mysqli_fetch_array($result01)) {                                                                                                                                     
                                                                        echo '<option value="'.$row['master_label'].'">'.$row['master_label'].'</option>';
                                                                                                }
                                                        echo "</select>";
                                                    ?>              
                                            </td>               
                                    </tr>
                            <?php } ?>  
                        </table>
                        <input  id="checkBtn" type="submit"  name="submitbutton" value="SAVE" class="button"/>                  
                </form>
   if(isset($_POST['submitbutton'])) {          

        $toto = $data_bis['company_id'] ; 
        $tata = $data_bis['company_name']; 

        $selected=$_POST; 

        foreach($selected as $x => $x_value) {
            $query= $connect->prepare("INSERT INTO `mytable` (_id, master_label, client_label, org_label, client_id) VALUES ('',?,?,?,?) ");

            $query->bind_param('ssss',$x_value, $x, $toto, $tata  );                                    
            $query->execute();                                                                                          
        }
    }
?>  

【问题讨论】:

  • 我敢打赌,您没有为所有涉及的文件启动会话。
  • mysqli_error() mysqli_error($connect)
  • 回显你的 $toto, $tata 变量第一个然后检查..
  • 这里的实际问题很难理解。我建议您确保可以看到任何和所有错误。将error_reporting(E_ALL); ini_set('display_errors', 'On'); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 添加到脚本的顶部
  • 确保 session_start();实际上是所涉及文件的第一行。注意编码(可能是 BOM 搞砸了)

标签: php mysql session


【解决方案1】:

我找到了答案: 在这种情况下,必须为 $_SESSION 变量添加隐藏输入,否则在提交表单后它们会丢失。

【讨论】:

  • 这应该没有必要。其他事情正在发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多