Atualizar várias linhas de uma tabela a partir de formulário

618 views
Skip to first unread message

Ederson

unread,
Oct 5, 2009, 1:11:29 AM10/5/09
to LISTA PHP
Olá pessoal,

Estou com uma dúvida... Procurei no Google, nos sites de PHP e aqui no
grupo mas não encontrei.

Desenvolvo um site e ele tem uma área administrativa em que eu
controlo diversas propriedades do site como TÍTULO, KEYWORDS,
DESCRIPTION entre outras.

Esses valores estão salvos em uma tabela (options) do banco de dados
MySQL da forma semelhante a baixo:
id name value
1 titulo Ekilíbrio
.
.
.
5 description Equipe de dança
6 keywords dança, ekilibrio
7 refresh 1800
.
.
10 adm_link 1
11 adm_text Administrar
12 under_construction Site ainda em Construção

Por meio de um formulário, o administrador tem acesso à essas
informações para altera-las se bem o quiser.
Minha dúvida é como eu salvo essas alterações que o administrador fez
pois para o MySQL saber em qual linha ele deverá salvar, ele precisa
saber o id dessa linha.. mas como eu pego esse id se cada uma linha
possui informações diferenciadas.

Esse é o melhor jeito para se criar uma tabela de opções do site?

Obrigado.

tiago-orion

unread,
Oct 5, 2009, 6:44:17 AM10/5/09
to LISTA PHP
Olá amigo,

você pode fazer o seguinte: Quando for exibir as opções para serem
editadas buscar também o id de cada opção e inserir no html num input
type="hidden" e no nome do campo use um array, por exemplo:
digamos que os valores já foram pegos no banco e estão no array
$opçoes;
então poderia fazer algo como:
<?php
foreach($opcoes as $opt)
{
?>
<input type="text" name="option['<?php $opt[id']; ?>']" id="options"
value="<?php $opt['value']?>" /><br>
<?
}
?>

Assim se este formulario for enviado por POST, voce terá do outro lado
a variavel $_POST na forma:

