Jump to content

Exibir dados de formulário no site


cat_fich
 Share

Recommended Posts

Boa tarde. Já não programo em PHP há 2 anos por isso está um pouco esquecido. Se me puderem dar umas dicas agradecia bastante. Estou a fazer um projecto que assenta no desenvolvimento de um mini-fórum em que os utilizadores inserem os dados num formulário para essa informação ser exibida no site.

Então construo o formulário, defino os nomes dos campos e crio uma base de dados no mysql com os mesmos (incluindo radio buttons, etc) certo?

Só não me recordo como é que envio a informação para a base de dados quando o utilizador carrega no submit e depois a faço aparecer no sítio que quero.

Se tiverem conhecimento de algum tutorial que me possa ajudar postem-no aqui se faz favor. Agradeço toda a ajuda que me possam dar

EDIT: Tendo como base este link: http://php.net/manual/pt_BR/tutorial.forms.php

Para mostrar a informação do formulário:

<form action="action.php" method="POST">
Nome: <input type="text" name="nome" />
Idade: <input type="text" name="idade" />
<input type="submit">
</form>

Teria de criar o ficheiro action.php

Nome: <?php echo $_POST["nome"]; ?>
Idade: <?php echo $_POST["idade"]; ?> anos

Isto funciona para um utilizador. Não sei é como adaptar este código a múltiplos utilizadores. Sei que tenho que recorrer a uma Base de Dados.

Recapitulando: Tenho o ficheiro connect.php na pasta include

<?
    // CONEXÃO À BASE DE DADOS
    $dbConnection = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer uma ligação ao MYSQL!");
    $dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! | Conexão ao MYSQL: ".$dbConnection);
?>

Quando precisar de trabalhar com a Base de Dados escrevo:

include "include/connect.php";

no ficheiro em questão. Se detectarem algum erro façam o favor de me avisar.

Para o primeiro utilizador a carregar no botão submit, o ficheiro action.php ficaria assim?

Nome: <?php echo $_POST["nome"]; WHERE id=1 ?>
Idade: <?php echo $_POST["idade"]; WHERE id=1 ?> anos

Mas esta abordagem implica que o utilizador se registe não é? Ou como é que incremento os id's sempre que um utilizador carregue no botão submit?

Link to comment
Share on other sites

Muito obrigado pela tua ajuda.

Então para mostrar os dados do terceiro utilizador da Base de Dados proj, por exemplo, o código seria este?

<?php

$dbConnection = mysql_connect("localhost", "root", "");
if (!$dbConnection) {
    die("Não foi possível estabelecer uma ligação ao MYSQL!" . mysql_error());
}
$result = mysql_query("SELECT * FROM proj");
if (!$result) {
    die("Não foi possível seleccionar a Base de Dados!" . mysql_error());
}
echo mysql_result($result, 2); // MOSTRA OS DADOS DO TERCEIRO UTILIZADOR

mysql_close($dbConnection);
?>
Link to comment
Share on other sites

Sim, mas para selecionar a base de dados, é assim, como tu tinhas ao ínicio.

$dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! | Conexão ao MYSQL: ".$dbConnection);

A query é o que tu vais selecionar/alterar na base de dados. 😉

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Sim, mas para selecionar a base de dados, é assim, como tu tinhas ao ínicio.

$dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! | Conexão ao MYSQL: ".$dbConnection);

A query é o que tu vais selecionar/alterar na base de dados. 😉

Então ficaria assim, correcto?

<?php

