Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Insert Record


wagtel

Question

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:

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?

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Eu uso o Dreamweaver 8 para programar PHP e reparei que quando crio um formulário

que direciona o usuário para a página "deleta.php", esta página faz

a exclusão automática dos dados no database e redireciona para a ´página final

Tentei 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 39

Query was empty

Alguém pode me dizer onde estou errando?

Link to comment
Share on other sites

  • 0

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().

Link to comment
Share on other sites

  • 0

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?

Link to comment
Share on other sites

  • 0
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

Edited by dedas
Link to comment
Share on other sites

  • 0

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ão

atravé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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...