$_POST = array(
'option' => array(
1 => 'ekilibrio' ,
5 => 'equipe de dança',
etc...
)

Mas não acho essa maneira que voce está usando para gravar essas
opções a melhor não.
Se forem menos de 10 opções diferentes, por exemplo, ainda vale a pena
criar só uma tabela no banco, com os campos titulo, description,
keywords, refresh, etc.

Falow.

Daniel Maffioletti

unread,
Oct 5, 2009, 8:00:42 AM10/5/09
to list...@googlegroups.com
Amigão, eu fiz assim semana passada...
Ajustei meu id com zero a esquerda, para que todos fiquem com 4 casas.
A variável $num_inscricao é o meu id. Usei um switch para nivelar o número de inscrições

            $num = strlen( $aDados['id_inscricao'] );
            switch( $num )
            {
                case "1" :
                    $num_inscricao = "000" . $aDados['cod_ficha'];
                    break;
           
                case "2" :
                    $num_inscricao = "00" . $aDados['cod_ficha'];
                    break;
                   
                case "3" :
                    $num_inscricao = "0" . $aDados['cod_ficha'];
                    break;
               
                default :
                    $num_inscricao = $aDados['cod_ficha'];
            }

No HTML, ou seja, na linha da tabela eu identifiquei da seguinte forma.

echo "<td id='txt_parcela_" . $num_inscricao . "' align='center' bgcolor='". $tdcor2 ."' style='font-size:10px'>". $aDados['txt_parcela'] ."</td>";

echo "<td id='vlr_despesa_" . $num_inscricao . "' align='center' bgcolor='". $tdcor2 ."' style='font-size:10px'>". $aDados['vlr_despesa'] ."</td>";

echo "<td id='vlr_liquido_" . $num_inscricao . "' align='center' bgcolor='". $tdcor2 ."' style='font-size:10px'>". $aDados['vlr_liquido'] ."</td>";

Usei um Javascript para pegar o valor da linha e através do innerHTML eu criei input type='text' e coloquei o valor da linha da td dentro do input que foi criado dinamicamente.

Exemplo:

function changeFields( id )
{
    //pega o valor da td...
    dt_extrato = document.getElementById( "dt_extrato_"+ id ).innerHTML;

    //cria uma input type dinâmico e atribui o valor
    document.getElementById( "dt_extrato_"+ id ).innerHTML = "<input type='text' name='dt_extrato_"+ id +"' id='txt_dt_extrato_"+ id +"' value='"+ dt_extrato +"' size='8' />";
}


Abaixo o PHP que na hora do submit, pega todas as linhas que foram criados dinamicamentes os input's

    foreach( $_POST as $sCampo => $sValor )
    {
            #EXTRAI O ID DA STRING (Ex.: dt_extrato_0256)
            $id = substr( $sCampo , -4 );

            #REMOVE O ID + UNDERLINE DA STRING
            $sFields = substr( $sCampo , 0 , -5 );

            #VERIFICA SE A PRIMEIRA LETRA É IGUAL AO (d).
            if( $sFields[0] == 'd' )
            {
                #SE FOR VERDADEIRO AJUSTA A DATA PARA O PADRÃO MYSQL (2009-10-27)
                $sValor = $oInscricao->formatar_data( $sValor , 'put' );
            }

            #AJUSTA A STRING ($sql) PARA ATUALIZAR
            $sql = "UPDATE tb_inscricao SET " . $sFields . "='". $sValor ."' WHERE cod_ficha = " . $id;

            #EXECUTA O UPDATE
            $oMysql->qry( $sql ) or die ( mysql_error( ) . " :: " . $sql );
    }




2009/10/5 tiago-orion <tiago...@live.com>



--
Daniel Maffioletti
(61) 9151-4622 / 3459-8304
www.d2mm.com.br
Brasília-DF

Ederson

unread,
Oct 7, 2009, 4:06:02 AM10/7/09
to LISTA PHP
Obrigado pelas sugestões...
optei por fazer a busca do id de cada campo exibido no bd e joga-lo
num input hidden.
Deu certo...

Entretanto, qdo vou criar a instrução para atualizar, através do
UPDATE, não está funcionando. Dei uma pesquisada mas não descobri o
problema... Alias.. descobri sim! só não descobri como resolve-lo.

O problema é que eu tenho q criar várias instruções para o sql com o
comando UPDATE como está abaixo:

GRAVA_PROPRIEDADES.PHP
<?php require_once ("includes/config.php");

/*Pega as variaveis do formulario*/
$titulo = $_POST ['titulo'];
$keywords = $_POST['keywords'];
$descricao = $_POST['description'];
$refresh = $_POST['refresh'];
$link_adm = $_POST['link_adm'];
$link_adm_text = $_POST['adm_text'];
$copy = $_POST['copy'];
$copy_text = $_POST['copy_text'];
$bg_adm = $_POST['bg_adm'];
$uc = $_POST['uc'];
$dist_paragrafos = $_POST['dist_par'];
$id_titulo = $_POST['id_titulo'];
$id_keywords = $_POST['id_keywords'];
$id_description = $_POST['id_description'];
$id_refresh = $_POST['id_refresh'];
$id_link_adm = $_POST['id_link_adm'];
$id_adm_text = $_POST['id_adm_text'];
$id_copy = $_POST['id_copy'];
$id_copy_text = $_POST['id_copy_text'];
$id_bg_adm = $_POST['id_bg_adm'];
$id_uc = $_POST['id_uc'];
$id_dist_par = $_POST['id_dist_par'];

/*Inicia gravacao de dados no DB*/
$sql = "
UPDATE options SET value = $titulo WHERE id = $id_titulo LIMIT 1;
UPDATE options SET value = $keywords WHERE id = $id_keywords LIMIT 1;
UPDATE options SET value = $descricao WHERE id = $id_description LIMIT
1;
UPDATE options SET value = $refresh WHERE id = $id_refresh LIMIT 1;
UPDATE options SET value = $link_adm WHERE id = $id_link_adm LIMIT 1;
UPDATE options SET value = $link_adm_text WHERE id = $id_adm_text
LIMIT 1;
UPDATE options SET value = $copy WHERE id = $id_copy LIMIT 1;
UPDATE options SET value = $copy_text WHERE id = $id_copy_text LIMIT
1;
UPDATE options SET value = $bg_adm WHERE id = $id_bg_adm LIMIT 1;
UPDATE options SET value = $uc WHERE id = $id_uc LIMIT 1;
UPDATE options SET value = $dist_paragrafos WHERE id = $id_dist_par
LIMIT 1;
";

$pqs = mysql_query($sql);
if(!$pqs){
echo "<script> alert('Ocorreu um erro ao realizar as atualizações.
Tente novamente.')
location = ('propriedades.php');
</script>";
}else{
echo "<script> alert('Dados atualizados com sucesso!')
location = ('propriedades.php');
</script>";
}
?>

Quando eu executo, ele retorna erro... mas se eu coloco 1 instrução
ele realiza.
Desculpem se é uma pergunta muito idiota... mas não achei resposta nos
mecanismos de busca (leia-se Google =D)
Mais uma vez obrigado...


On 5 out, 09:00, Daniel Maffioletti <dmaffiole...@gmail.com> wrote:
> Amigão, eu fiz assim semana passada...
> Ajustei meu id com zero a esquerda, para que todos fiquem com 4 casas.
> A variável $num_inscricao é o meu id. Usei um switch para nivelar o número
> de inscrições
>
>             $num = strlen( $aDados['id_inscricao'] );
>             switch( $num )
>             {
>                 case "1" :
>                     $num_inscricao = "000" . $aDados['cod_ficha'];
>                     break;
>
>                 case "2" :
>                     $num_inscricao = "00" . $aDados['cod_ficha'];
>                     break;
>
>                 case "3" :
>                     $num_inscricao = "0" . $aDados['cod_ficha'];
>                     break;
>
>                 default :
>                     $num_inscricao = $aDados['cod_ficha'];
>             }
>
> *No HTML, ou seja, na linha da tabela eu identifiquei da seguinte forma.*
>
> echo "<td id='txt_parcela_" . $num_inscricao . "' align='center' bgcolor='".
> $tdcor2 ."' style='font-size:10px'>". $aDados['txt_parcela'] ."</td>";
>
> echo "<td id='vlr_despesa_" . $num_inscricao . "' align='center' bgcolor='".
> $tdcor2 ."' style='font-size:10px'>". $aDados['vlr_despesa'] ."</td>";
>
> echo "<td id='vlr_liquido_" . $num_inscricao . "' align='center' bgcolor='".
> $tdcor2 ."' style='font-size:10px'>". $aDados['vlr_liquido'] ."</td>";
>
> *Usei um Javascript para pegar o valor da linha e através do innerHTML eu
> criei input type='text' e coloquei o valor da linha da td dentro do input
> que foi criado dinamicamente.*
> 2009/10/5 tiago-orion <tiago_mo...@live.com>

Rodrigo Corrêa e Castro

unread,
Oct 7, 2009, 8:53:22 AM10/7/09
to list...@googlegroups.com
Num seria isso no UPDATE:

UPDATE options SET titulo="$titulo",keywords="$keywords.'" WHERE id="$id_do_registro"

Rodrigo Corrêa e Castro
Web Developer

MSN: rcc...@hotmail.com
Twitter: http://twitter.com/rccjjf
Gtalk: rodrigocor...@gmail.com
Skype: rodrigocorreaecastro

24 9839-2129
24 3421-1956


"ECONOMIZE PAPEL - PENSE ANTES DE IMPRIMIR!"


2009/10/7 Ederson <edersons...@gmail.com>
Reply all
Reply to author
Forward
0 new messages