Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Vou tentar ser o mais breve possível,
Tenho um formulário de cadastro que tem um campo para o cadastro de tags, sendo está tudo certo o formulário funcionando perfeitamente grava tudo certinho no banco de dados, só as tags que não gravadas no banco.
Abaixo o script da tags que não grava no banco:
// script que recebe os dados do formulário
<script language="javascript">
$(document).ready(function(){
$(".btn-s1").click(function(){
var nomeA = $("#nomeA").val();
var nomeB = $("#nomeB").val();
var tagss = $("#tagss").val();
var desc = $("#descs").val();
$(".retorno-s1").html('<img src="arquivo loader" alt="" />');
$.ajax({
type: "POST",
url: "arquivo php que recebe os dados e grava no banco",
data: "nomeA="+ nomeA + "&nomeB="+ nomeB + "&tagss="+ tagss + "&desc="+ desc,
success: function(html){
$(".retorno-s1").html(html);
}
});
return false;
});
});
</script>
// arquivo php que recebe os dados do formulário
<?php
$nomeA=strtolower(strip_tags(trim($_POST['nomeA'])));
$nomeB=strtolower(strip_tags(trim($_POST['nomeB'])));
$tagss=strtolower(strip_tags(trim($_POST['tagss'])));
$desc=strip_tags(trim($_POST['desc']));
$cadastra = mysql_query("INSERT INTO banco que grava os dados (cod_u, name_a, name_b, description) VALUES ('$cod','$nomeA','$nomeB','$desc')") or die("Erro ao consultar!");
$cadastra=mysql_query("INSERT INTO banco que grava as tags (cod_fk, tag_01) VALUES ('$cod','$tagss')");
?>
//Formulário somente a parte das tags
<div class="new-tag">
<div class="tags" >
<input type="text" placeholder="Adicionar tags..." name="tagss" id="tagss" class="new-tag-input">
</div>
</div>
/applications/core/interface/imageproxy/imageproxy.php?img=http://egberto.gratisphphost.info/figura.jpg&key=840fa64873ef359862e36e51dbc6dd1d308e3879df851ee579c159201178798f" alt="figura.jpg" />
Esta e a parte do fomulário que ficam as tags as tags ficam dentro de uma div chamada new-tags
Atenção fiz questão de frisar somente a parte que tenho a dúvida que são as partes das tags
Desde já agradeço a colaboração de todos.
as 'tagss' são varias neh?
Tem varias possibilidades de resolver:
Um caminho é criar varios campos na tela de acordo com a necessidade e passar via serialize do Javascript:
http://www.sanwebe.com/2013/03/addremove-input-fields-dynamically-with-jquery
Outro é pedir para o usuário separar via 'virgula' e após isto usar o explode http://php.net/manual/en/function.explode.php
Vai gerar um array e você insere cada um.
Abraços.
Entendi,
Sendo que o usuário digita a tag e aperta o enter e a tag digitada, no caso a variável vai para cima do campo do formulário, eu quero pegar a variável digitada que vai para cima do input do formulário, quando as variáveis do formulário vão para o arquivo php todas são gravadas no banco mysql só as do campo tags que não.
no caso as tags ficam dentro da div new-tag.
Show, nesse caso é utilizando JavasScript mesmo.
* Você vai precisar monitorar o 'Enter' para criar o campo ao invés do click como está no exemplo que te passei acima.
* Tratar dentro do laço e inserir uma a uma.
Tenta ai qualquer coisa da um grito.
A saida HTML vai precisar ficar assim de maneira dinâmica:
<div id="new-tag">
<input type="text" name="mytag[]"/>
<br />
<input type="text" name="mytag[]"/>
<br />
<input type="text" name="mytag[]"/>
<br />
</div>
No JavaScript na parte do ajax vai precisar utilizar o serialize:
,data: $('#tagss *').serialize()
e no php você trata:
<?php
foreach($_POST['mytag'] as $tag){
"INSERT INTO .... VALUE ($tag)"
}Ok Gabriel,
Vou testar seu exemplo só pra vc entender que este sistema é igual ao sistema de cadastro novos tópicos daqui do fórum na para de cadastro de tags.
Gabriel executei o script igual ao seu exemplo e não funcionou.
O que exatamente não funcionou? JS? Php? PHP
Lembrando que só passei um exemplo.
Caso tenha muita dificuldade de fazer dinamicamente com o JavaScript
Uma alternativa é por , (virgula) como já citei.
você vai dar o explode() e dentro do loop armazenar individualmente.
Abraços.
Gabriel,
Fiz de uma maneira diferente aqui, ao invés de colocar input=text coloquei chekbox com a name="new-tag"
agora preciso enviar essa chekbox pelo jquery para o php, fiz aqui de uma jeito mas não to conseguindo seja como eu to enviando o chekbox
<script language="javascript">
$(document).ready(function(){
$(".btn-s1").click(function(){
var nomeA = $("#nomeA").val();
var nomeB = $("#nomeB").val();
var desc = $("#desc").val();
var cod = "<?php echo $_SESSION['cod_m'];?>";
var tags = new Array();
$("input[name='new-tag']:checked").each(function ()
{
checkeds.push(parseInt($(this).val()));
});
$(".retorno-s1").html('<img src="loader.gif" alt="" />');
$.ajax({
type: "POST",
url: "arquivo php",
data: "nomeA="+ nomeA + "&nomeB="+ nomeB + "&tags="+ tags + "&desc="+ desc + "&cod="+ cod,
success: function(html){
$(".retorno-s1").html(html);
}
});
return false;
});
});
</script>
Quando envio o formulário ele fica no loading continuo e não envia queria saber se está certo essa requisição chekbox nunca fiz uma através do jquery e como eu recebo essas variáveis no php ? Com o laço foreach criado anteriormente ?Oi!
tentei seguir seu código assim não sai da sua linha de raciocínio.
Esse seria o 'index.php'
<!DOCTYPE HTML>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".btn-s1").click(function(){
var nomeA = $("#nomeA").val();
var tags = new Array();
$("input[name='new-tag']:checked").each(function (){
tags[tags.length] = $(this).val();
});
$.ajax({
type: "POST"
,url: "recebe.php"
,data: {
nomeA
,tags
}
,success: function(html){
$(".retorno-s1").html(html);
}
});
return false;
});
});
</script>
<div >
<input type="hidden" id="nomeA" value="Nome"/>
<label>
<input type="checkbox" name="new-tag" id="tag_l" value="life" checked="true"/> Life
</label>
<br />
<label>
<input type="checkbox" name="new-tag" id="tag_d" value="death" checked="true"/> Death
</label>
<hr />
<button class="btn-s1">Disparo</button>
</div>
</body>
</html>
E dentro do 'recebe.php' você tem acesso as informções e as tags :
<?php
print_r($_POST);
foreach($_POST['tags'] as $tag){
echo $tag . '<br />';
}
Abraços.
Quando você receber as informações do POST basta dar um
$tags = implode(',', $_POST['tagss']);
ficando assim:
$nomeA=strtolower(strip_tags(trim($_POST['nomeA'])));
$nomeB=strtolower(strip_tags(trim($_POST['nomeB'])));
//editado
$tags = implode(',', $_POST['tagss']);
$desc=strip_tags(trim($_POST['desc']));
$cadastra = mysql_query("INSERT INTO banco que grava os dados (cod_u, name_a, name_b, description) VALUES ('$cod','$nomeA','$nomeB','$desc')") or die("Erro ao consultar!");
$cadastra=mysql_query("INSERT INTO banco que grava as tags (cod_fk, tag_01) VALUES ('$cod','$tags')");
Aí sim vai funcionar e gravar no banco de dados.. lembrando que o campo do banco tem que ser em
varchar ;)
Vamos lá é simples
http://www.jqueryscript.net/demo/Simple-Animated-jQuery-Tags-Input-Plugin-Lovely-Tag/
Eu peguei este script e implementei em meu próprio formulário.
Viu agora eu to conseguindo e enviar as tags para o php, entendeu agora ?
mesmo fazendo do seu jeito acima não funcionou.
o problema e no js que não quer enviar a requisição pro php.
<div class="new-tag">
<div class="tags" >
<input type="text" placeholder="Adicionar tags..." name="tagss[]" id="tagss" class="new-tag-input">
</div>
</div>
Falta o [] teste aí
O banco está até gravando tudo, somente o campo das tags e que não grava nada, fica em branco só a coluna das tags.
Como ta rolando sua requisição POST ajax do NetWork?
Ta passando os parâmetros?
Se você utilizar o Google Chrome, abre o modo desenvolvedor (F12) e depois abre a aba NetWork.
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/JzZhdLw.png?1&key=4e50bbb9ee93f75f0bd41a4910b6b7fa8ee5f968facfe3e8a9f52df650a75fb8" alt="JzZhdLw.png?1" />
Simula o Click no seu botão (No caso o '.btn-s1')
Da uma olhada no resultado e veja se consegue resolver por conta, caso contrario da um grito.
Att.