Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde.
Estou com problemas ao subir arquivos no formato MP3 com o código abaixo. Sempre usei ele e hoje apenas aparece erro.
Abaixo o código:
$titulo = $_POST['titulo'];
if ($titulo != ""){
$texto = $_POST['texto'];
$padre = $_POST['padre'];
$data = date("Y-m-d", strtotime($_POST['data']));
$audio = isset($_FILES["audio"]) ? $_FILES["audio"] : FALSE;
$arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE;
if($arquivo && $audio){
if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $arquivo["type"])){
echo utf8_encode("<script> alert ('Arquivo em formato inválido! A imagem deve ser jpg, jpeg,
bmp, gif ou png. Cadastro não foi realizado.');</script>");
}
if(!preg_match("/^audio\/(mp3|MP3)$/", $audio["type"])){
echo utf8_encode("<script> alert ('Arquivo em formato inválido! erro no upload do audio. Cadastro não foi realizado.');</script>");
}
else{
preg_match ("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);
$dd = date("msdYiH");
$imagem_nome = $dd. "." . $ext[1];
$imagem_dir = "../am/" . $imagem_nome;
$up = move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
preg_match ("/\.(mp3|MP3|wav|wma){1}$/i", $audio["name"], $ext);
$dd = date("msdYiH");
$audio_nome = $dd. "." . $ext[1];
$audio_dir = "../am/" . $audio_nome;
$up_audio = move_uploaded_file($audio["tmp_name"], $audio_dir);
if ($up){
$sql = utf8_decode("INSERT INTO palavra (titulo, foto, data, audio, texto, padre)
VALUES ('$titulo','$imagem_nome', '$data','$audio_nome', '$texto', '$padre')");
}
}
}else echo utf8_encode("<script> alert ('Erro no upload.');</script>");
if($conn->query($sql) === TRUE){
echo utf8_encode("<script> alert (\"Cadastro realizado com sucesso.\");</script>");
echo utf8_encode('<script>window.location="palavra.php";</script>');
}
else{
echo "Erro: " . $sql . "<br />" .$conn->error;
echo utf8_encode('<script>window.location="palavra.php";</script>');
}
}
O que estou fazendo de errado?
Obrigado.@ShadowDLL, utilizei seu código e consegui realizar o cadastro/upload do arquivo de áudio.
Mas continua exibindo o alert de tipo de arquivo de audio inválido, só que como disse acima ele faz o upload e cadastra normal.
Tem alguma ideia do que possa ser?
Obrigado.
Tente assim:
CÓDIGO:
<?php
if ($_POST) {
if (
$_POST['titulo'] !== "" &&
$_POST['texto'] !== "" &&
$_POST['padre'] !== "" &&
$_POST['data'] !== "" &&
$_FILES['audio']['name'] !== "" &&
$_FILES['foto']['name'] !== ""
) {
$titulo = $_POST['titulo'];
$texto = $_POST['texto'];
$padre = $_POST['padre'];
$audio = $_FILES['audio'];
$imagem = $_FILES['foto'];
$data = date('Y-m-d', strtotime($_POST['data']));
if (preg_match("/^image\/(pjpeg|jpeg|png|jpg|gif|bmp)$/", $imagem['type'])) {
if (preg_match("/^audio\/(mp3|MP3)$/", $audio['type'])) {
preg_match ("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $imagem['name'], $ext);
$dd = date('msdYiH');
$imagem_nome = $dd. "." . $ext[1];
$imagem_dir = "../am/" . $imagem_nome;
preg_match ("/\.(mp3|MP3|wav|wma){1}$/i", $audio['name'], $ext);
$dd = date('msdYiH');
$audio_nome = $dd. "." . $ext[1];
$audio_dir = "../am/" . $audio_nome;
if (
@move_uploaded_file($imagem["tmp_name"], $imagem_dir) &&
@move_uploaded_file($audio["tmp_name"], $audio_dir)
) {
$sql = utf8_decode("INSERT INTO palavra (titulo, foto, data, audio, texto, padre) VALUES ('$titulo','$imagem_nome','$data','$audio_nome', '$texto', '$padre')");
if ($conn->query($sql) === TRUE) {
echo "<script>alert(\"Cadastro realizado com sucesso.\");</script>";
} else {
echo "Erro: " . $sql . "<br />" .$conn->error;
}
} else {
echo "<script>alert(\"Falha ao enviar arquivo.\");</script>";
}
} else {
echo "<script>alert('Arquivo em formato inválido! erro no upload do audio. Cadastro não foi realizado.');</script>";
}
} else {
echo "<script>alert(\"Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Cadastro não foi realizado.\");</script>";
}
} else {
echo "<script>alert(\"Preencha todos os campos.\");</script>";
}
echo "<script>window.location=\"palavra.php\";</script>";
}
?>@ShadowDLL, bom dia.
Com esse último código, ocorre o erro de arquivo de áudio no formato inválido, mas dessa vez nem sobe o arquivo.
O arquivo está no formato mp3 no código anterior apesar do erro o arquivo faz o upload.
Se eu retirar o trecho:
if(!preg_match("/^audio\/(mp3|MP3)$/", $audio["type"])){
echo utf8_encode("<script> alert ('Arquivo em formato inválido! erro no upload do audio. Cadastro não foi realizado.');</script>");
O arquivo sobe e não apresenta a mensagem de erro, mas também fico sem validar ele não é isso?
Obrigado desde já.Poderia me informar o tamanho do áudio
que está tentando subir?
Ambos os códigos aqui estão funcionando,
então acredito eu que o tamanho do áudio
que você está tentando subir passa o limite.
Tente fazer o seguinte, abra o arquivo
php.ini, e altere as linhas de acordo com
os valores abaixo:
memory_limit = 128M
max_execution_time = 300
upload_max_filesize = 20M
post_max_size = 24M
TESTE:
<?php
if ($_POST) {
if (
$_POST['titulo'] !== "" &&
$_POST['texto'] !== "" &&
$_POST['padre'] !== "" &&
$_POST['data'] !== "" &&
$_FILES['audio']['name'] !== "" &&
$_FILES['foto']['name'] !== ""
) {
$titulo = $_POST['titulo'];
$texto = $_POST['texto'];
$padre = $_POST['padre'];
$audio = $_FILES['audio'];
$imagem = $_FILES['foto'];
$data = date('Y-m-d', strtotime($_POST['data']));
if (preg_match("/^image\/(pjpeg|jpeg|png|jpg|gif|bmp)$/", $imagem['type'])) {
if (preg_match("/^audio\/(mp3|MP3)$/", $audio['type'])) {
preg_match ("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $imagem['name'], $ext);
$dd = date('msdYiH');
$imagem_nome = $dd. "." . $ext[1];
$imagem_dir = "../am/" . $imagem_nome;
preg_match ("/\.(mp3|MP3|wav|wma){1}$/i", $audio['name'], $ext);
$dd = date('msdYiH');
$audio_nome = $dd. "." . $ext[1];
$audio_dir = "../am/" . $audio_nome;
if (
@move_uploaded_file($imagem["tmp_name"], $imagem_dir) &&
@move_uploaded_file($audio["tmp_name"], $audio_dir)
) {
$sql = utf8_decode("INSERT INTO palavra (titulo, foto, data, audio, texto, padre) VALUES ('$titulo','$imagem_nome','$data','$audio_nome', '$texto', '$padre')");
if ($conn->query($sql) === TRUE) {
echo "<script>alert(\"Cadastro realizado com sucesso.\");</script>";
} else {
echo "Erro: " . $sql . "<br />" .$conn->error;
}
} else {
echo "<script>alert(\"Falha ao enviar arquivo.\");</script>";
}
} else {
echo "<script>alert('Arquivo em formato inválido! erro no upload do audio. Cadastro não foi realizado.');</script>";
}
} else {
echo "<script>alert(\"Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Cadastro não foi realizado.\");</script>";
}
} else {
echo "<script>alert(\"Preencha todos os campos.\");</script>";
}
echo "<script>window.location=\"palavra.php\";</script>";
}
?>
<form method="post" enctype="multipart/form-data">
<span>Texto</span><br>
<input type="text" name="texto"><br>
<span>Titulo</span><br>
<input type="text" name="titulo"><br>
<span>Padre</span><br>
<input type="text" name="padre"><br>
<span>Data</span><br>
<input type="text" name="data" value="20/03/2020"><br>
<span>Audio</span><br>
<input type="file" name="audio"><br>
<span>Foto</span><br>
<input type="file" name="foto"><br><br>
<button type="submit">Enviar</button>
</form>@ShadowDLL boa tarde.
Me desculpa a demora no retorno.
Infelizmente ainda não deu certo, criei o arquivo ".php.ini", alterei o código para o seu último exemplo e mesmo assim aparece como arquivo no formato inválido.
E como eu disse anteriormente é um arquivo que eu mesmo já havia conseguido fazer upload com esse código.
Desde já agradeço pela ajuda.
Provavelmente o erro está ocorrendo porque
você está armazenando os dados vindos do
formulário sem antes realizar qualquer
tipo de "validação" nos mesmos...
Tente fazer assim: