Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\会话与$\文件冲突_Php - Fatal编程技术网

Php $\会话与$\文件冲突

Php $\会话与$\文件冲突,php,Php,我有一个表单,它有一个文件类型输入来上传图像,但它总是显示“注意:未定义索引”,我看到$u文件是空的,但我在网上找到的答案都没有帮助我 我有一个项目,在用户注册后,他必须登录他的第一页,他确认他的数据并插入一些新数据,其中一个新数据是他可以上传的图片,正如我所说的,我最初的问题是$u文件总是空着,我在网上搜索,这是一个相当常见的错误,但没有一个答案对我有帮助。经过多次尝试,我发现了问题所在,但我仍然不知道原因,也不知道如何解决 在我谈到的页面的开头,这里有一段代码: if(isset(

我有一个表单,它有一个文件类型输入来上传图像,但它总是显示“注意:未定义索引”,我看到$u文件是空的,但我在网上找到的答案都没有帮助我

我有一个项目,在用户注册后,他必须登录他的第一页,他确认他的数据并插入一些新数据,其中一个新数据是他可以上传的图片,正如我所说的,我最初的问题是$u文件总是空着,我在网上搜索,这是一个相当常见的错误,但没有一个答案对我有帮助。经过多次尝试,我发现了问题所在,但我仍然不知道原因,也不知道如何解决

在我谈到的页面的开头,这里有一段代码:

     if(isset($_SESSION['logado'])){
        $dados =  $_SESSION['dadosUsu'];
     }else{
        unset($_SESSION['dadosUsu']);
        session_destroy();
        header("Location: homeLandingPage.php");
     }
阻止未经授权的用户进入页面,或使用用户数据创建变量,以便使用用户已注册的信息填写某些输入

我发现,如果我删除了这段代码,$\u文件全局开始工作,代码运行良好,但是如果代码在那里,问题仍然存在,我不知道为什么会发生这种情况,我在网上找不到任何关于会话与$\u文件全局冲突的内容

在此之后,还有一点ajax:

     $(function(){
         $('.form').submit(function(){
             $.ajax({
               url: 'cod_alterarAcc.php',
               type: 'POST',
               data: $('.form').serialize(),
               success: function(data){
                   if(data != ''){
                      $('.recebeDados').html(data);
                      document.getElementById('visor1').value = '<?= $dados['nomeUsu']; ?>';
                      document.getElementById('visor2').value = '<?= $dados['emailUsu']; ?>';
                      document.getElementById('visor3').value = '<?= $dados['emailUsu']; ?>';
                      document.getElementById('visor4').value = '';
                      document.getElementById('visor5').value = '';
                      document.getElementById('visor6').value = '';
                    }
                 }
              });
            return false;
         });
      });
以下是我使用的表单:

    <form enctype="multipart/form-data" class='form' method='post' action='cod_alterarAcc.php'>
      <div id="img-perfil">
         <img src="imagens/perfil.png"  id="dup"/>
         <label for="selecao-arquivo" class="selecionar-img">+</label>
         <input id="selecao-arquivo" type="file" name="img" class="botao-img" onchange="previewImagem()" />
      </div>

      <label>Confirme seu nome:</label>
      <input type="text" id="visor1" name="nome_usu" value="<?= $dados['nomeUsu']; ?>" />

       <label>Altere seu email:</label>
       <input type="email" id="visor2" name="email" value="<?= $dados['emailUsu']; ?>" />

       <label>Confirme seu email:</label>
       <input type="email" id="visor3" name="confirmaEmail" value="<?= $dados['emailUsu']; ?>" />   

       <label>Sua senha:</label>
       <input type="password" id="visor4" name="senha" />

       <label>Confirme sua senha:</label>
       <input type="password" id="visor5" name="confirmaSenha" />

       <label>Insira seu cpf:</label>
       <input type="text" id="visor6" name="cpf_usu" />

       <div class='recebeDados'></div>
       <input type="submit" value="confirmar" />
    </form>  
我对其他输入进行了更多验证,这是我第一次在本页中使用会话:

  if (in_array($ext, $tipos)) {
      if (move_uploaded_file($_FILES['img']['tmp_name'], $imagem)) { 

        $codAcesso = $_SESSION['dadosUsu']['codAcesso'];
        $codUsu = $_SESSION['dadosUsu']['codUsu'];
        $senhaEncript = Bcrypt::hash($infoPost['senha']);
之后,我对数据库中的所有内容进行更新,包括$imagem变量的图像url,之后我只需再查看一次会话,根据用户类型将用户发送到另一个页面

我也测试了这里的大多数可能性,但都不起作用


正如我所说,显然它唯一会弄乱$\u文件的地方是我在第一页使用会话的地方,如果有人能帮我解决这个问题并解释为什么会发生这种情况,我将非常感激。

似乎表单的默认操作与AJAX冲突,但是,如果您只想在上传文件时使用AJAX,那么您需要防止表单的默认操作。您的AJAX请求应该如下所示

$('.form').submit(function(e){
    e.preventDefault();    // Preventing the default action of the form
    var formData = new FormData(this); // So you don't need call serialize()

    $.ajax({
        url: 'cod_alterarAcc.php',
        type: 'POST',
        data: formData,
        success: function (data) {
            if(data != ''){
                $('.recebeDados').html(data);
                document.getElementById('visor1').value = '<?= $dados['nomeUsu']; ?>';
                document.getElementById('visor2').value = '<?= $dados['emailUsu']; ?>';
                document.getElementById('visor3').value = '<?= $dados['emailUsu']; ?>';
                document.getElementById('visor4').value = '';
                document.getElementById('visor5').value = '';
                document.getElementById('visor6').value = '';
            }
        },
        cache: false,
        contentType: false,
        processData: false
    });
});
在您的
AJAX成功函数中

console.log(data);
编辑


忘记将参数
e
放在
表单上。提交

通常$\u会话不与$\u文件交互,可能在显示的代码之外发生了错误。告诉我们您得到的确切错误……打印($\u文件['img'))并查看错误条目。可能是php.ini设置中的某些内容阻止了上载。如果$\u文件['img']['error'的值[不是零那么数字的值可以在@Francisaskquestion中找到我有这个表单的代码页,通过AJAX返回一些关于错误和类似错误的信息,并将它们放在空div和javascript中的预览函数中,以显示更改后的图像,这可能是源问题吗?@jeff我打印了\r($_FILES['img']),它给了我“Notice:Undefined index:img”,之后我删除了之前遇到的代码,它返回了数组([name]=>KeepClamandLoveProgramming.png[type]=>image/png[mp_name]=>C:\wamp64\tmp\php6D84.tmp[error]=>0[size]=>85047)是这样的,我认为它会失败,因为忘记在函数中放置参数。$\u POST、$\u文件和console.log(数据);正在工作,但console.log没有返回任何内容
$('.form').submit(function(e){
    e.preventDefault();    // Preventing the default action of the form
    var formData = new FormData(this); // So you don't need call serialize()

    $.ajax({
        url: 'cod_alterarAcc.php',
        type: 'POST',
        data: formData,
        success: function (data) {
            if(data != ''){
                $('.recebeDados').html(data);
                document.getElementById('visor1').value = '<?= $dados['nomeUsu']; ?>';
                document.getElementById('visor2').value = '<?= $dados['emailUsu']; ?>';
                document.getElementById('visor3').value = '<?= $dados['emailUsu']; ?>';
                document.getElementById('visor4').value = '';
                document.getElementById('visor5').value = '';
                document.getElementById('visor6').value = '';
            }
        },
        cache: false,
        contentType: false,
        processData: false
    });
});
print_r($_POST);
print_r($_FILES);
console.log(data);