// CONEXÃO À BASE DE DADOS
$dbConnection = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer uma ligação ao MYSQL!");
$dbSelected = mysql_select_db("site_projecto",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! |Conexão ao MYSQL: ".$dbConnection);

// CONSULTA
$query = "SELECT * FROM proj";

// EXECUTAR A INSTRUÇÃO
$resultado = mysql_query($query);

if (!$resultado) {
    	die("Não foi possível seleccionar a Base de Dados!" . mysql_error());
}
echo mysql_result($result, 2); // MOSTRA OS DADOS DO TERCEIRO UTILIZADOR

mysql_close($dbConnection);
?>

Depois é só fazer os $_POST onde quero que apareça a informação certo?

Mas assim só mostra os dados de uma linha não é?

No site que postei há n tópicos e ele mostra os dados de n linhas.

Eu tenho aqui o EasyPHP mas esqueci-me de perguntar como faço para testar. Já lá vai muito tempo lol. Inicio o EasyPHP, faço F12 no Dreamweaver, diz-me para especificar o servidor de teste, dou um nome ao site, digo que quero utilizar uma tecnologia de servidor, PHP MySQL, Editar e testar localmente (o meu servidor de teste está neste computador), escolho um directório para guardar os ficheiros, o URL para navegar até à raiz do site é qual? 127.0.0.1? http://localhost/ ?

Digo que não quero usar servidor remoto e concluo o processo. Se bem me lembro é isto, é só para ter a certeza.

Para alterar o nome de utilizador do MySQL e a password tenho que editar um ficheiro .ini não é? Mas isto não é necessário se utilizar como username "root" e password "" porque é assim que vem por defeito.

Desculpa se estou a ser chato, é que esta é a segunda vez que estou a programar em PHP, tenho aqui o primeiro site que fiz, multilinguagem com backoffice, já importei a Base de Dados e tentei testar mas não consegui. Isto é só até engrenar depois não devo ter mais dificuldades.

Obrigado mais uma vez

Link to comment
Share on other sites

Já consegui testar o código.

form.php

<?php

        // CONEXÃO À BASE DE DADOS
        $dbConnection = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer uma ligação ao MYSQL!");
        $dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! |Conexão ao MYSQL: ".$dbConnection);
       
    // GUARDAR DADOS
	mysql_query("INSERT INTO form(campo1,campo2) VALUES('".$_POST['campo1']."','".$_POST['campo2']."')")
?>

<html>
<head>
<title>Formulário</title>
</head>

<body>
<form action="action.php" method="POST">
Campo1: <input type="text" name="campo1" />
Campo2: <input type="text" name="campo2" />
<input type="submit">
</form>
</body>
</html>

Notice: Undefined index: campo1 in C:\Programas\EasyPHP5.3.0\www\proj\form.php on line 8

Notice: Undefined index: campo2 in C:\Programas\EasyPHP5.3.0\www\proj\form.php on line 8

_______________________________________________________________________

action.php

<?php

        // CONEXÃO À BASE DE DADOS
        $dbConnection = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer uma ligação ao MYSQL!");
        $dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! |Conexão ao MYSQL: ".$dbConnection);
       
    // MOSTRAR OS DADOS   
    $get = mysql_query("SELECT * FROM form WHERE id=".$id);
	$record = mysql_fetch_assoc($get);

	echo $record['campo1'];
	echo $record['campo2'];
?>

Notice: Undefined variable: id in C:\Programas\EasyPHP5.3.0\www\proj\action.php on line 8

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Programas\EasyPHP5.3.0\www\proj\action.php on line 9

_______________________________________________________________________

Se alguém me puder ajudar agradeço

Link to comment
Share on other sites

O teu problema passa pelo seguinte.... Da primeira vez que executas o script não foi feito o POST de nada certo? Então o teu código inicial, como depende dos dados passados por $_POST, vão dar erro...

Altera o teu código php de:

<?php

        // CONEXÃO À BASE DE DADOS
        $dbConnection = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer uma ligação ao MYSQL!");
        $dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! |Conexão ao MYSQL: ".$dbConnection);
       
            // GUARDAR DADOS
                mysql_query("INSERT INTO form(campo1,campo2) VALUES('".$_POST['campo1']."','".$_POST['campo2']."')")
?>

Para:

<?php
    if(count($_POST)>0)
    {
        // CONEXÃO À BASE DE DADOS
        $dbConnection = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer uma ligação ao MYSQL!");
        $dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! |Conexão ao MYSQL: ".$dbConnection);
       
            // GUARDAR DADOS
                mysql_query("INSERT INTO form(campo1,campo2) VALUES('".$_POST['campo1']."','".$_POST['campo2']."')")
    }
?>

Assim ao fazeres a validação se o array $_POST tem alguma coisa la dentro, ele testa se foi postado ou não alguma coisa... Mesmo assim, depois dentro deves validar se os $_POST['campo1'] e $_POST['campo2'] estão definidos e/ou se estão correctamente preenchidos

Link to comment
Share on other sites

Entretanto já fiz algumas alterações ao código, está tudo a funcionar correctamente, a informação é armazenada na BD, incrementa os id's, etc.

Só não mostra os dados no site.

<?php

// CONEXÃO À BASE DE DADOS
        $dbConnection = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer uma ligação ao MYSQL!");
        $dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! |Conexão ao MYSQL: ".$dbConnection);

if(isset($_POST['botao_submit'])) {
	$campo1 = $_POST['campo1'];
	$campo2 = $_POST['campo2'];

	if(!(empty($campo1) || empty($campo2))) {

   			// CONSULTA
        	mysql_query("INSERT INTO form(campo1,campo2) VALUES('".$_POST['campo1']."','".$_POST['campo2']."')");
	}
}

	if(isset($_GET['id'])) {

		$get = mysql_query("SELECT * FROM nomedatabela WHERE id=".$id);
		$record = mysql_fetch_assoc($get);
	}			
?>

<html>
<head>
<title>Formulario</title>
</head>

<body>
<form action="form.php" method="POST">
Campo1: <input type="text" name="campo1" />
Campo2: <input type="text" name="campo2" />
<input type="submit" name="botao_submit">
</form>

<form action="form.php" method="POST">
Campo Saida 1: <input type="text" name="campo_saida1" value="<?=echo $record['campo1'];?>" />
Campo Saida 2: <input type="text" name="campo_saida2" value="<?=echo $record['campo2'];?>" />
</form>
</body>
</html>

Se detectares algum erro ou souberes como resolver este problema diz-me sff.

Obrigado pela tua ajuda

Link to comment
Share on other sites

No sitio onde tens

if(isset($_GET['id'])) {
    $get = mysql_query("SELECT * FROM nomedatabela WHERE id=".$id);
    $record = mysql_fetch_assoc($get);
}

Usas a variável $id, mas sinceramente, não vejo sitio nenhum onde ela é declarada. Das duas uma, ou tu tens o register_globals activo no php - e nessa situação funciona - ou então não tens e tens que fazer:

if(isset($_GET['id'])) {
    $id = mysql_real_escape_string(strip_tags($_GET['id']));
    $get = mysql_query("SELECT * FROM nomedatabela WHERE id=".$id);
    $record = mysql_fetch_assoc($get);
}

🙂 depois diz kker koisa

Link to comment
Share on other sites

No sitio onde tens

if(isset($_GET['id'])) {
    $get = mysql_query("SELECT * FROM nomedatabela WHERE id=".$id);
    $record = mysql_fetch_assoc($get);
}

Usas a variável $id, mas sinceramente, não vejo sitio nenhum onde ela é declarada. Das duas uma, ou tu tens o register_globals activo no php - e nessa situação funciona - ou então não tens e tens que fazer:

if(isset($_GET['id'])) {
    $id = mysql_real_escape_string(strip_tags($_GET['id']));
    $get = mysql_query("SELECT * FROM nomedatabela WHERE id=".$id);
    $record = mysql_fetch_assoc($get);
}

🙂 depois diz kker koisa

Já fiz essa alteração mas continua a não mostrar os dados. Disseram-me que talvez fosse mais simples fazer o formulário de saída num ficheiro à parte, é verdade? Em caso afirmativo terei que fazer muitas alterações no código? Eu tentei assim porque é a primeira vez que faço algo deste género. A primeira vez é que custa, depois de se fazer uma vez fazem-se as que forem precisas mas como não tenho aulas de PHP torna-se complicado, tenho que ir por tentativas.

Obrigado

Link to comment
Share on other sites

Já resolvi o problema anterior:

<?php
    
    // CONEXÃO À BASE DE DADOS
        $dbConnection = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer uma ligação ao MYSQL!");
        $dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! |Conexão ao MYSQL: ".$dbConnection);
        
    if(isset($_POST['botao_submit'])) {
        $campo1 = $_POST['campo1'];
        $campo2 = $_POST['campo2'];
        
        if(!(empty($campo1) || empty($campo2))) {
    
               // CONSULTA
            mysql_query("INSERT INTO form(campo1,campo2) VALUES('".$_POST['campo1']."','".$_POST['campo2']."')");
            $id = mysql_insert_id();
        }
    }
    
        if(isset($id)) {
            $id = mysql_real_escape_string(strip_tags($_GET['id']));
            $get = mysql_query("SELECT * FROM form WHERE id=".$id);
            $record = mysql_fetch_assoc($get);
        }          
?>

<html>
<head>
<title>Formulario</title>
</head>

<body>
<form action="form.php" method="POST">
Campo1: <input type="text" name="campo1" />
Campo2: <input type="text" name="campo2" />
<input type="submit" name="botao_submit">
</form>

<?php if(isset($record)){ ?>
<form action="form.php" method="POST">
Campo Saida1: <input type="text" name="campo_saida1" value="<?php echo $record['campo1']; ?>" />
Campo Saida2: <input type="text" name="campo_saida2" value="<?php echo $record['campo2']; ?>" />
</form>
<?php } ?>
</body>
</html>

No entanto agora aparece-me um notice e um warning:

Notice: Undefined index: id in C:\Programas\EasyPHP5.3.0\www\a\form.php on line 20

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Programas\EasyPHP5.3.0\www\a\form.php on line 22

Está lá o if(isset($id)) não percebo porque aparece este notice lol.

Se alguém me puder ajudar agradeço

Link to comment
Share on other sites

O erro

Notice: Undefined index: id in C:\Programas\EasyPHP5.3.0\www\a\form.php on line 20

-- APOSTO -- que é desta linha:

$id = mysql_real_escape_string(strip_tags($_GET['id']));

Podes remover essa linha, acredito que não terás mais problemas. B)

