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