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

diokhan

Vários forms e apenas um ficheiro PHP

28 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não implica ter de usar vários formulários. Se têm todos a mesma estrutura, basta dar nomes diferentes aos inputs.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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). :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes colocar aqui um exemplo...um bocado de codigo para eu perceber melhor a ideia..se nao for muito incomodo e obrigado  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@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);

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

segunda feira quando voltar po trabalho vou experimentar e depois digo algo..obrigado pela ajuda :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SQL injections podem ser prevenidas por php, não é necessário usar PDO. Para bom programador, meia duzia de linhas de código bastam :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o problema é que eu tenho de seguir ordens do meu chefe..e ele quer com pdo e quer com pdo..e la tenho eu de adaptar-me ao que ele quer :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é por isso que se torna mais complicado, aliás, a filosofia do PDO é tornar as coisas mais simples ..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ) 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :)

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