No entanto pensei era que querias usar o $_GET['id'] por isso não sugeri o mysql_last_insert_id();

Cuidado, porque o mysql_last_insert_id(); devolve-te o último valor 'auto_increment' gerado pelo mysql na tua ligação.

Abraço

Link to comment
Share on other sites

O erro

-- APOSTO -- que é desta linha:

$id = mysql_real_escape_string(strip_tags($_GET['id']));

Podes remover essa linha, acredito que não terás mais problemas. B)

No entanto pensei era que querias usar o $_GET['id'] por isso não sugeri o mysql_last_insert_id();

Cuidado, porque o mysql_last_insert_id(); devolve-te o último valor 'auto_increment' gerado pelo mysql na tua ligação.

Abraço

Pois é, assim só mostra os últimos valores inseridos e eu queria que mostrasse todos.

Eu estou a tentar fazer isto recolhendo informações aqui e ali por isso é que fiz com o mysql_last_insert_id();, não sabia que só funcionava para o último valor

Link to comment
Share on other sites

Vamos la ver uma coisa....

Se o que tu pretendes é obter TODOS os registos da tabela form, não podes filtrar pelo id.

Se o que tu pretendes é obter o último registo que acabaste de inserir, só mesmo como estás a fazer.

Se o que tu pretendes é, caso não tenhas inserido nenhum agora então usar o id que vem no endereço, exemplo:

