• 0
Sign in to follow this  
fabiosanches

Recursividade

Question

bom.. o que eu to querendo é o seguinte.. eu tenho um campo em uma tabela que é auto increment um campo cod.. e esse campo ele é apenas mostrado quando eu vou abrir uma nova OS.. porém eu deveria no caso mostrar esse campo ou seja. já que ele ainda não foi inserido na base então eu não tenho o valor dele ainda.. ai eu to querendo fazer tipo uma função que vai varrer toda a tabela pegar o ultimo valor desse campo COD e adicionar +1

algo +- asim

while($row=mysql_fetch_row($sql))
{
     $cod='$row[i]';
     $cod=$cod+1;
}

como que ficaria a forma certa em php?? eu tenho ate uma noção meio logica mais passando ela pro php eu acabei me complicando um pouco.. aguardo retorno

abraços

Share this post


Link to post
Share on other sites

20 answers to this question

Recommended Posts

  • 0

Se você tiver uma tabela assim:

id   |   Nome
--------------
1    |  Nome 01
2    |  Nome 02
Poderá pegar o valor do campo id desta forma:
$sql = mysql_query("Select * From tabela");
while ($x = mysql_fetch_array ($sql)){
  $id = $x['id'];
  $id_novo = $#id + 1;
}

http://br2.php.net/manual/pt_BR/function.m...fetch-array.php

[]'s

Share this post


Link to post
Share on other sites
  • 0

Beraldo,

deu certinho.. e deixa eu te fazer uma pergunta.. eu tenho um campo da minha tabela que eu vo precisar utilizar mais de 255 caracteres.. qual tipo que eu posso colocar nesse campo.. eu li algo sobre utilizar blob.. o que seria esse tipo de campo blob e pra que que ele é utilizado normalmente e porque??

abraços

Share this post


Link to post
Share on other sites
  • 0

O campo blob é semelhante ao text. O varchar só aceita até 255 caracteres mesmo, então use o campo text ou blob.

Segundo o Manual:

A única diferença entre os tipos BLOB e TEXT é que ordenação e comparação são realizadas no modo caso-sensitivo para valores BLOB e no modo caso-insensitivo para valores TEXT. Em outras palavras, um TEXT é um BLOB no modo caso-insensitivo. Nenhum caso de conversão é feito durante um o armazenamento ou recuperação.

Fonte: http://dev.mysql.com/doc/refman/4.1/pt/blob.html

[]'s

Share this post


Link to post
Share on other sites
  • 0

Beraldo.. eu vi uma vez um script que ele ia listanto os dados de uma determinada tabela dentro de uma tabela ( visualização ) e de acordo com que ia mostrando os dados ele ia alterando a cor da tabela você conheçe.. ou então como que eu faço para que de acordo com que os dados sejam listados eles apareçam dentro de campos em tabela. ou seja cada linha do banco de dados crie uma linha na minha tela assim que seja listada..

Share this post


Link to post
Share on other sites
  • 0

Depende de como você quer fazer essa modificação de cores. Você pode usar duas cores e ir alterando-as conforme o número da linha for par ou ímpoar. Nesse caso, você pode criar a variável $x com o valor 0 e, dentro do while, ir aumentando seu valor em uma unidade. Daí você diferencia a cor da linha, conforme o número for par (ao dividir por 2, o resto é nulo - use o operador %) ou ímpar.

[]'s

Share this post


Link to post
Share on other sites
  • 0

bom eu entendi a ideia.. na hora de colocar na linha de comando que complica um pouco.. mais tudo bem.. em relação a cor é o de menos.. o que eu mais preciso é que dentro do while de acordo com cada linha ele va gerando uma linha de tabela e colocando os dados dentro dela.. e ordenando dessa forma.. :(

resumindo.. o meu while esta assim:

<?   $sql_1 = mysql_query("select * from oserv") or die ("ERRO NA SQL1");  
         while($linha=mysql_fetch_row($sql_1))
         { 
         ?>
      <tr>
        <td><? echo "$linha[0]"; ?></td>
        <td><? echo "$linha[1]"; ?></td>
        <td><? echo "$linha[3]"; ?></td>
        <td><? echo "$linha[4]"; ?></td>
        <td><? echo "$linha[2]"; ?></td>
        <td><? echo "$linha[5]"; ?></td>
        <td><? echo "$linha[13]"; ?></td>
        <td>&nbsp;</td>
      </tr>
    </table>
    <p>&nbsp;</p>
    <?
    }
    ?>

Share this post


Link to post
Share on other sites
  • 0

E qual é o problema? Qual sua dúvida?

Não coloque as variáveis $linha[] entre aspas. Faça assim:

echo $linha[13];

você colocou o </table> dentro do while. Tire de lá, pois só deverá ser gerada uma vez.

[]'s

Share this post


Link to post
Share on other sites
  • 0

beraldo.. mais uma vez eu estou tendo problemas com o uptade.. aquele outro eu tbn não consegui resolver.. e olha o arquivo inteiro que eu vou mandar

de acordo com o arquivo.. é apenas uma pagina para alterar senha de um determinado usuario.. que é passado via url.. $cod e $user1.. ai eu estou verificando esse usuario.. selecionando apenas o campo senha da tabela dele e verifica a senha atual, $satual, a nova senha $nsenha e repete a senha nova para conferencia $rsenha, e insere no banco o $nsenha, porem ele não atualiza o banco por NADA DESSE MUNDO.. :( tem algum comando ai que está errado.. porque eu não sei mais o que fazer em relação ao meu update que não funciona de jeito nenhum.. :(

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Mudar Senha</title>
<style type="text/css">
<!--
body,td,th {
    color: #000000;
}
body {
    background-color: #CCCCCC;
}
.style2 {color: #0066FF; font-weight: bold; }
-->
</style></head>
 <?
  //conectar no banco
  $conn = mysql_connect("localhost","root","");
  $db = mysql_select_db("os",$conn);
  ?>
<body>

<div align="center">
  <p><strong>Mudar Senha </strong></p>
  <form name="form1" method="post" action="">
    <table width="267" border="0">
      <tr>
        <td width="107"><div align="left" class="style2">Senha Atual.:</div></td>
        <td width="144"><input type="text" name="satual"></td>
      </tr>
      <tr>
        <td><div align="left" class="style2">Nova Senha.: </div></td>
        <td><input type="text" name="nsenha"></td>
      </tr>
      <tr>
        <td><div align="left" class="style2">Repetir Senha.: </div></td>
        <td><input type="text" name="rsenha"></td>
      </tr>
      <tr>
        <td><div align="right">
          <input name="clear" type="submit" id="clear" value="Limpar">
        </div></td>
        <td><div align="left">
          <input name="send" type="submit" id="send" value="Salvar">
        </div></td>
      </tr>
    <?
      $sql=mysql_query("select senha from usuarios where cod='$cod'") or die ("erro ao selecionar o usuario por codigo");
      $senha=$sql;
      if($send)
      {
        if($satual==$senha)
        {
          if($nsenha==$rsenha)
          {
           $sql1=mysql_query("UPDATE usuarios SET senha='$nsenha' WHERE usuarios.cod='$cod'") or die ("erro ao atualizar a senha");
           }
        }
      }
    ?>
    </table>
    <p><?
    // teste de recepção de variaveis
    echo $cod;
    echo $user1;
    ?></p>
  </form>
  <p><strong></strong></p>
</div>
</body>
</html>

Share this post


Link to post
Share on other sites
  • 0

1º -> Você colocou um botão submit para limpar o formulário. Use um botão reset.

2º -> Se cod for numérico, tire as aspas de $cod:

where cod=$cod
3º -> $sql contém um resource. Para pegar o resultado, faça assim:
$sql = mysql_query("select senha from usuarios where cod=$cod");
$senha = mysql_result ($sql, 0);

4º -> Variáveis vindas do formulário devem ser recebidas pelas superglobais $_GET ou $_POST.

5º -> Quase me esqueci disso: você colocou um campo text para a senha; coloque um password, por questões de segurança.

[]'s

Share this post


Link to post
Share on other sites
  • 0

po beraldo.. otimas ajudas.. eu ainda não testei tudo não.. porque preciso tirar algumas duvidas em relação ao que você me passou... no comando $senha = mysql_result ($sql, 0); o numero 0 é correspondente a coluna da tabela? como que eu faço para utilizar o comando $_GET ou $_POST?? na sintaxe mesmo tipo $_GET=$cod???

[]'s

Share this post


Link to post
Share on other sites
  • 0

http://br2.php.net/manual/pt_BR/function.mysql-result.php

O zero significa o primeiro resultado da consulta. Como só retornará um registro, usamos o zero.

$_GET, $_POST, etc são matrizes (arrays).

Pegue o valor do campo através do name.

Exemplo:

$var1 = $_POST['nome_do_campo'];

http://br2.php.net/manual/pt_BR/language.v....predefined.php

[]'s

Share this post


Link to post
Share on other sites
  • 0

Ok.. eu entendi +- o funcionamento dele. porém eu to com uma duvida que é o seguinte.. eu to passando o parametro tipo www.itamil.com.br/index.php?user=$fabio entendeu? eu passo a variavel $fabio.. e depois como que eu puxo ela com o $_GET... porque eu quero puxar o usuario logado no momento para fazer essa alteração.. e eu esto passando o parametro dakela forma acima.. nesse exemplo claro.. qual seria a utilização do $_GET se ele busca um determinado campo da tabela sendo que eu quero que ele busque um campo previamente utilizado e armazenado em variavel como o usuario que nesse caso eu já armazenei em uma variavel $fabio por exemplo.. :( mals aí enxer o saco mais eu não to sacando muito bem isso não.. :(

Share this post


Link to post
Share on other sites
  • 0

Supondo a URL index.php?id=5&x=98&y=0014&zzp=6, poderemos pegar os valores das variáveis desta forma:

$var1 = $_GET['id']; // $var1 recebe o valor 58
$var2 = $_GET['x']; // $var2 recebe o valor 98
$var3 = $_GET['y']; // $var3 recebe o valor 0014
$var4 = $_GET['zzp']; // $var4 recebe o valor 6
Para fazer uma busca no banco, basta fazer assim:
mysql_query ("Select * From tabela Where id = ".$id);

Share this post


Link to post
Share on other sites
  • 0

beraldo.. no comando $senha=mysql_result($sql,0); que você me passou.. so repassando em relação aos numeros la..0 ou 1 por exemplo.. isso significa o que? como ele so vai me trazer um resultado.. ou seja.. um valor so que é o campo senha, porem se eu fosse puxar mais valores.. como seria?? tipo.. o que significa eu colocar o numero 2 la nele por exemplo... eu nem estarei utilizando isso de imediato não.. é apenas para base de conheçimento.. Ah.. e o meu update esta 100% acredito que fosse o mysql_result e o meu cod que estava entre aspas.. :D muito obrigado. :D

Share this post


Link to post
Share on other sites
  • 0

Aquele número representa a linha retornada. Quando executamos uma consulta, podemos receber várias linhas, que podem conter vários campos (registros).

  id   |  usuario   |  senha
  1    |  admin     |  123
  2    |   admin2  | 234
Nessa tabela, há duas linhas, cada uma com três colunas. ;) Nesse caso, estamos pegando a primeira linha. Se você colocar 2, pegará a terceira linha. Se você fizesse um Select pegando todos os campos, poderia usar o mysql_result() assim:
$usuario = mysql_result ($sql, 0, 'usuario');
$senha = mysql_result ($sql, 0, 'senha');

O terceiro parâmetro é o nome da coluna. Como você selecionou apenas a senha, nem precisa colocar o nome da coluna.

Sacou? :D

[]'s

Share this post


Link to post
Share on other sites
  • 0

beleza pura.. esse meu problema já esta sanado.. eu já ate trabalhei em cima dele de outras formas e ficou perfeito.. porem já pintou outro.. hahaha quando eu listo todas as minhas ordens de serviço.. que que acontece.. eu quero colocar 2 botoes dentro de uma determinada coluna da tabela.. um ira alterar, que ira pegar pelo menos o codigo $cod correspondente a ele ( na mesma linha ) e o outro um botao delete que ira apagar o registro correspondente ao mesmo $cod.. porém não esta dando certo o delete ( o alterar eu nem tentei ainda.. hehe ) e olha como que eu to fazendo ( vide codigo ) eu tentei colocar dentro do while.. so que ele apagou todos os registros.. hehehe da uma olhadinha assim que você tiver tempo por favor..

[]'s

<?
//conectar no banco
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("os",$conn);
?>
<body>
<div align="center">
  <p><strong>Ordens de Servi&ccedil;o </strong></p>
  <form name="form1" method="post" action="">
  <table width="531" border="1">
      <tr>
        <td width="61"><div align="center" class="style1">
          <div align="center">N&ordm; da O.S </div>
        </div></td>
        <td width="97"><div align="center" class="style1">
          <div align="center">Depto.</div>
        </div></td>
        <td width="68"><div align="center" class="style1">
          <div align="center">Categoria</div>
        </div></td>
        <td width="71"><div align="center" class="style1">
          <div align="center">Solicitante</div>
        </div></td>
        <td width="37"><div align="center" class="style1">
          <div align="center">Data</div>
        </div></td>
        <td width="35"><div align="center" class="style1">
          <div align="center">Hora</div>
        </div></td>
        <td width="51"><div align="center" class="style1">
          <div align="center">Status</div>
        </div></td>
        <td width="52"><div align="center"><span class="style1">Alterar</span></div></td>
        <td width="36"><div align="center"><span class="style1">Excluir</span></div></td>
      </tr>
   <?   $sql_1 = mysql_query("select * from oserv") or die ("ERRO NA SQL1");  
         while($linha=mysql_fetch_row($sql_1))
         { 
         ?>
      <tr>
        <td><? echo $linha[0]; ?></td>
        <td><? echo $linha[1]; ?></td>
        <td><? echo $linha[3]; ?></td>
        <td><? echo $linha[4]; ?></td>
        <td><? echo $linha[2]; ?></td>
        <td><? echo $linha[5]; ?></td>
        <td><? echo $linha[13]; ?></td>
        <td><input name="alterar" type="submit" id="alterar" value="Alterar"></td>
        <td><input name="del" type="submit" id="del" value="Apagar"></td>
      </tr>
       <?
        }
    if($del)
    {
     $sql=mysql_query("delete from oserv where oserv.cod=$linha[0]") or die ("Erro ao Apagar o Item da Tabela");
    }
    ?>
</table>  
  </form>
</div>
</body>
</html>

Share this post


Link to post
Share on other sites
  • 0

Foi mal a demora pela resposta. É que o vestibular está próximo e as aulas e provas estão sendo quase todos os dias e o dia todo... :huh:

Mas vamos ao que interessa:

Tente assim:

if (isset($_POST['apagar'])){
  //ações para apagar
}

if (isset($_POST['del'])){
  //ações para alterar
}
Da forma como você está fazendo, o "correto" é gerar um formilário para cada código, ou seja, colocar o form dentro do while. Eu acho melhor você usar links em vez de botões, passando o código pela URL e pegando-o por $_GET, para fazer a consulta/deleção. Seria mais ou menos assim:
while($linha=mysql_fetch_row($sql_1))
         {
         ?>
      <tr>
        <td><? echo $linha[0]; ?></td>
        <td><? echo $linha[1]; ?></td>
        <td><? echo $linha[3]; ?></td>
        <td><? echo $linha[4]; ?></td>
        <td><? echo $linha[2]; ?></td>
        <td><? echo $linha[5]; ?></td>
        <td><? echo $linha[13]; ?></td>
        <td><a href="pagina.php?act=apagar&cod=<?php echo $linha[0]; ?>">Apagar</a></td>
        <td><a href="pagina.php?act=alterar&cod=<?php echo $linha[0]; ?>">Alterar</a></td>
      </tr>
       <?
        }

Daí você verifica se act tem excluir ou apagar, e faz a ação determinada, pegando o valor de cod na URL.

[]'s

Share this post


Link to post
Share on other sites
  • 0

no caso então dentro desse arquivo eu iria criar mais 2 forms com os act deles setados para um determinado arquivo? ou eu gero 2 arquivos distintos sendo que um deles irá alterar os dados ( esse eu acho que tem que ser um arquivo novo mesmo ) e o outro arquivo deletando e com um script que retorna a paginal anterior?? pode ser feito dessa forma?

beraldo.. to com um problema referente a textarea.. eu tenho um campo textarea aqui que quero que ele receba um determinado valor $linha[6] porém eu coloco para dar um echo $linha[6] na propriedade value dele, porem.. adivinha?? haha o textarea continua vazio na hora que eu vo visualizar ele.. :( o que pode estar acontecendo.. lembrando que essa $linha[6] na minha tabela é do tipo BLOB.. e a minha linha de comando esta a seguinte..

<textarea name="desc" cols="60" rows="10" value="<? echo "$linha[6]"; ?>"></textarea>

sendo que eu tbn já usei o echo sem aspas.. :(

Share this post


Link to post
Share on other sites
  • 0

no caso então dentro desse arquivo eu iria criar mais 2 forms com os act deles setados para um determinado arquivo? ou eu gero 2 arquivos distintos sendo que um deles irá alterar os dados ( esse eu acho que tem que ser um arquivo novo mesmo ) e o outro arquivo deletando e com um script que retorna a paginal anterior?? pode ser feito dessa forma?

Para excluir, não é necessário um formulário, então você vai gerar um form somente se o usuário clicar em "alterar".

Uma página é suficiente. Exemplo:

pagina.php

$x = $_GET['act'];

if ($X == "excluir"){
  // "Delete From tabela Where id = $_GET['id'];
}

if ($x == "alterar"){
  // aqui você gera o formulário para a alteração de dados.
}
beraldo.. to com um problema referente a textarea.. eu tenho um campo textarea aqui que quero que ele receba um determinado valor $linha[6] porém eu coloco para dar um echo $linha[6] na propriedade value dele, porem.. adivinha?? haha o textarea continua vazio na hora que eu vo visualizar ele.. :( o que pode estar acontecendo.. lembrando que essa $linha[6] na minha tabela é do tipo BLOB.. e a minha linha de comando esta a seguinte.. <textarea name="desc" cols="60" rows="10" value="<? echo "$linha[6]"; ?>"></textarea> sendo que eu tbn já usei o echo sem aspas.. :(
A tag textarea não possui o atributo value. Como ela tem abertura e fechamento, faça assim:
<textarea cols="30" rows="1" name="texto">
<?php
echo $linha[6];
?>
</textarea>

[]'s

Share this post


Link to post
Share on other sites
  • 0

beraldo.. da uma olhadinha aqui nesse if e vê qual o erro do update.. eu não to conseguindo encontrar e tem uma outra tela que tem a mesma ideia do update porém a outra funciona e esse daki não funciona.. cai sempre no OR DIE e mostra akela mensagem que esta escrita.. o que mais pode ser?? se for preciso eu te mando o codigo inteiro mais por enquanto toma so o if..

[]'s

<?

if($send)

{

$sql4=mysql_query("update oserv set data='$dt',hora='$hr',desc='$descr' where cod=$cod1") or die ("Erro ao alterar a OS");

?>

<script language="JavaScript" type="text/javascript">

window.location="minhas_os.php";

</script> <?

}

?>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this