Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #58 da revista programar. Faz já o download aqui!

diokhan

Vários forms e apenas um ficheiro PHP

Mensagens Recomendadas

diokhan    1
diokhan

Boas,

eu sou novo por ca, tenho alguma ou mesmo pouca experiencia em php, mas ja sei fazer qualquer coisa, principiante.

Na empresa onde trabalho deram-me um projecto, onde preciso preencher varias forms aos mesmo tempo e guardar na base de dados, mas as forms estao relacionadas todas a mesma tabela. e por exemplo nao sou obrigado a preencher todas as forms. ha algum ciclo while que possa fazer para verificar as que estao ou nao preenchidas e inserir esses dados na base de dados?

cumprimentos

EDIT: Titulo modificado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diokhan    1
diokhan

por exemplo..a cada projecto posso ter varias tarefas..e cada tarefa tem diferentes dados mas que vao ser guardados todos na mesma tabela, sao todas as tarefas do mesmo projecto mas com dados diferentes uns dos outros

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
yoda    139
yoda

Cada campo (input) tem um nome, se sabes à partida quantos campos tens, podes dar-lhe nomes diferentes, tipo nome1, nome2, nome3, morada1, morada2, morada3 ..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
scorch    19
scorch

Se a tua ideia é criares vários forms todos para o mesmo ficheiro PHP, para a mesma tabela, basta criares um form. Lá dentro, os inputs terão nomes diferentes, tais como txt_email e txt_password, isto apenas um exemplo. No script PHP fazes apenas uma estrutura condicional (if, elseif, else) e verificas se esse input foi preenchido ($_POST["txt_email"], por exemplo). :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diokhan    1
diokhan

mas por exemplo...eu preciso d ter acesso as forms para poder preencher..do tipo..eu fiz uma select box para apresentar ate quantas form quero que apareça, e depois é so preencher. o maximo é 9, mas posso so usar 1, por isso que é do meu interesse ter esta "flexibilidade", porque tanto posso usar apenas uma form como duas ou mais, nunca é o mesmo numero de forms a ser usado. nao sei se me fiz perceber. mas desde ja agradeço a ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
scorch    19
scorch

Aí é que está. Verificas se o input está em branco, se estiver esse "form" não é utilizado. No entanto, é tudo um só form, só que com inputs com nomes diferentes. :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
yoda    139
yoda

Noutra perspectiva, podes usar os nomes com este formato :

name="morada[]"

E lê-los por php como se de arrays se tratassem (o nome sempre igual como está). Nunca usei isto, mas já vi funcionar.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diokhan    1
diokhan

hmm..tao eu posso dar o nome d cada input como se fosse um array..e na hora de inserir na base de dados ele insere varias vezes? e por exemplo..para aparecer no ecran as forms. posso manter como tenho? ou tenho de alterar?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
scorch    19
scorch

@diokhan, por exemplo:

<form name="nome_do_form" action="ficheiro_php.php" method="post">
<input name="morada1" type="text">
<input name="email1" type="text">

<input name="email2" type="text">
<input name="morada2" type="text">
</form>

E no PHP:

if ($_POST["morada1"] != null){
    //executa a query com o primeiro "form".
    mysql_query($query);
}

if ($_POST["morada2"] != null){
    //executa a query com o segundo "form".
    mysql_query($query);

}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diokhan    1
diokhan

hmm..acho que ja percebi..e sera possivel fazer o mesmo sql mas em pdo? que na empresa eles usam pdo para evitar o sql injection, nao quero dar muito trabalho, ja me ajudaram muito, eu tambem posso pensar um pouco que nao faz mal nenhum  :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
scorch    19
scorch

hmm..acho que ja percebi..e sera possivel fazer o mesmo sql mas em pdo? que na empresa eles usam pdo para evitar o sql injection, nao quero dar muito trabalho, ja me ajudaram muito, eu tambem posso pensar um pouco que nao faz mal nenhum  :)

Em principio sim. O SQL é sempre o mesmo, o motor de Base de Dados é que muda. Neste caso é mesmo a forma de trabalhar com o determinado motor, que é com classes, pelo que eu percebi.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diokhan    1
diokhan

Boas,

hoje voltei a empresa para alterar o meu trabalho, e tenho uma duvida.. eu fiz como me indicaram para fazer:

@diokhan, por exemplo:

<form name="nome_do_form" action="ficheiro_php.php" method="post">
<input name="morada1" type="text">
<input name="email1" type="text">

<input name="email2" type="text">
<input name="morada2" type="text">
</form>

E no PHP:

if ($_POST["morada1"] != null){
    //executa a query com o primeiro "form".
    mysql_query($query);
}

if ($_POST["morada2"] != null){
    //executa a query com o segundo "form".
    mysql_query($query);

}

e deparei-me com um problema..na pagina aparece-me todos os campos para preencher. E tipo, eu gostaria que apenas mostrasse na pagina as forms que vao ser preenchidas, por exemplo, se num projecto eu tiver apenas 3 tarefas so aparecem 3 "forms" para preencher, assim nao seria necessario aparecer varios campos que depois ficariam em branco, porque o maximo de tarefas que um projecto pode ter sao 9, e isto seriam imensos campos em branco na pagina. Mas obrigado pela ajuda  :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diokhan    1
diokhan

Eu encontrei na net um exemplo, algo que achei semelhante ao que preciso, http://www.eltonminetto.net/codes/showphp.php?file=form_dinamico.php.

Pelo que percebi do exemplo que encontrei, ha um botao que ao clicar adiciona campos ao form, eu poderia fazer o mesmo mas teria de adicionar varios campos na form. A ideia seria essa, ao clicar no botao ele adicionava os campos de uma nova form para ser preenchido.

Eu fiz como esta neste exemplo, com um botao crio varias caixas de texto para serem preenchidas, esta a funcionar, agora surge a duvida, como posso gravar na base de dados a informaçao que esta nas "DIVs" que foram criadas, se por exemplo eu tiver criado mais do que uma. O nome de cada DIV fica por exemplo name[1] e name[2].  :hmm:

eu sempre que gravo algo na base de dados os campos referentes as tarefas aparece preenchidos com "NULL  NULL Array  Array 0 Array"..posso estar a fazer mal a query para inserir :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diokhan    1
diokhan

Mostra o teu código. :)

na quarta logo pela manha eu coloco aqui o codigo, que amanha é feriado e nao trabalho. e o projecto esta no pc da emrpesa e nao no meu. eu sei que preciso inserir arrays pa base de dados, que ja percebi que aquilo ta a fazer arrays, mas inda nao consegui inserir, andei por la hoje a inventar :wallbash:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diokhan    1
diokhan

boas,

aqui tenho o meu código, parte dele.

Este é onde tenho o botao para adicionar os campos que preciso para serem preenchidos.

<h5>New Task:</h5>
    	<div id="client" name="IdClient"></div>
    	<br>
    	<div id="task" name="taskname"></div>
    	<br>
    	<div id="description" name="description2"></div>
    	<br>
    	<div id="platenumber" name="platenumber"></div>
    	<br>
    	<div id="reftask" name="reftask"></div>
    	<hr>
    	<center><input type="button" value="New Task" onclick="add()"></center>
    	<hr>

Este é o javascript que gera os campos acima:

var task=0;
		client=0; 
		description=0;
		platenumber=0;
		reftask=0;