http://www.exemplo.com/script.php?id=1

... e que caso tenhas inserido, usar o id inserido, então tens que fazer algumas modificações. Em vez de:

        if(isset($id)) {
            $id = mysql_real_escape_string(strip_tags($_GET['id']));
            $get = mysql_query("SELECT * FROM form WHERE id=".$id);
            $record = mysql_fetch_assoc($get);
        }  

Ias ter:

        if(!isset($id) && isset($_GET['id']))
            $id = mysql_real_escape_string(strip_tags($_GET['id']));

        $get = mysql_query("SELECT * FROM form WHERE id=".$id);
        $record = mysql_fetch_assoc($get);

No entanto, deixa-me referir-te que se o servidor tiver a opção 'register_globals' activa no php.ini, o $_GET['id'] pode ser referenciado como $id. Logo vai dar raia.... experimenta mudar o nome da variável $id para outra coisa... $myId... sei la... Se não tiver register_globals activo, melhor B) Não há problema...

De qualquer forma, se puderes, explica melhor o que pretendes 😛

Link to comment
Share on other sites

Vamos la ver uma coisa....

Se o que tu pretendes é obter TODOS os registos da tabela form, não podes filtrar pelo id.

Se o que tu pretendes é obter o último registo que acabaste de inserir, só mesmo como estás a fazer.

