Conecççoes BD php

redy

Membro
Boa tarde.

Bem, tou a fazer um programa/pagina web que tem q fazer o "Insert" "updat" "delete" "listar dados" de uma base de dados...

Bem, a pagina esta feita da seguinte forma:

<?php

$user= $_POST['nome'];
$pass= $_POST['password'];

if (empty($user)||empty($pass)){
?>
<form action="coneccao.php" method="post">
Nome: <input type="text" name="nome" >
<br>
Password: <input type="password" name="password" >
<br>
<input type="submit" value="Ligar BD">
</form>

<?php
}
else{
$ligax = @mysql_connect('192.168.2.2', $user, $pass) ;
if($ligax){
$bd=mysql_select_db('a12-ig2-12_bd',$ligax);
?>
Bem Vindo, agora pode interagir com a sua base de dados, para tal, carregue no botao para interagir com a BD <br/>

<form action="CriarTabelas.php">
<input type="submit" value="Criar Tabelas"">
</form>

<form action="inserir.php">
<br /><input type="submit" value="Inserir Registos">
</form>
<?php
}
else
header("Location: coneccao.php");
}
?>
Este é o ficheiro/pagina q é chamada inicialmente...

So que o problema é q sempre q eu clico no botao tanto como inserir ou como CriarTabelas ele corre o outro ficheiro so que perde a conecçao :S

<?php
$query="CREATE TABLE fornecedores(
codforn INTEGER,
nome VARCHAR(50) NOT NULL,
Morada VARCHAR(50),
telef VARCHAR(15),
PRIMARY KEY(codforn))";
$result=mysql_query($query);

$query = "CREATE TABLE Produtos (CodProd INTEGER, Designacao VARCHAR(20),
PrecoUnitario float, codforn INTEGER, PRIMARY KEY (CodProd), FOREIGN KEY (codforn) References Fornecedores)";

$resultado=mysql_query($query);

echo 'criadas as tabelas com sucesso';

?>
Este é ficheiro que chama quando se carrega em CriarTabelas :S


Ja tentei fazer sem o form a chamar uma funçao no programa:
<input type="submit" value="Criar Tabelas" onclick="criartabelas()">
So que este nao da :X

Sou novo nisto, o q sugerem q faça pa nao perder a conecçao?

Saudaçoes, Raul Silva
 
Boas.

Pelo que vi perdes a ligação porque navegas para outra pagina, quando viajas para a pagina de criação de tabelas ou edição, deves criar uma nova ligação a base de dados, há e é sempre boa politica fechar a ligação depois da interação com o SQL fazes tudo o que tens a fazer, no fim chamas: mysql_close($ligacao);
 
Boas.

Pelo que vi perdes a ligação porque navegas para outra pagina, quando viajas para a pagina de criação de tabelas ou edição, deves criar uma nova ligação a base de dados, há e é sempre boa politica fechar a ligação depois da interação com o SQL fazes tudo o que tens a fazer, no fim chamas: mysql_close($ligacao);

Antes de mais obrigado por responderes.

Tipo, por mudar de pagina perco a ligação, entao como tenho que fazer?

Em vez de usar:
<form action="CriarTabelas.php">
<input type="submit" value="Criar Tabelas"">
</form>
Tenho que usar este codigo para chamar uma funçao que tenha la o codigo para criar/apagar etc??
<input type="submit" value="Criar Tabelas" onclick="criartabelas()">
Se tiverem opçoes para fazer isto digam s.f.f.
Abraço, redy
 
Cuidado que onclick="criartabelas()" acontece em JavaScript, mas não é coisa de PHP. Após carregares uma página só consegues interagir novamente com o PHP ao carregá-la novamente (a página).
Sim, cada vez que acaba de executar um script de PHP são fechadas as ligações e para a próxima vez terás que inicializar uma nova conecção.
Caso não queiras trabalhar com Sessões (que desaconselho por motivos de simplicidade e segurança) terás que transportar os dados de nome a password juntamente com os formulários para cada acção, tipo:
<input type="hidden" name="nome" value="<?php echo $_POST['nome']; ?>" />
e depois na nova página terás que voltar a ligar à Base-de-Dados (mysql_connect()) tal como já o fizeste.
 
faz um ficheiro de ligacao á BD do tipo:

ligacao.php (dentro do ficheiro metes os dados de acesso á bd)

dpois em cada pagina so tens de fazer o include "ligacao.php";
 
Idealiza que o processamento do php pelo servidor ocorre num tempo diferente da leitura do html no lado do cliente. Depois do servidor processar o php da página ele só retorna o html (aquilo que podes ver em Ver Código-Fonte da Página), o que significa que nada em html é capaz de chamar funções de php.

O problema de momento é que não consegues fazer com que a ligação à BD dure pelas várias páginas em que o utilizador navega, por isso sempre que queres criar uma ligação terás que meter o utilizador e a palavra-passe.
Agora tens duas maneiras de trabalhar com isso, ou então, sempre que o utilizador escolha uma acção tu mandas juntamente a informação de utilizador e palavra-passe; OU então crias uma sessão para o utilizador que basicamente é um conjunto de variáveis guardadas no servidor que não se perdem quando o utilizador navega de página. É preferível a opção de sessões, por isso vou mostrar-ta:

O que deverás fazer agora é criar uma ficheiro chamado 'ligacao.php' e meter-lhe o seguinte conteúdo:
PHP:
<?php

//necessitas de chamar esta funcao sempre que queres trabalhar com sessoes
session_start();

//isto aqui vai reconhecer se o utilizador esta a tentar fazer uma accao de 'Ligar BD'
if ( isset($_POST['nome']) && isset($_POST['password']) ) {
  //se ele estiver realmente a tentar fazer login entao os dados serao passados para a variavel de sessao
  $_SESSION['utilizador'] = $_POST['nome'];
  $_SESSION['password'] = $_POST['password'];
}

//agora vai tentar estabeler a ligacao, mas somente se existir uma sessao iniciada
if ( isset($_SESSION['utilizador']) && isset($_SESSION['password']) ) {
  //e usa a informacao da sessao para ligar a BD
  $ligax = mysql_connect('192.168.2.2', $_SESSION['utilizador'], $_SESSION['password']); //o @ que tirei e' usado para supressao de erros, por agora e' bom ver as mensagens de erros
  if ($ligax) { //nao poupes nos espacos, e' bem mais facil ver codigos com muitos espacos
    $bd = mysql_select_db('a12-ig2-12_bd', $ligax);
  }
}
?>
O código acima irás chamar em todos os teus ficheiros onde fazes ligação à base de dados, logo no início, ou seja, começas em todas as páginas a escrever logo
PHP:
<?php
include('ligacao.php');
?>
supondo que esse ficheiro se encontra no mesmo directório.
 
Back
Topo