Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida formulário


RAN

Pergunta

Olá,

Tenho um script de busca e estou a tentar que quando coloco uma palavra no formulário

ela seja inserida numa base de dados MySql

Parte do script

require_once("insertdb.php"); //inclusao do arquivo com a funcao

mysql_connect("localhost","sh_ran","shran"); //conexão com o banco de dados(altere!)

mysql_select_db("sh_sh"); //Definição do banco de dados a ser usado(escolha o seu!)

$tags["RESULT_HEAD_DATA"]= $head;

$tags["RESULT_SITENAME"] = $title;

$tags["RESULT_FORM_OPEN"] = '<form method=get" action="index.php">';

$tags["RESULT_FORM_CLOSE] = '</form>';

$tags["RESULT_SEARCH_BOX"] = '<input type=text" name="q" size="30" value="'.$displaysearch.'" />';

$tags["RESULT_SUBMIT_BUTTON] = '<input type="submit" value="search" style="width:55px;" />';

$tags["RESULT_TARGET_URL"] = $final_target_url;

$tags["RESULT_CHECKBOXES"] = get_checkboxes_html(0);

$tags["RESULT_INTITLE_CHECKBOX"] = '<input type=checkbox" name="intitle" value=1 '.$intitle_checked.' /> Search in title';

$tags["RESULT_HASHES_CHECKBOX]= '<input type="checkbox" name="hashes" value=1 '.$hashes_checked.' /> Search with quotes';

$tags["RESULT_ADS"] = $ad_html;

if(isset($_GET["q"])){ //Testa se o form foi postado

if(insertDb($_POST,"tagcloud")){ //Chama a função

echo "Dados inseridos com sucesso!";

}

else{

echo "Falha ao inserir os dados!";

}

}

Quando clico em search, aparece uma nova linha na base de dados, (quer dizer que houve conexão e que o script enviou qualquer coisa para a base de dados)

mas sem a palavra que inseri na search box. A tabela da base de dados é "tagcloud" e um dos campos é "q"

Espero a vossa ajuda

Obrigado,

RAN

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Desculpem.

A função insertdb.php

<?

/*****************************************************************/

/* Script desenvolvido por Rafael G. Martins

/*

/* Data: 15/10/2007

/*

/* Versão: 1.0

/*

/* Funçao: Recebe uma variavel "$_POST" de um formulario,

/* e insere os dados numa tabela do MySQL

/*

/* Caso hajam erros envie email para: rafael@rafaelmartins.com

/*****************************************************************/

/*

Função insertDB

Entrada: $info: Variavel de formulario

(Ex: $_POST)

$table: Nome da tabela do Mysql que receberá os dados.

(Ex: "teste")

Retorno: formato BOOL:

Valores:

true: se os dados foram inseridos com sucesso.

false: se ocorreu alguma falha ao inserir os dados

*/

function insertDb($info,$tagcloud){

$count = 1; //Contador para auxiliar na colocação das virgula

foreach($info as $key=>$value){

$fields .= $key; //Montagem da query

$values .= "'".$value."'"; //Montagem da query

if($count < sizeof($info)){

$fields .= ","; //Inserção das virgulas

$values .= ","; //Inserção das virgulas

}

$count++;

}

mysql_query("INSERT INTO $tagcloud($fields) VALUES($values)"); //Realização da query

return (mysql_affected_rows() == 1) ? true : false; //Testa se a linha foi inserida no BD

}

?>

Editado por RAN
Link para o comentário
Compartilhar em outros sites

  • 0
Dentro da função, comenta o mysql_query (já que ele está inserindo em branco) e dá um echo no $fields e $values, provavelmente o $values esteja mesmo em branco, logo, não insere nada...

Obrigado,

Eu não percebo nada de PHP, estou a tentar por tentativa e erro.

Tentei procurar no Google comentar mysql_query mas não consigo encontrar

Sería possível explicar melhor?

Tentei assim mas não dá

function insertDb($info,$tagcloud){

$count = 1; //Contador para auxiliar na colocação das virgula

foreach($info as $key=>$value){

echo $fields .= $key; //Montagem da query

echo $values .= "'".$value."'"; //Montagem da query

if($count < sizeof($info)){

echo $fields .= ","; //Inserção das virgulas

echo $values .= ","; //Inserção das virgulas

}

$count++;

}

mysql_query("INSERT INTO $tagcloud($fields) VALUES($values)"); //Realização da query

return (mysql_affected_rows() == 1) ? true : false; //Testa se a linha foi inserida no BD

}

Editado por RAN
Link para o comentário
Compartilhar em outros sites

  • 0

Troca:

mysql_query("INSERT INTO $tagcloud($fields) VALUES($values)"); //Realização da query

Por:

//mysql_query("INSERT INTO $tagcloud($fields) VALUES($values)"); //Realização da query

echo "Fields -> $fields

<br>

Values -> $values";

exit;

Link para o comentário
Compartilhar em outros sites

  • 0
Troca:

mysql_query("INSERT INTO $tagcloud($fields) VALUES($values)"); //Realização da query

Por:

//mysql_query("INSERT INTO $tagcloud($fields) VALUES($values)"); //Realização da query

echo "Fields -> $fields

<br>

Values -> $values";

exit;

Agora, não insere nenhuma linha na base de dados e dá uma página com:

Fields ->

Values ->

Troca:

mysql_query("INSERT INTO $tagcloud($fields) VALUES($values)"); //Realização da query

Por:

//mysql_query("INSERT INTO $tagcloud($fields) VALUES($values)"); //Realização da query

echo "Fields -> $fields

<br>

Values -> $values";

exit;

Agora, não insere nenhuma linha na base de dados e dá uma página com:

Fields ->

Values ->

Não sei se posso colocar o endereço da página de teste.

Se não puder retirem http://www.sharingengines.com/test/index.php

O que eu pretendo é que quando faço uma busca,

o que eu coloquei no formulário vá parar á base de dados.

Por exemplo, vou procurar "musica" essa palavra, vai ser adicionada á base de dados.

Na página resultados, pode-se ver em cima "Dados inseridos com sucesso!" mas não insere!

Editado por RAN
Link para o comentário
Compartilhar em outros sites

  • 0

"Esquece" (volta o script ao que era no começo do tópico) tudo que foi feito até aqui, altera:

if(insertDb($_POST,"tagcloud")){ //Chama a função

Para:

if(insertDb($_GET,"tagcloud")){ //Chama a função

Link para o comentário
Compartilhar em outros sites

  • 0
"Esquece" (volta o script ao que era no começo do tópico) tudo que foi feito até aqui, altera:

if(insertDb($_POST,"tagcloud")){ //Chama a função

Para:

if(insertDb($_GET,"tagcloud")){ //Chama a função

Agora dá erro "Falha ao inserir os dados! "

Link para o comentário
Compartilhar em outros sites

  • 0
Mostra como tudo está atualmente.

A função insertdb.php está igual

if (isset($_GET["q"])):
    #process result page
    
    $q = $_GET["q"];
    
    if ($_GET["hashes"]==1){
        $hashes_checked = "checked=checked";
        $q = '"'.$q.'"';
    }else{
        $hashes_checked = "";
    }    

    if ($_GET["intitle"]==1){
        $intitle_checked = "checked=checked";
        $q = 'intitle:('.$q.')';
    }else{
        $intitle_checked = "";
    }
    
    $displaysearch     = htmlspecialchars(stripslashes($_GET["q"]));
    $rabit_ready_string = get_glued_rabits($sites);
    $to_put_into_url     = urlencode(stripslashes($prefix . $q ) . $infix . $rabit_ready_string . $sufix);
    $final_target_url     = str_replace("#",$to_put_into_url, $target_url);
    $result_title        = $displaysearch." - ".$title;;
    
    $head = '<title>'.$result_title.'</title>
        <meta http-equiv=content-type content="text/html; charset=UTF-8">
        <meta name="keywords" content='.$keywords.'" />
        <meta name="description" content="'.$description.'" />'
        ."\n$opensearch_meta\n";
    
require_once("insertdb.php"); //inclusao do arquivo com a funcao
mysql_connect("localhost","sh_ran","sh");  //conexão com o banco de dados(altere!)
mysql_select_db("sh_sh");  //Definição do banco de dados a ser usado(escolha o seu!)

    if(isset($_GET['q'])){  //Testa se o form foi postado
    if(insertDb($_POST,"tagcloud")){  //Chama a função
    echo "Dados inseridos com sucesso!"; 
  }
  else{
    echo "Falha ao inserir os dados!";
  }
}
    
    $tags["RESULT_HEAD_DATA"]    = $head;
    $tags["RESULT_SITENAME"]    = $title;
    $tags["RESULT_FORM_OPEN"]    = '<form  method="get" action="index.php">';
    $tags["RESULT_FORM_CLOSE"]    = '</form>';
    $tags["RESULT_SEARCH_BOX"]    = '<input type="text" name="q" size="30" value="'.$displaysearch.'" />';
    $tags["RESULT_SUBMIT_BUTTON"]    = '<input type="submit" value="search" style="width:55px;" />';
    $tags["RESULT_TARGET_URL"]    = $final_target_url;
    $tags["RESULT_CHECKBOXES"]    = get_checkboxes_html(0);
    $tags["RESULT_INTITLE_CHECKBOX"] = '<input type="checkbox" name="intitle" value=1 '.$intitle_checked.' /> Search in title';
    $tags["RESULT_HASHES_CHECKBOX"]= '<input type="checkbox" name="hashes" value=1 '.$hashes_checked.' /> Search with quotes';    
    $tags["RESULT_ADS"]            = $ad_html;

Editado por RAN
Link para o comentário
Compartilhar em outros sites

  • 0

Existem dois métodos de envio de um formulário: POST e GET, o teu formulário usa o GET (<form method="get" action="index.php">), só que na função você está informando que é pra resgatar o POST (insertDb($_POST,"tagcloud"), então fica ai as duas alternativas:

1 - Muda o método de envio do form de get para post;

2 - Muda na função de $_POST para $_GET.

Essas são as alternativas pra resolver a questão.

Link para o comentário
Compartilhar em outros sites

  • 0
Existem dois métodos de envio de um formulário: POST e GET, o teu formulário usa o GET (<form method="get" action="index.php">), só que na função você está informando que é pra resgatar o POST (insertDb($_POST,"tagcloud"), então fica ai as duas alternativas:

1 - Muda o método de envio do form de get para post;

2 - Muda na função de $_POST para $_GET.

Essas são as alternativas pra resolver a questão.

Olá,

Obrigado por tudo, mas não dá... :-(

Tentei alterar das duas maneiras.

A que ainda vai "funcionando" é mudar $_POST para $_GET

Neste caso dá-me erro "Falha ao inserir os dados!"

Talvez o código insertdb.php não permita mudar de $_POST para $_GET...

Link para o comentário
Compartilhar em outros sites

  • 0

Já funciona

//inserting data order in database

$order = "INSERT INTO tagcloud(tags)

VALUES

('$displaysearch')";

//declare in the order variable

$result = mysql_query($order); //order executes

if($result){

echo("<br>Input data is succeed");

} else{

echo("<br>Input data is fail");

}

Agora, tenho outro problema.

Quando faço uma busca, a palavra entra na coluna "tags"

Precisava que quando fizesse uma busca (por ex: procura) várias vezes

a palavra não se repetisse na coluna "tags", mas contasse na coluna "count"

Seria uma espécie de contador.

Procurei a palavra "procura" 50 vezes e aparece na coluna "count" 50

Alguém sabe como isto se faz?

Agradecido

Link para o comentário
Compartilhar em outros sites

  • 0

No caso você vai ter que alterar a função, para que antes de inserir no BD você faça uma query buscando a palavra chave, se retornar zero é porque não encontrou nada, logo, a palavra ainda não está cadastrada, para contar a quantidade de registros que retornaram na query de teste use mysql_num_rows.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...