Se o que tu pretendes é, caso não tenhas inserido nenhum agora então usar o id que vem no endereço, exemplo:

http://www.exemplo.com/script.php?id=1

... e que caso tenhas inserido, usar o id inserido, então tens que fazer algumas modificações. Em vez de:

        if(isset($id)) {
            $id = mysql_real_escape_string(strip_tags($_GET['id']));
            $get = mysql_query("SELECT * FROM form WHERE id=".$id);
            $record = mysql_fetch_assoc($get);
        }  

Ias ter:

        if(!isset($id) && isset($_GET['id']))
            $id = mysql_real_escape_string(strip_tags($_GET['id']));

        $get = mysql_query("SELECT * FROM form WHERE id=".$id);
        $record = mysql_fetch_assoc($get);

No entanto, deixa-me referir-te que se o servidor tiver a opção 'register_globals' activa no php.ini, o $_GET['id'] pode ser referenciado como $id. Logo vai dar raia.... experimenta mudar o nome da variável $id para outra coisa... $myId... sei la... Se não tiver register_globals activo, melhor B) Não há problema...

De qualquer forma, se puderes, explica melhor o que pretendes 😛

Com o primeiro form quero armazenar os dados digitados pelos utilizadores em campo1 e campo2 quando carregam no botão submit.

No segundo form quero mostrar todos os dados armazenados. Neste momento só mostra os últimos dados inseridos.

Depois de ter este código a funcionar irei substituir campo1 e campo2 pelas perguntas de um inquérito, e quero que em baixo, ou noutra página wtv, apareçam as respostas submetidas por todos os utilizadores

Link to comment
Share on other sites

Já está a funcionar mais ou menos lol

<?php
   
    // CONEXÃO À BASE DE DADOS
        $dbConnection = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer uma ligação ao MYSQL!");
        $dbSelected = mysql_select_db("proj",$dbConnection) or die("Não foi possível seleccionar a Base de Dados! |Conexão ao MYSQL: ".$dbConnection);
       
    if(isset($_POST['botao_submit'])) {
        $campo1 = $_POST['campo1'];
        $campo2 = $_POST['campo2'];
       
        if(!(empty($campo1) || empty($campo2))) {
   
               // CONSULTA
            mysql_query("INSERT INTO form(campo1,campo2) VALUES('".$_POST['campo1']."','".$_POST['campo2']."')");
            $id = mysql_insert_id();
        }
    }
   
        if(isset($id)) {
            $get = mysql_query("SELECT * FROM form WHERE id=".$id);
            $record = mysql_fetch_assoc($get);
        }          
?>

<html>
<head>
<title>Formulario</title>
</head>

<body>
<form action="form.php" method="POST">
Campo1: <input type="text" name="campo1" />
Campo2: <input type="text" name="campo2" />
<input type="submit" name="botao_submit">
</form>

<?php if(isset($record)){ ?>
<form action="form.php" method="POST">
Campo Saida1: <input type="text" name="campo_saida1" value="<?php echo $record['campo1']; ?>" />
Campo Saida2: <input type="text" name="campo_saida2" value="<?php echo $record['campo2']; ?>" />
</form>
<?php } ?>
</body>
</html>

http://img10.imageshack.us/img10/1195/69265238.jpg

Na segunda linha, por exemplo, quero mostrar a e b em vez de Array ( [campo1] => a [campo2] => b )

Já li o manual http://php.net/manual/en/function.print-r.php e pelo que percebi preciso de fazer algo deste género certo?

$results = print_r($b, true); // $results now contains output from print_r

Mas quando altero esta linha:

Campo Saida: <input type="text" name="campo_saida" value="<?php print_r($row); ?>

para:

Campo Saida: <input type="text" name="campo_saida" value="<?php print_r($row, true); ?>

os campos do formulário ficam vazios. Sabes o que estou a fazer mal? Obrigado

Link to comment
Share on other sites

Muito obrigado pela tua ajuda, já consegui pôr a funcionar como queria com a excepção de um pequeno pormenor: Há forma de mostrar a informação a todos os utilizadores? Neste momento só mostra os dados aos utilizadores que carregam no botão submit e eu queria mostrar a informação a todos os utilizadores, mesmo aos que não carreguem no botão submit

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.