wagtel Postado Outubro 26, 2012 Denunciar Share Postado Outubro 26, 2012 Olá pessoal, minha dúvida é com um sistema onde o cliente teria que clicar três vezes para inserirseus dados em um database MySQLComo faço para evitar isto?Eu preciso que o usuário clique apenas uma vez e quando entrar na página o sistema insere automáticamenteno database e é redirecionado para a próxima página "index3_invert.php".No código eu inseri assim:function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue; switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } $editFormAction = $_SERVER['PHP_SELF']; if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) { $insertSQL = sprintf("INSERT INTO amigos_menu (recebe, envia, nome, foto) VALUES (%s, %s, %s, %s)", GetSQLValueString($_POST['recebe'], "text"), GetSQLValueString($_POST['envia'], "text"), GetSQLValueString($_POST['nome'], "text"), GetSQLValueString($_POST['foto'], "text")); mysql_select_db($database_Tacapi, $Tacapi); $Result1 = mysql_query($insertSQL, $Tacapi) or die(mysql_error()); $insertGoTo = "index3_invert.php"; if (isset($_SERVER['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } Já no formulário que é bem simples eu digitei assim: <form action="<?php echo $editFormAction; ?>" id="form" name="form" method="POST"> <input name="Submit" type="submit" id="Submit" value="Confirmar" /> <input name="envia" type="hidden" id="envia" value="<?php echo $row_Propostas['usu_convida']; ?>" /> <input name="recebe" type="hidden" id="recebe" value="<?php echo $row_Propostas['usu_responde']; ?>" /> <input name="nome" type="hidden" id="nome" value="<?php echo $row_Propostas['usu_convida_nome']; ?>" /> <input name="foto" type="hidden" id="foto" value="<?php echo $row_Propostas['usu_convida_foto']; ?>" /> <input type="hidden" name="MM_insert" value="form3" /> <input type="hidden" name="MM_insert" value="form"> </form>Tudo o que preciso é saber como:inserir os dados no database e redirecionar o usuário para a página "index3_invert.php"Tudo de forma automática.Alguém pode me ajudar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wagtel Postado Outubro 26, 2012 Autor Denunciar Share Postado Outubro 26, 2012 Eu uso o Dreamweaver 8 para programar PHP e reparei que quando crio um formulárioque direciona o usuário para a página "deleta.php", esta página faza exclusão automática dos dados no database e redireciona para a ´página finalTentei alterar o código anterior (parte dele) para o código abaixo:if ((isset($_GET["usu_id"])) && ($_GET["usu_id"] != "form")) { $insertSQL = sprintf("INSERT INTO amigos_menu WHERE usu_id=%s(recebe, envia, nome, foto) VALUES (%s, %s, %s, %s)", GetSQLValueString($_GET['recebe'], "text"), GetSQLValueString($_GET['envia'], "text"), GetSQLValueString($_GET['nome'], "text"), GetSQLValueString($_GET['foto'], "text"));Mas de uo seguinte erro:Warning: sprintf() [function.sprintf]: Too few arguments in C:\wamp\www\tacapi\comunidade\index2_conv.php on line 39Query was emptyAlguém pode me dizer onde estou errando? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dedas Postado Outubro 26, 2012 Denunciar Share Postado Outubro 26, 2012 Cara, esse erro está gerando porque você liberou 5 espaços para inserir variável e só inseriu 4. Sua consulta sql também está incorreta.Tenta dessa forma:if ((isset($_GET["usu_id"])) && ($_GET["usu_id"] != "form")) { $insertSQL = sprintf("INSERT INTO amigos_menu(recebe, envia, nome, foto) VALUES (%s, %s, %s, %s)", GetSQLValueString($_GET['recebe'], "text"), GetSQLValueString($_GET['envia'], "text"), GetSQLValueString($_GET['nome'], "text"), GetSQLValueString($_GET['foto'], "text"));Se quiser colocar o where, coloque ele após os valores e coloca a variável como parâmetro na função sprintf(). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wagtel Postado Outubro 26, 2012 Autor Denunciar Share Postado Outubro 26, 2012 Dedas, está quase lá.Eu alterei o código da forma sugerida e ele:Inseriu na tabela MySQL e foi para a próxima página.Mas não pegou os valores da Recordset , então todos os valores inseridos foram vazios.Será que colocar o where após os valores e colocar a variável como parâmetro na função sprintf() pode ajudar?Como faço isto? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dedas Postado Outubro 26, 2012 Denunciar Share Postado Outubro 26, 2012 (editado) Como faço isto?Dessa forma:if ((isset($_GET["usu_id"])) && ($_GET["usu_id"] != "form")) { $insertSQL = sprintf("INSERT INTO amigos_menu(recebe, envia, nome, foto) VALUES (%s, %s, %s, %s) WHERE usu_id=%d", GetSQLValueString($_GET['recebe'], "text"), GetSQLValueString($_GET['envia'], "text"), GetSQLValueString($_GET['nome'], "text"), GetSQLValueString($_GET['foto'], "text"), GetSQLValueString($_GET['usu_id'], "int"));Mas eu acho que essa consulta ai num vai funcionar não... Nunca vi um where em uma query Insert :S Editado Outubro 26, 2012 por dedas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wagtel Postado Outubro 27, 2012 Autor Denunciar Share Postado Outubro 27, 2012 Dedas:Você tinha razão, o código apenas estava inserindo dados vazios por que eu esqueci de enviá-los pela URL.Corrigi a página anterior e agora funcionou muito bem.O código correto é:if ((isset($_GET["usu_id"])) && ($_GET["usu_id"] != "form")) { $insertSQL = sprintf("INSERT INTO amigos_menu(recebe, envia, nome, foto) VALUES (%s, %s, %s, %s)", GetSQLValueString($_GET['recebe'], "text"), GetSQLValueString($_GET['envia'], "text"), GetSQLValueString($_GET['nome'], "text"), GetSQLValueString($_GET['foto'], "text"));Com apenas um clique o cliente insere os dados duas vezes no database e depois retorna para sua página padrãoatravés de uma sessão de variável.Ele passa por cinco páginas diferentes sem perceber.Agradeço muito a sua ajuda, valeu mesmo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dedas Postado Outubro 28, 2012 Denunciar Share Postado Outubro 28, 2012 (editado) Por nada cara :) Qualquer coisa, estamos aqui ^^ Não esqueça de marcar o tópico como resolvido.Abraço! Editado Outubro 28, 2012 por dedas Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
wagtel
Olá pessoal, minha dúvida é com um sistema onde o cliente teria que clicar três vezes para inserir
seus dados em um database MySQL
Como faço para evitar isto?
Eu preciso que o usuário clique apenas uma vez e quando entrar na página o sistema insere automáticamente
no database e é redirecionado para a próxima página "index3_invert.php".
No código eu inseri assim:
Já no formulário que é bem simples eu digitei assim:Tudo o que preciso é saber como:
inserir os dados no database e redirecionar o usuário para a página "index3_invert.php"
Tudo de forma automática.
Alguém pode me ajudar?
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.