Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wneo

UPDATE reorganizando ordem numérica, como fazer?

Recommended Posts

Olá!!!

Pessoal preciso fazer com q o update reorganize uma ordem numérica.

- Imaginem que possuo vários registros em uma tabela, e o que define sua ordem de exibição é uma coluna chamada 'ordem'.

- Quando vou exibir, faço o select com o 'order by ordem'. Até aí tudo ok.

- Mas agora, na tela de gestão que criei, preciso oferecer a possibilidade de atualizar essa ordem.

- Então imaginem que tenho 10 registros. Dessa forma a coluna ordem estará 1,2,3,4,5,6,7,8,9,10.

- Agora se o usuário escolher que que o registro 2 deve ser o 1 a ser exibido. então ele fará o update no 2 para 1.

- Então nesse momento teremos dois registros com numero 1. A 'ordem' ficaria 1,1,3,4,5,6,7,8,9,10. Eis o problema...

- Como posso fazer para que o update ocorra de forma progressiva, atualizando a coluna 'ordem' sequencialmente, reorganizando os numeros da forma certa e não duplicá-los, fazendo com q aquele q era 1 virar 2 e assim por diante?

- E se eu precisasse inserir um novo registro nessa situação.. como ficaria o insert?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você envia todos os dados novamente para update? Ou apenas quele que mudou de ordem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Envio somente aquele que mudou de ordem.

- Por exemplo, digamos q a tabela tem as colunas 'produto','categoria,'ordem'.

- Se quero que o 'Produto1' fique na 'ordem3', faço update nele... mas nesse caso, para corrigir meu caso, precisaria ser feito uma operação em todos os registros com base na coluna 'ordem'...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Envie todos já com a nova ordem. Vai te facilitar muito o trabalho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia é boa, poderia ser algo com jquery...

imagino q atraves de campos form option, atualizando onchange...

como poderia ser isso em js, tem noção?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso vai depender de como você realiza a edição da ordem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imaginei em carregar todos da coluna ordem em form select, cada registro em seu select. De 1 a 10 por exemplo.

Então quando quando mudar '.change()' o que tá em 2 pra 3, todos mudarem sua ordem automatica. E quando salvar, realizar o update em todos já ordenados.

Saberia fazer isso em jquery?

...ou pensa em alguma outra forma, diz aí..?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O digitar a ordem é muito subjetivo, faça algo para mover as linhas.

Pronto tem este: https://jqueryui.com/sortable/

Ou construa algo próprio somente com javascript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O digitar a ordem é muito subjetivo, faça algo para mover as linhas.

Pronto tem este: https://jqueryui.com/sortable/

Ou construa algo próprio somente com javascript.

Oi,

gostei desse:

<ul id="sortable">
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
</ul>

Mas como poderia fazer para que o fosse registrado no banco de dados a posição que escolhi..?

por exemplo, arrastei o item1 pra segunda posição, então clico em salvar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque dentro de um formulário com input hidden e utilize os inputs como array, conforme o exemplo no link abaixo:

http://forum.imasters.com.br/topic/462549-resolvidoretornar-array-de-inputs-com-mesmo-nome/?p=1832412

O PHP receberá conforme a ordem que você definiu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque dentro de um formulário com input hidden e utilize os inputs como array, conforme o exemplo no link abaixo:

http://forum.imasters.com.br/topic/462549-resolvidoretornar-array-de-inputs-com-mesmo-nome/?p=1832412

O PHP receberá conforme a ordem que você definiu.

To tentando montar:

<meta charset="utf-8">
<?php  
require("oraculo/conecta/conecta.php");
//require "../oraculo/sessions/session.php";

require "oraculo/sql/sql_global.php";
?>	

<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Sortable - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <style>
  #sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
  #sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
  #sortable li span { position: absolute; ; }
  </style>
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).disableSelection();
  } );
  </script>
</head>
<body>
 
<ul id="sortable">

<?php	
	while($row = mysql_fetch_array($rs_ordenador)){
	$id = $row['id'];
	$titulo = $row['titulo']; 
	$ordem = $row['ordem'];
?>
  <li class="ui-state-default"> 
  <form>
  <input type="hidden" name="ordem[]" value="<?php echo $ordem; ?>"> 
  </form>
  <span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
  <?php echo $titulo; ?>
  </li>
 
<?php
}//end while
?>  
<button type="submit">Salvar</button>
</ul>
 
 
</body>
</html>

To no caminho certo?

caso sim..agora preciso fazer o script de update... ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma vez eu fiz assim, mas faz tempo

Criei o atributo date-id que é id auto-increment

<tr data-id="9"></tr>

<tr data-id="10"></tr>

<tr data-id="11"></tr>

Conforme atualiza as posições pego sequencia conforme arvore DOM.

 $(this.elemento_nome)[i].getAttribute('data-id')

Depois envio as posições separado por virgula que são as IDs, já no php dou explode na virgula, criando o array, depois percorro com foreach e uso o indice "$key" para gerar as novas posições de 0 a *, na coluna order sempre vai ser default 0, fiz isso para ordenar imagem de produto.