function add(){

	var DivClient = document.getElementById('client');
    var DivNewClient = document.createElement('div');
    DivNewClient.setAttribute("id","DivClient"+client);
    DivNewClient.innerHTML = 'Client Name['+client+']:<span style="padding-left: 14px"><input type="text" name="IdClient['+client+']" size="50"></span> <input type="button" value="X" onClick="delClient(\'DivClient'+client+'\')"><br>';
    DivClient.appendChild(DivNewClient);
    client++;

    var DivTask = document.getElementById('task');
        var DivNewTask = document.createElement('div');
        DivNewTask.setAttribute("id","DivTask"+task);
        DivNewTask.innerHTML = 'Task Name['+task+']:<span style="padding-left: 19px"><input type="text" name="taskname['+task+']" size="50"></span> <input type="button" value="X" onClick="delTask(\'DivTask'+task+'\')"><br>';
        DivTask.appendChild(DivNewTask);
        task++;

        var DivDescription = document.getElementById('description');
        var DivNewDescription = document.createElement('div');
        DivNewDescription.setAttribute("id","DivDescription"+description);
        DivNewDescription.innerHTML = 'Description['+description+']:<span style="padding-left: 18px"><input type="text" name="description2['+description+']" size="50"></span> <input type="button" value="X" onClick="delDescription(\'DivDescription'+description+'\')"><br>';
        DivDescription.appendChild(DivNewDescription);
        description++;

        var DivPlateNumber = document.getElementById('platenumber');
        var DivNewPlateNumber = document.createElement('div');
        DivNewPlateNumber.setAttribute("id","DivPlateNumber"+platenumber);
        DivNewPlateNumber.innerHTML = 'Plate Number['+platenumber+']:<span style="padding-left: 5px"><input type="text" name="platenumber['+platenumber+']" size="50"></span> <input type="button" value="X" onClick="delPlateNumber(\'DivPlateNumber'+platenumber+'\')"><br>';
        DivPlateNumber.appendChild(DivNewPlateNumber);
        platenumber++;

        var DivRefTask = document.getElementById('reftask');
        var DivNewRefTask = document.createElement('div');
        DivNewRefTask.setAttribute("id","DivRefTask"+reftask);
        DivNewRefTask.innerHTML = 'Task Name['+reftask+']:<span style="padding-left: 20px"><input type="text" name="reftask['+reftask+']" size="50"></span> <input type="button" value="X" onClick="delRefTask(\'DivRefTask'+reftask+'\')"><br>';
        DivRefTask.appendChild(DivNewRefTask);
        reftask++;

}

E este é o que supostamente guarda os valores para serem guardados na base de dados:

$reg2 = new Task;

/*$reg2->SetIdProject($IdProject);
$reg2->SetIdClient($IdClient);*/
$reg2->SetNameTask($taskname);
$reg2->SetDescription($description2);
$reg2->SetPlateNumber($platenumber);
$reg2->SetRefTask($reftask);


$error2 = $reg2->NewTask();

E esta é a funçao que faz o INSERT:

function NewTask($IdClient, $IdProject)
	{
		$stmt = $this->dbh->prepare("INSERT INTO task (NAME_TASK, DESCRIPTION, PLATE_NUMBER, REF_TASK) 
		VALUES (?, ?, ?, ?)");

		$stmt->bindParam(':taskname', $this->NameTask);
		$stmt->bindParam(':description2', $this->Description2);
		$stmt->bindParam(':platenumber', $this->PlateNumber);
		$stmt->bindParam(':reftask', $this->RefTask);
		$data = array(1, ':taskname', ':description2', ':platenumber', ':taskname');
		$this->dbh->execute($stmt, $data);

todos os codigos tem ficheiros separados. Se alguem puder dar-me umas indicações de como faço para gravar os arrays na base de dados eu agradecia :)

e quando faço:

print_r($taskname);
print_r($description2);
print_r($platenumber);
print_r($reftask);

tenho como resultado:

Array ( [0] => fe [1] => mi ) Array ( [0] => lipe [1] => guel ) Array ( [0] => 32 [1] => 43 ) Array ( [0] => 21 [1] => 54 ) 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diokhan    1
diokhan

já resolvi o problema pessoal. E desde já agradeço a ajuda de todos. Se quiserem que eu coloque a solução é só dizer que eu coloco aqui o código :)

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade