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

SLIFE

[Encerrado] Nao Actualiza!

53 mensagens neste tópico

Boas

Já consegui colocar as ligações das base de dados ao meu site!

Estava complicado.

Mas com a ajuda do pessoal, consegui.

Agora surgiu-me um outro problema que me deixou  um pouco atrapalhado.

Eu na minha maquina tenho o sistema principal a funcionar bem.

Testo e nao me dá erros e funciona como eu queria:

Insere, Altera, e Elimina.

No Host, aparece tudo muito bem, mas depois existe uma parte que nao funciona.

Eu consigo Inserir na boa, fica tudo bem.

Consigo apagar na boa!

Mas quando faço para alterar, ai surge o problema.

Pois ele esta a actualizar, mas em vez de colocar os textos que tenho nas txtfields, coloca a string vazia.

Depois se for directamente á base de dados tenho lá os registos, mas todos aqueles que fiz alterar, estão com tres ou quatro campos a banco.

Isto está a deixar-me baralhado pois com o sistema em minha maquina, ele esta a funcionar bem.

Altero e fica tudo bem.

O codigo que tenho para alterar é:

<?php
if(@$_GET['btn'] == "alterar"){
$tipoloja = @$_POST["tipoloja"];
$localidade = @$_POST["localidade"];
$tipopedido = @$_POST["tipopedido"];
$estadopedido = @$_POST["estadopedido"];
$avaria = @$_POST["avaria"];
$observacoes = @$_POST["observacoes"];
$datapedido = @$_POST["datapedido"];
$horapedido = @$_POST["horapedido"];

$id = $_GET["id"];
$atualizar = mysql_query("UPDATE assistencias SET tipoloja='$tipoloja', localidade='$localidade',
estadopedido='$estadopedido', avaria='$avaria', observacoes='$observacoes',
tipopedido='$tipopedido' WHERE id = '$id'");


print"
<META HTTP-EQUIV=REFRESH CONTENT='0; URL=pagina_principal.php'>
<script type=\"text/javascript\">
alert(\"Dados alterados com sucesso.\");
</script>
";
}
  ?>

Vem alguma coisa de mal aqui?? Que possa estar a causar este problema!

Cumprimentos

SLIFE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porquê colocaste @$_POST['adsgsdg'] ?

Experimenta tirar os @.

Coloquei o @$_POST['dwdde']

Porque estava a dar um erro aqui na minha maquina.

E pesquisei na net, e diziam para coloxar o @ antes do erro, que iria resolver.

Aqui na minha maquina resolveu.

Por isso nao esperava que fosse causar problemas no host.

Mas existe possibilidade de se este o codigo que está mal?

É que tenho outras partes com a mesma situação e está a funcionar, por exemplo na pagina de inserir.

Edit: Experimentei e resolveu.... Ja actualiza.

Obrigado

Mas então nao se pode por o sinal de @?????

Mais uma vez obrigado.

Cumprimentos

SLIFE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Os @ são os operadores de error suppression -> http://pt2.php.net/operators.errorcontrol

Em princípio só poderiam ser usados em funções, porque numa simples atribuição de valor de uma variável para outra, não estou a ver a possibilidade de ocorrer qualquer tipo de erro (ainda mais com a flexibilidade que o PHP tem nos tipos de variáveis). para além disso, a utilização desse operador põe em causa a performance do script.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Os @ são os operadores de error suppression -> http://pt2.php.net/operators.errorcontrol

Em princípio só poderiam ser usados em funções, porque numa simples atribuição de valor de uma variável para outra, não estou a ver a possibilidade de ocorrer qualquer tipo de erro (ainda mais com a flexibilidade que o PHP tem nos tipos de variáveis). para além disso, a utilização desse operador põe em causa a performance do script.

Ok

Percebi.

Nao fazia a minima ideia.

Sou novo nisto.

Já agora só mais uma pergunta, existe alguma maneira de deixar uma textarea ou uma textfield desactivadas?

Isto é, nao poderem escrever dentro delas.

Por exemplo em vb, basta colocar textbox1.enabled = false

Se fizer isto, a text fica visivel, mas nao editavel.

Como faço isso em Php?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que é que acontece se, no campo avaria, eu introduzir

'; delete from assistencias --

Edit: http://xkcd.com/327/

======================

A tua pergunta do textarea não é exactamente PHP, mas podes usar "disabled" ou "readonly" na textarea. Se precisas de mais informação mete a pergunta no quadro de Dúvidas e Ajudas do HTML/XHTML e especifica qual a versão de HTML/XHTML que estás a usar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há pouco faltou esta informação que é importante:

Os @ nunca resolvem nenhum erro, apenas ocultam a mensagem de erro.

Podes usa-los por vários motivos sendo que o mais frequente é mesmo a estética de um site.

o próximo passo já foi aqui deixado como dica pelo pmg, tens que sanear os dados para evitar ataques. Uma boa leitura para começar está no nosso wiki, em bom português:

http://wiki.portugal-a-programar.org/revistaprogramar_arquivo:11_edicao:vulnerabilidades_em_aplicacoes_web

Off-topic:

ROTFL @ xkcd

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há pouco faltou esta informação que é importante:

Os @ nunca resolvem nenhum erro, apenas ocultam a mensagem de erro.

Podes usa-los por vários motivos sendo que o mais frequente é mesmo a estética de um site.

o próximo passo já foi aqui deixado como dica pelo pmg, tens que sanear os dados para evitar ataques. Uma boa leitura para começar está no nosso wiki, em bom português:

http://wiki.portugal-a-programar.org/revistaprogramar_arquivo:11_edicao:vulnerabilidades_em_aplicacoes_web

Off-topic:

ROTFL @ xkcd

Vou ler o que me dizes!

Mas ja fiquei a saber para que serve o @ antes das variaveis.

So mais uma coisa, tenho uma tabela onde irá aparecer os diversos campos existentes numa determinada tabela.

Como posso colocar cores nas diversas linhas que iram surgir? Tipo linha sim, linha nao com cor.

Existe alguma maneira de se poder fazer isso?

Cumprimentos

SLIFE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
$impar = true;
while (_fetch_) {
  if ($impar == true) {
    $cor = '#cc42ff';
    $impar = false;
  } else {
    $cor = '#42ffcc';
    $impar = true;
  }
  echo '<tr background-color="', $cor, '">';
  /* ... */
  echo '</tr>';
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$impar = true;
while (_fetch_) {
  if ($impar == true) {
    $cor = '#cc42ff';
    $impar = false;
  } else {
    $cor = '#42ffcc';
    $impar = true;
  }
  echo '<tr background-color="', $cor, '">';
  /* ... */
  echo '</tr>';
}

Boas

Ja agora diz-me uma coisa onde coloco esse codigo?

E que coloquei por baixo da sql que tenho, e ficou a dar erro!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aquilo é pseudo-php, pelo que é apenas um esboço do que tens de fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
So mais uma coisa, tenho uma tabela onde irá aparecer os diversos campos existentes numa determinada tabela.

Como posso colocar cores nas diversas linhas que iram surgir? Tipo linha sim, linha nao com cor.

Tens que adaptar o código pseudo-php ao teu código.

Suponho que no teu código estás a imprimir "<tr>" para cada linha do SELECT.

Tens que alterar cada um desses "<tr>" para levar uma cor diferente em linhas impares e pares.

O meu código pseudo-php identifica as linhas impares e pares e imprime o "<tr>" com um background-color diferente (talvez fosse melhor dar-lhe uma classe diferente).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que adaptar o código pseudo-php ao teu código.

Suponho que no teu código estás a imprimir "<tr>" para cada linha do SELECT.

Tens que alterar cada um desses "<tr>" para levar uma cor diferente em linhas impares e pares.

O meu código pseudo-php identifica as linhas impares e pares e imprime o "<tr>" com um background-color diferente (talvez fosse melhor dar-lhe uma classe diferente).

Boas

Estive a tentar de diversas maneiras, mas surge sempre erros.

Se poderes dá uma vista de olhos no codigo que tenho e diz-me onde coloco o codigo que me falas-te!

O meu codigo esta assim:

<?
$dados = mysql_query("SELECT id, opcao1,opcao2, opcao3, date_format(opcao3, '%d/%m/%Y') as opcao3,
opcao4 FROM opcao5 where opcao2= 'Aberto' or opcao3= 'Incompleto' ORDER BY opcao3,
opcao4 DESC ",$basedados);
while($linha = mysql_fetch_array($dados)){ 

?>
  <tr>
    <td><span class="style9">
      <?=$linha['opcao1']?>
    </span></td>
    <td><span class="style9">
      <?=$linha['opcao2']?>
    </span></td>
    <td><span class="style9">
      <?=$linha['opcao3']?>
    </span></td>
    <td><span class="style9">
      <?=$linha['opcao4']?>
    </span></td>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
<?php

/* inicializa class */
$class = 'par';

$dados = mysql_query(...);
while ($linha = mysql_fetch_array($dados)) {

  /* troca class par para impar e vice-versa */
  if ($class == 'par') $class = 'impar';
  else $class = 'par';

?>
  <tr class="<?php echo $class; ?>"><span class="style9">
/* ... */

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<?php

/* inicializa class */
$class = 'par';

$dados = mysql_query(...);
while ($linha = mysql_fetch_array($dados)) {

  /* troca class par para impar e vice-versa */
  if ($class == 'par') $class = 'impar';
  else $class = 'par';

?>
  <tr class="<?php echo $class; ?>"><span class="style9">
/* ... */

Boas

Experimentei o codigo que me deste mas nao esta a funcionar bem!

Nao percebi o porque, mas nao apareceu cores nas linhas e ficou tudo desconfigurado.

O que estou a fazer mal?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimentei o codigo que me deste mas nao esta a funcionar bem!

Nao percebi o porque, mas nao apareceu cores nas linhas e ficou tudo desconfigurado.

O que estou a fazer mal?

Não apareceu cores nas linhas porque não tens definido o estilo para as classes "impar" e "par".

Não faço ideia porque é que ficou tudo desconfigurado. A única diferença em termos de output do script é que na versão original ele imprime

<tr>

e com as alterações propostas passa a imprimir

<tr class="impar">

mantendo todo o resto na mesma.

A não ser que o script já use uma variável $class para outra coisa qualquer ... Tens que averiguar se é esse o caso e/ou mudar o nome da variável da nova versão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não apareceu cores nas linhas porque não tens definido o estilo para as classes "impar" e "par".

Não faço ideia porque é que ficou tudo desconfigurado. A única diferença em termos de output do script é que na versão original ele imprime

<tr>

e com as alterações propostas passa a imprimir

<tr class="impar">

mantendo todo o resto na mesma.

A não ser que o script já use uma variável $class para outra coisa qualquer ... Tens que averiguar se é esse o caso e/ou mudar o nome da variável da nova versão.

Estive a ver todo o codigo e nao tenho nenhuma variavel class atribuida.

Apenas a que criei agora quando tu disses-te!

Como atribuo as cores a class??

Tambem nao percebi porque ficou tudo desconfigurado.

Se quiseres posto o codigo com alteração que disseste para fazer para ver se descobres o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para dares outro aspecto às linhas com classe "impar" e "par" defines o estilo que queres.

Se todas as tuas páginas (que têm essa tabela) usam o mesmo ficheiro .css basta acrescentar as classes "impar" e "par" lá.

Se preferires especificar o estilo dentro da página propriamente dita, defines o estilo na própria página.

O estilo seria qualquer coisa como:

tr.impar { background-color: #f7cccc; color: black; }
tr.par { background-color: #ccccf7; color: black; }

Se mudares o ficheiro .css basta-te acrescentar as duas linhas em qualquer parte do ficheiro.

Se queres meter na página propriamente dita, tens de alterar o <head></head>, assim

<head>
<!-- mantens tudo o que já existe -->
<!-- e acrescentas os estilos -->
<style type="text/css">
tr.impar { background-color: #f7cccc; color: black; }
tr.par { background-color: #ccccf7; color: black; }
</style>
</head>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para dares outro aspecto às linhas com classe "impar" e "par" defines o estilo que queres.

Se todas as tuas páginas (que têm essa tabela) usam o mesmo ficheiro .css basta acrescentar as classes "impar" e "par" lá.

Se preferires especificar o estilo dentro da página propriamente dita, defines o estilo na própria página.

O estilo seria qualquer coisa como:

tr.impar { background-color: #f7cccc; color: black; }
tr.par { background-color: #ccccf7; color: black; }

Se mudares o ficheiro .css basta-te acrescentar as duas linhas em qualquer parte do ficheiro.

Se queres meter na página propriamente dita, tens de alterar o <head></head>, assim

<head>
<!-- mantens tudo o que já existe -->
<!-- e acrescentas os estilos -->
<style type="text/css">
tr.impar { background-color: #f7cccc; color: black; }
tr.par { background-color: #ccccf7; color: black; }
</style>
</head>

Boas já funciona, consegui com o que me disseste para colocar as cores.

E já não aparece desconfigurado.

Acho que estava a colocar uma linha no local errado.

Muito Obrigado pela ajuda.

Agora não querendo parecer chato nem inconveniente, queria só te perguntar mais duas coisas:

1ª Como posso fazer para se um campo na base de dados tiver determinado texto, por exemplo Aberto, apareça a vermelho, Incompleto a Amarelo e Concluído a verde.

2ª Como faço para poder colocar um contador do numero de linhas que tenho apenas onde um determinado campo tenha a coluna Aberto escrito.

Desculpa se estiver a abusar.

Um abraço

SLIFE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas já funciona, consegui com o que me disseste para colocar as cores.

E já não aparece desconfigurado.

Acho que estava a colocar uma linha no local errado.

Muito Obrigado pela ajuda.

Agora não querendo parecer chato nem inconveniente, queria só te perguntar mais duas coisas:

1ª Como posso fazer para se um campo na base de dados tiver determinado texto, por exemplo Aberto, apareça a vermelho, Incompleto a Amarelo e Concluído a verde.

2ª Como faço para poder colocar um contador do numero de linhas que tenho apenas onde um determinado campo tenha a coluna Aberto escrito.

Fixe. Ainda bem que já funciona como queres :P

1) Eu faria isso com classes.

Não sei bem onde queres essas cores, mas suponhamos que é nas letras.

.aberto { color: red; }
.incompleto { color: yellow; }
.concluido { color: green }

Depois no código PHP só tens que especificar a classe para o elemento que leva esses textos

$class = 'aberto'; /* default */
if ($valor_da_base_de_dados == 'Incompleto') $class = 'incompleto';
if ($valor_da_base_de_dados == 'Concluído') $class = 'concluido';
/* ... */
echo '<span class="', $class, '">', $valor_da_base_de_dados, '</span>';

2) Huh? Não percebo o que queres. Talvez isto?

$contador_de_linhas = 0;
/* ... */
while (/* ... */) {
  /* ... */
  if ($campo_ou_coluna == 'Aberto') $contador_de_linhas++;
  echo $contador_de_linhas;
  /* ... */
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porquê colocaste @$_POST['adsgsdg'] ?

Experimenta tirar os @.

Boas

O projecto da minha pagina, já estava a funcionar bem. Desde que me disses-te para retirar os @, ficou a actualizar os dados.

Mas entretanto fiz alteração para colocar cores nas linhas como no exemplo aqui postado, e ficou bonito, e funcionar na minha maquina, mas assim que enviei para o servidor deixou de actualizar novamente.

Estive a ver a base de dados, e a pagina actualizar esta a escrever lá, mas em vez de colocar o que escrevo para alterar, coloca os campos sem nada.

Isto é limpa os campos! Já estou farto de procurar na instrução de SQL que tenho o UPDATE, mas está tudo normal, como deveria estar, pelo menos penso eu.

O que poderá estar a fazer-me isto á pagina?

<?php
if($_GET['btn'] == "alterar"){
$tipoloja = $_POST["tipoloja"];
$localidade = $_POST["localidade"];
$tipopedido = $_POST["tipopedido"];
$estadopedido = $_POST["estadopedido"];
$avaria = $_POST["avaria"];
$observacoes = $_POST["observacoes"];
$datapedido = $_POST["datapedido"];
$horapedido = $_POST["horapedido"];

$id = $_GET["id"];
$atualizar = mysql_query("UPDATE assistencias SET tipoloja='$tipoloja', localidade='$localidade',
estadopedido='$estadopedido', avaria='$avaria', observacoes='$observacoes',
tipopedido='$tipopedido' WHERE id = '$id'");


print"
<META HTTP-EQUIV=REFRESH CONTENT='0; URL=pagina_principal.php'>
<script type=\"text/javascript\">
alert(\"Dados alterados com sucesso.\");
</script>
";
}
  ?> 

Uma ajudinha por Favor.

Um abraço

SLIFE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta ver o SQL propriamente dito:

/* ... */
$id = $_GET["id"];
$sql = "UPDATE assistencias SET tipoloja='$tipoloja', localidade='$localidade',
estadopedido='$estadopedido', avaria='$avaria', observacoes='$observacoes',
tipopedido='$tipopedido' WHERE id = '$id'";
exit('O SQL que seria executado é <<b>' . $sql . '</b>>');
$actualizar = mysql_query($sql);
/* ... */

E reparo numa coisa interessante no teu código:

o 'id' e o 'btn' vêem dum GET, as outras variáveis vêem dum POST.

Não está nada errado com isso, mas não é costume fazer-se as coisas assim :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta ver o SQL propriamente dito:

/* ... */
$id = $_GET["id"];
$sql = "UPDATE assistencias SET tipoloja='$tipoloja', localidade='$localidade',
estadopedido='$estadopedido', avaria='$avaria', observacoes='$observacoes',
tipopedido='$tipopedido' WHERE id = '$id'";
exit('O SQL que seria executado é <<b>' . $sql . '</b>>');
$actualizar = mysql_query($sql);
/* ... */

E reparo numa coisa interessante no teu código:

o 'id' e o 'btn' vêem dum GET, as outras variáveis vêem dum POST.

Não está nada errado com isso, mas não é costume fazer-se as coisas assim :)

Achas que devo experimentar o código como descreves em cima?

Eu tenho um id e btn a vir através de um GET e o restante a vir através de um POST, porque era assim que estava no exemplo que tirei da net onde existia acesso a dados.

Mas se estiver mal, posso alterar. Só precisava de saber para o que?

Por acaso não tens nenhuma pagina ou algo que faça a conexão a uma base de dados onde insira, apague e altere?

Para estudo! Estava a pensar comprar um livro, acho que se chama GUIA PRATICO DREAMWEAVER CS3.

Achas que me pode ajudar? Ou apenas me vai explicar a funcionar com os assistentes do Dreamweaver?

Abraço

SLIFE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, experimenta o código. Quando já não for preciso veres o SQL podes muito facilmente voltar ao código anterior já que a alteração para 'debugging' é pequena.

Por acaso não tens nenhuma pagina ou algo que faça a conexão a uma base de dados onde insira, apague e altere?

Por acaso não. Mas acho também que deves começar por perceber como é que o HTML (no cliente) e o PHP (no servidor) conseguem "falar" um com o outro.

Não conheço o Dreamweaver, nem o livro de que falas, por isso não sei se ajuda a perceber PHP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SLIFE, também não conheço o livro, mas pelo nome ("Guia prático"), acredito que apenas te ensine os essenciais, e quase de certeza que é com recurso aos assistentes.

Já usei os assistentes de gerar uma página de login em PHP, e bem, aquilo gera com cada código, que a manutenção e personalização fica muito limitada! Mais vale fazeres um "à patinha" e guardares para futuros sistemas. Não só para logins, mas também é válido para inserts, deletes, etc.

E não te esqueças que aprender PHP não é aprender a mexer no Dreamweaver. Eu não sei sequer metade das funcionalidades e assistentes do Dreamweaver, mas consigo fazer o que pretendo em PHP.

Se achas que os tutorais que podes encontrar com o Google não são suficientes, procura por um bom livro dedicado a PHP. Faz uma pesquisa no fórum, porque acho que existem para aí uns livros que o pessoal recomenda.

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