Exemplos tem de KG na internet, o esquema ae é só o php mesmo, que é usar a ID e o indice do array que se inicia com a posição zero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma vez eu fiz assim, mas faz tempo

Criei o atributo date-id que é id auto-increment

<tr data-id="9"></tr>

<tr data-id="10"></tr>

<tr data-id="11"></tr>

Conforme atualiza as posições pego sequencia conforme arvore DOM.

 $(this.elemento_nome)[i].getAttribute('data-id')

Depois envio as posições separado por virgula que são as IDs, já no php dou explode na virgula, criando o array, depois percorro com foreach e uso o indice "$key" para gerar as novas posições de 0 a *, na coluna order sempre vai ser default 0, fiz isso para ordenar imagem de produto.

Exemplos tem de KG na internet, o esquema ae é só o php mesmo, que é usar a ID e o indice do array que se inicia com a posição zero.

Gostei da ideia.. mas ainda fiquei perdido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagino uma forma de fazer que seria mais simples, assim:

- Atualmente o Produto x está na posição 7, e decido q ele deve ficar na 3.

- Então o update deveria ocorrer incrementando +1 naquele que era antigamente o 3 até o 6.

vou tentar iniciar o codigo:

<?php

require "conecta.php";

$id_produto_escolhido = $_POST['id'];
$ordem_escolhida = $_POST['ordem'];//essa é a ordem q o usuario escolheu para determinado produto

$up_escolhido = "UPDATE produtos SET ordem = '$ordem_escolhida' WHERE id = '$id_escolhido'";
$rs_escolhido = mysql_query($up_escolhido);

$seleciona_ordem_igual = "SELECT * FROM tabela WHERE ordem='$ordem_escolhida'";
$rs_ordem_igual = mysql_query($seleciona_ordem_igual );

	
	while($row = mysql_fetch_array($rs_ordem_igual)){
	$ordem = $row['ordem'];
        }


###########Agora nessa parte teria que fazer um update com +1,
###########começando por aquele que tem a ordem igual a escolhida até o produto($id_produto_escolhido) 
###########que foi selecionado para mudar de posição. Imagino que seja necessário um for aqui para isso,
###########peço ajuda aí..  




?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

...Enquanto isso, olha como to tentando:

- adicionei 3 registros no banco e estou exibindo assim:

<meta charset="utf-8">
<?php  
require("oraculo/conecta/conecta.php");
//require "../oraculo/sessions/session.php";

require "oraculo/sql/sql_global.php";
?>	

<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Ordenar</title>
  <link rel="stylesheet" href="css/global.css">
 
  
</head>
<body>
 

<?php	
	while($row = mysql_fetch_array($rs_ordenador)){
	$id = $row['id'];
	$titulo = $row['titulo']; 
	$ordem = $row['ordem'];
?>
<li>
<?php echo $titulo; ?>
<form method="post" action="oraculo/form-operation/update/up-ordem.php">
<label></label>
<select name="ordem">
<option value="<?php echo $ordem; ?>" ><?php echo $ordem; ?></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button>Salvar</button>
<input type="hidden" name="id" value="<?php echo $id; ?>">
</form> 
</li> 
<?php
}//end while
?>  
 
</body>
</html> 

- E o update estou fazendo assim:

<meta charset="utf-8">
<?php

require "../../conecta/conecta.php";

$id = $_POST['id'];
$ordem_escolhida = $_POST['ordem'];


$up_igual = "UPDATE ordenador SET ordem = ordem+1 WHERE id != '$id'";
$rs_igual = mysql_query($up_igual);	


$up_escolhido = "UPDATE ordenador SET ordem = '$ordem_escolhida' WHERE id = '$id'";
$rs_escolhido = mysql_query($up_escolhido);	

header("location:../../../index.php");


?> 

- Quando mudo o 3 pra 1, tudo certo, mas quando mudo de 2 pra 1, acaba ficando 1,2,4... =/

e agora...??? como resolver...

Compartilhar este post


Link para o post
Compartilhar em outros sites

- Quando mudo o 3 pra 1, tudo certo, mas quando mudo de 2 pra 1, acaba ficando 1,2,4... =/

e agora...??? como resolver...

Fazendo da forma correta e evitando Gambiarras, assista o vídeo que passei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazendo da forma correta e evitando Gambiarras, assista o vídeo que passei.

hshs.. sim, quero fazer da forma certa sem gambiarra... estou pensando no código pra isso..

vou assistir...

Compartilhar este post


Link para o post
Compartilhar em outros sites

assisti o video, mas ainda não me resolveu...

com esse codigo tá quase.. se alguem conseguir complementar me avisa aí:

<meta charset="utf-8">
<?php

require "../../conecta/conecta.php";

$id = $_POST['id'];
$ordem_escolhida = $_POST['ordem'];


$up_igual = "UPDATE ordenador SET ordem = ordem+1 WHERE id != '$id'";
$rs_igual = mysql_query($up_igual);	


$up_escolhido = "UPDATE ordenador SET ordem = '$ordem_escolhida' WHERE id = '$id'";
$rs_escolhido = mysql_query($up_escolhido);	

header("location:../../../index.php");


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.