• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

cat_fich

Exibir dados de formulário no site

20 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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);
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 :P

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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>

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não... neste caso tens que, em vez do print_r($row), pões $row['campo1'] e $row['campo2'] nos campos respectivos :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Removi o if((isset($id)).

Obrigado mais uma vez.

Será possível implementar radio buttons no inquérito?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora