Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Num projeto aterior, conseguir usar o ajax para cadastrar (crud) conteudo, agora tento com upload de foto, mas não cadastra o conteudo no banco e nem no faz o upload
$page = isset($_GET['p'])?$_GET['p']:'';
if($page=='add'){
$produto = $_POST['produto'];
$raca = $_POST['raca'];
$descricao = $_POST['descricao'];
$preco = $_POST['preco'];
$nascimento = $_POST['nascimento'];
$foto = $_FILES['foto']['name'];
$upload = move_uploaded_file($_FILES['foto']['tmp_name'], 'produtos/' . $_FILES['foto']['name']);
$stmt = $db->prepare("INSERT INTO produto values('',?,?,?,?,?,?)");
$stmt->bindParam(1,$produto);
$stmt->bindParam(2,$raca);
$stmt->bindParam(3,$descricao);
$stmt->bindParam(4,$preco);
$stmt->bindParam(5,$nascimento);
$stmt->bindParam(6,$foto);
if($stmt->execute()){
echo "Produto cadastrado com sucesso!";
}else{
echo "Falha ao adicionar produto";
}
}
function salvarProduto(){
var produto = $('#produto').val();
var descricao = $('#descricao').val();
var raca = $('#raca').val();
var preco = $('#preco').val();
var nascimento = $('#nascimento').val();
var foto = $('#foto').val();
$.ajax({
type: "POST",
url: "produto.php?p=add",
data: "produto="+produto+"&descricao="+descricao+"&raca="+raca+"&preco="+preco+"&nascimento="+nascimento+"&foto"+foto,
success: function(msg){
alert('Produto cadastrada com sucesso!');
}
});
}>
Agora, sacjamm disse:
Já tentou fazer esse script cadastrar sem o upload? Estou falando desse script atual, remova o upload.
Ja sim, tenho um igual para cadastrar que funciona, mas quero fazer o upload da foto e não consigo
Eu sempre faço um sistema de cadastro com imagens e ajax, de forma diferente, justamente, para evitar esses possíveis erros.
Na tela de cadastro eu não coloco nenhum upload, só coloco o upload apartir da página de edição.
Exemplo:
Crio um formulário de cadastro, e submeto o formulário sem upload, após clicar o botão e o cadastro for sucesso, eu redireciono para a página de edição, que contém o formulário de upload, e no meu upload, eu faço com formData.
Upload Via ajax é chato de ser feito.
Tente utilizar o plugin Jquery Form, e não esqueça de colocar no form o opção enctype="multipart/form-data"
ex:
<form enctype="multipart/form-data" action="" method="POST"> </form>
Site do Plugin
[http://malsup.com/jquery/form/#file-upload](http://malsup.com/jquery/form/#file-upload)o enctype eu coloquei depois, percebi que faltou mesmo, mas mesmo agora não ta funcionando, não entendi como implemente esse jquery form dentro do meu com ajax
$page = isset($_GET['p'])?$_GET['p']:'';
if($page=='add'){
$produto = $_POST['produto'];
$raca = $_POST['raca'];
$descricao = $_POST['descricao'];
$preco = $_POST['preco'];
$nascimento = $_POST['nascimento'];
$foto = $_FILES['foto']['name'];
$upload = move_uploaded_file($_FILES['foto']['tmp_name'], 'produtos/' . $_FILES['foto']['name']);
$stmt = $db->prepare("INSERT INTO produto values('',?,?,?,?,?,?)");
$stmt->bindParam(1,$produto);
$stmt->bindParam(2,$raca);
$stmt->bindParam(3,$descricao);
$stmt->bindParam(4,$preco);
$stmt->bindParam(5,$nascimento);
$stmt->bindParam(6,$foto);
if($stmt->execute()){
echo "Produto cadastrado com sucesso!";
}else{
echo "Falha ao adicionar produto";
}
}
Eu to achando que essa parte abaixo tem algo errado
>
Citar
$foto = $_FILES['foto']['name'];
$upload = move_uploaded_file($_FILES['foto']['tmp_name'], 'produtos/' . $_FILES['foto']['name']);Somente com Ajax, não é possivel fazer upload de arquivo.
Ex usando Jquery Form
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<form id="upload" action="upload.php" enctype="multipart/form-data" action="" method="POST">
<input type="file" name="arquivo">
<button type="submit"> Ok </button>
</form>
<script>
// wait for the DOM to be loaded
$(document).ready(function () {
// bind form using ajaxForm
$('#upload').ajaxForm({
// dataType identifies the expected content type of the server response
dataType: 'json',
// success identifies the function to invoke when the server response
// has been received
success: processJson
});
});
function processJson(data) {
alert(data.msg);
}
</script>
upload.php
<?php
$uploaddir = '';
$uploadfile = $uploaddir . basename($_FILES['arquivo']['name']);
if ($_FILES['arquivo']['name'] != '') :
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploadfile)) {
$msg = "Sucesso!";
} else {
$msg = "Erro!";
}
endif;
$retorno = array("msg" => $msg);
echo json_encode($retorno);
Já tentou fazer esse script cadastrar sem o upload? Estou falando desse script atual, remova o upload.