← PHP

Inserção de form na Base Dados

Lida 3114 vezes

Offline

alexandremdn 
Membro
Mensagens 94 Gostos 2
Feedback +2

Troféus totais: 25
Trófeus: (Ver todos)
Nineth year Anniversary Level 5 Level 4 Avatar Eighth year Anniversary Seventh year Anniversary Windows User Super Combination Combination Topic Starter

Boas,

estou a ter dificuldade em inserir um form na bd. Não apresenta nenhum erro, mas quando faço enviar faz tipo refresh à página. o código onde esta o form é este:

Codigo Form:

<h3>Inserir Cliente</h3>
<?php
require_once("insertdb.php"); //inclusao do arquivo com a funcao

mysql_connect("localhost","nome_da_bd","password");  //conexão com o banco de dados.
mysql_select_db("teste");  //Definição do banco de dados a ser usado.
if(isset($_POST['campo1'])){  //Testa se o form foi postado
  if(insertDb($_POST,"teste")){  //Chama a função
    echo "Dados inseridos com sucesso!";
  }
  else{
    echo "Falha ao inserir os dados!";
  }
}
else{ //se não foi postado imprime o form
?>
    <form method="post" id="info" action="<?$_SERVER['PHP_SELF'];?>">
      Nome Cliente: <input type="text" name="cliente"><br>
      Morada: <input type="text" name="morada"><br>
      N. contribuinte: <input type="text" name="contribuinte"><br>
      <input type="submit" value="Enviar"><br>
      <!-- Importante: O submit nao pode ter a propriedade "name", senão dará errado!)-->
    </form>
<?php
}
?>

Em insertdb.php tenho o seguinte código:

<?

function insertDb($info,$table){
  $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 $table($fields) VALUES($values)");  //Realização da query
  return (mysql_affected_rows() == 1) ? true : false;  //Testa se a linha foi inserida no BD
}
?>

SQL:

CREATE TABLE `teste` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`cliente` TEXT NOT NULL ,
`morada` TEXT NOT NULL ,
`contribuinte` TEXT NOT NULL
) ENGINE = MYISAM ;

Obrigado:)
Offline

fabiomigas 
Membro
Mensagens 148 Gostos 6
Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts

Não querendo ser desagradável mas sabes o que é o Google?
Foste tu que escreveste isso?
Resposta á tua pergunta
http://www.tizag.com/mysqlTutorial/mysqlinsert.php lê o que está ai e seguramente chegarás a solução.
Offline

Henrique Mouta 
Equipa
Mensagens 1189 Gostos 3
Troféus totais: 31
Trófeus: (Ver todos)
Level 6 Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3

Estás a complicar o que é simples...
Para quê utilizares essa função se ainda não consegues fazer a ligação da maneira mais simples?

Tal como recomendou o fabiomigas recomendo-te a leitura daquele artigo. Se seguires essas instruções facilmente vais conseguir :)

Good luck ;)

PS: Se quiseres mesmo perceber o que não estás a fazer bem, nesta linha:   mysql_query("INSERT INTO $table($fields) VALUES($values)");  //Realização da query
metes um 'or die(mysql_error());' e ele diz-te qual é o erro do MySQL, provavelmente é de sintaxe...

Fazendo a papa, substituis essa linha por:   mysql_query("INSERT INTO $table($fields) VALUES($values)") or die(mysql_error());  //Realização da query

Agora é só analisar o erro ;)

PPS: Já encontrei o erro que não faz isso funcionar.
Onde tens if(isset($_POST['campo1'])){  //Testa se o form foi postado, não podes ter o campo1, visto que não existe nenhum input no formulário com esse nome. Experimenta por: if(isset($_POST['submit'])){  //Testa se o form foi postado