Ir para conteúdo
mldiogo87

Comparar array de explode

Recommended Posts

Boa tarde galera,

Por favor, me ajudam a desenvolver uma lógica para meu script.

 

Tenho um campo no BD que conterá várias palavras separadas por , (virgula). Estou usando explode para exibi-las separadamente, por array. Até ai esta tudo ok.

Precisaria, porém, que ao cadastrar novas palavras, neste mesmo campo ele verificasse se já não existe uma palavra igual. Ex:

CAMPO PALAVRAS CONTÉM CARRO, MOTO, BICICLETA

 

Vou cadastrar novas palavras neste mesmos campo: CAVALO, CARRO. Neste cadastro apenas inseriria a palavra CAVALO, considerando já existir a palavra carro.

 

Obrigado!!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua modelagem está pecando pela normalização de dados.

 

Para verificar alguns exemplos de como resolver, leia os seguintes tópicos:

http://pt.stackoverflow.com/questions/178342/para-cada-resultado-uma-nova-linha-no-php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse caso, dependerá de como você irá tratar. Fazer o certo ou a gambiarra?

 

Você até pode fazer por PHP, mas estará perdendo perfomance e integridade (além de ser uma gambiarra e um "pecado" com o SGBD). E, na realidade, com o PHP também será mais complexo do que ter uma boa modelagem de dados.

 

Com o PHP:

  • Retornar dados;
  • explode;
  • verificar se o registro já existe;
  • inserir o registro caso não existe.

Com SGBD + cláusula UNIQUE:

  • Inserir no SGBD (se o registro já existir, será avisado).

Entendeu a diferença?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer uma gambiarra:

<?php
class Registros
{
 private $valoresBanco;
 private $novoValor;
 private $erro;
 private $inserir;
 
 public function receberValores() {
  $this->setValoresBanco("BICICLETAS,CARROS,MOTOS,AVIÕES,VANS,ANIMAIS,PESSOAS"); 
  $this->setNovoValor("CARROS");
 }
  
  
 public function separarValores() {
  $this->setValoresBanco(explode(",", $this->getValoresBanco())); 
 }
  
  
 public function dispararErro() {
    $this->setErro(1);
 }
      
      
 public function verificarValores() {
  for ($x = 0; $x < count($this->getValoresBanco()); $x++) {
   		if ($this->getNovoValor() == $this->getValoresBanco()[$x]) {
         	 $this->dispararErro();
                 
        } 
  }
    $this->inserirNovoValor();
 }
      
      
 public function inserirNovoValor() {
  if ($this->getErro()) {
    echo "Este valor já existe!";
  } else {
      array_push($this->valoresBanco, $this->getNovoValor());
  }
 }
      
 public function setValoresBanco($v) {
  $this->valoresBanco = $v; 
 }
      
 public function getValoresBanco() {
  return $this->valoresBanco; 
 }
 
 public function setNovoValor($n) {
   $this->novoValor = $n; 
 }
      
 public function getNovoValor() {
   return $this->novoValor;
 }
      
 public function setInserir($i) {
  $this->inserir = $i; 
 }
 
 public function getInserir() {
  return $this->inserir; 
 }
 public function setErro($e) {
  $this->erro = $e; 
 }
 public function getErro() {
  return $this->erro; 
 }
      
}
      
$valores = new Registros();
$valores->receberValores();
$valores->separarValores();
$valores->verificarValores();

 

Lembrando que você terá que sempre adicionar um novo valor após virgula e até quando a aplicação vai continuar sem bugs? Até quando você vai ter 5 valores?
Aconselho você criar uma tabela CATEGORIAS e adicionar as mesmas lá.

Para verificar da maneira correta:

<?php
$this->setPdo($this->con->prepare("SELECT * FROM......"));
$this->execute();

if ($this->getPdo()->rowCount() > 0) {
	return false;
} else {
    return true;
}


// SE FOR FALSO ELE NÃO INSERE, SE FOR VERDADEIRO ELE INSERE...

 

Veja a diferença :)

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu entendi o que você quer, me parece bem simples!

# Você disse que a lista de palavras você já tem, que neste exemplo
# vou chamar de $palavrasDoBanco

$palavrasDoBanco = 'São Paulo,Rio de Janeiro,Minas';
$novaPalavra = 'Parana';

if (!strpos($palavrasDoBanco, $novaPalavra)) {
    $palavrasDoBanco .= ',' . $novaPalavra;
}

echo $palavrasDoBanco; // Ira exibir: São Paulo,Rio de Janeiro,Minas,Parana

# Agora basta atualizar a coluna do banco. 
#update Tabela set colunaComPalavrasSeparadasPorVirgula = $palavrasDoBanco where id = ?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por RogérioSilva
      Alguém pode me ajudar? To pesquisando como fazer isso, mas não acho de jeito nenhum,
      Queria jogar os links assim, no campo 
      http://site1.com/embed1/CODIGO http://site2.com/embed2/CODIGO http://site3.com/embed3/CODIGO http://site4.com/embed4/CODIGO e retornasse assim
      <a href="http://site1.com/embed1/CODIGO">SITE1</a> <a href="http://site2.com/embed2/CODIGO">SITE2</a> <a href="http://site3.com/embed3/CODIGO">SITE3</a> <a href="http://site4.com/embed4/CODIGO">SITE4</a> Alguém sabe algo que pudesse me ajudar?
    • Por Julio Cavallari
      Tenho uma função que utiliza a API Youtube v3 do Google para buscar vídeos, e preciso transformar o retorno que ele me envia da duração do vídeo que é em formato ISO8601 para o padrão HH:MM:SS.
       
      O retorno que tenho é o seguinte "PT1H9M58S"
      Onde PT sempre vai existir na string;
      1H será as horas, nesse caso é 1 hora;
      9M será os minutos, no caso são 9 minutos;
      E 58S será os segundos, nesse caso 58 segundo.
       
      A minha dificuldade é que esse tipo de formato não mantém os número que "não existem" na duração. Por exemplo se eu capturar um vídeo de '1:00:09' o retorno será PT1H9S, não terá a parte dos minutos.
       
      Qual a maneira mais fácil de eu transformar essa string em '1:09:58'?
    • Por iDownloadi
      Então ,  estou com um problema pos ,    nao consigo fazer  alterar o botão!   EXEMPLO!
      <?php $id = $_GET['id']; mysqli_select_db($ConnectDB, $database_ConnectDB); $query_SetaProdutos = "SELECT * FROM produto WHERE id = '$id'"; $SetaProdutos = mysqli_query($ConnectDB, $query_SetaProdutos) or die(mysqli_error()); $row_SetaProdutos = mysqli_fetch_assoc($SetaProdutos); $totalRows_SetaProdutos = mysqli_num_rows($SetaProdutos); $idc = $_GET['id']; $pagina = $row_SetaProdutos['pagina']; $rodape = $row_SetaProdutos['rodape']; $preco = $row_SetaProdutos['preco']; $end = explode (",", $preco); $mudaprecoa = explode('<span class="int">', $pagina); $mudaprecoa = explode("</span>",$mudaprecoa[1]); $mudaprecoa = $mudaprecoa[0]; $mudaprecoa2 = $end[0]; $mudaprecoan = str_replace($mudaprecoa, $mudaprecoa2, $pagina); $mudaprecod = explode('<span class="dec">', $mudaprecoan); $mudaprecod = explode("</span>",$mudaprecod[1]); $mudaprecod = $mudaprecod[0]; $mudaprecod2 = ",".$end[1]; $mudaprecodn = str_replace($mudaprecod, $mudaprecod2, $mudaprecoan); $tirapar = explode('<span class="payment-installment-amount" itemprop="">', $mudaprecodn); $tirapar = explode('<span class="payment-installment-condition">',$tirapar[1]); $tirapar = $tirapar[0]; $tirapar2 = "10x <span>"; $tiraparn = str_replace($tirapar, $tirapar2, $mudaprecodn); $pegabt = explode('<div class="buybox-actions buybox-container clearfix"><button class="button-success button-pill right buy-button buy-button-product fluid" data-departmentid="4833" data-categoryid="4835" data-subcategoryid="4845"><i class="wm-icon icon-cart-button icon-buy-button"></i><span class="btn-label">Adicionar ao carrinho</span></button></div', $tiraparn); $pegabt = explode('>',$pegabt[1]); $pegabt = $pegabt[0]; $pegabt2 = ""; $pegabtn = str_replace($pegabt, $pegabt2, $tiraparn); $mudabt = '<div class="buybox-actions buybox-container clearfix"><button class="button-success button-pill right buy-button buy-button-product fluid" data-departmentid="4833" data-categoryid="4835" data-subcategoryid="4845"><i class="wm-icon icon-cart-button icon-buy-button"></i><span class="btn-label">Adicionar ao carrinho</span></button></div>'; $mudabt2 = "<form action='carrinho.php' method='post' name='carrinho'><p align='right'><input type='hidden' name='id' value='$idc'/><a onclick='javascript:document.carrinho.submit();' href='#' ><img src='https://image.prntscr.com/image/HVkWd1FeSEOtOnShD7QIWA.png' /></a></form>"; $mudabtn = str_replace($mudabt, $mudabt2, $pegabtn); $tirabaner = explode('<div class="payment-sell-wrapper notifyme">', $mudabtn); $tirabaner = explode('</div>',$tirabaner[1]); $tirabaner = $tirabaner[0]; $tirabaner2 = ""; $tirabanern = str_replace($tirabaner, $tirabaner2, $mudabtn); $mudabtavisa = '<input class="btn btn-send btn-warning" value="Avise-me" type="submit" name="notifymeButtonSend" />'; $mudabtavisa2 = ""; $mudabtavisan = str_replace($mudabtavisa, $mudabtavisa2, $tirabanern); ?> antes ele mudava o botão ,  que localiza na string acima,  pos agora ela n muda  porem , o preço , ele alterar de boa ,  mais o botão! ja tentei de varias formas  e não muda ,  queria uma ajuda o mais rapido possivel!
    • Por wneo
      Olá!
      Pessoal, preciso somar os valores vindos da tabela...
      Por exemplo,
      *Tenho 2 tabelas:
      -Produtos e budget;
      -Ao criar um budget, escolho os produtos e salvo o id de cada um separado por virgula em um campo da budget;
       
      1-Receber os valores em um foreach, pq eles estavam agrupados por vírgula em um campo;
      2-Exibir individualmente esses valores ($valor_cobrado);
      3-Somar e exibir na tela o total, que é a soma desses valores.
       
      O 1 e 2 já estão ok....
      <form class="form_budget" id="form_update_budget"> <?php while($row = mysql_fetch_array($rs_budgets)){ $id_budget = $row['id_budget']; $id_produto = $row['id_produto']; $nome_budget = $row['nome_budget']; ?> <fieldset> <legend align="left"><?php echo $nome_budget; ?></legend> <li> <label><span>Choosed products</span></label> <?php $prepara_resultado= explode(",", $id_produto); foreach($prepara_resultado as $newvalue){ $sql_produto_escolhido="SELECT * FROM produtos WHERE id_produto='$newvalue'"; $prepara_resultado = mysql_query($sql_produto_escolhido); $row = mysql_fetch_assoc($prepara_resultado); $id_produto_escolhido = $row['id_produto_escolhido']; $nome_produto_escolhido = $row['nome_produto']; $valor_cobrado = $row['valor_cobrado']; ?> <b><?php echo $nome_produto_escolhido; ?>(R$<b class="<?php echo $id_produto_escolhido; ?>_valor_produto"><?php echo $valor_cobrado; ?></b>) </b> - <?php }//end foreach explode ?> </li> <li> <label><span>Valor total</span></label> <b class="valor_total"></b> </li> <button>Abrir</button> </fieldset> <?php }//end while budgets ?> </form> ....Alguém consegue chegar no 3?????
    • Por omor
      Erro ao usar explode
       
      if(isset($_POST['check'])){ $opcao = $_POST['check']; $opcoes_esc = explode(',' ,$opcao); echo $opcoes_esc; } está dando esse erro Warning: explode() expects parameter 2 to be string, array gi in
×

Informação importante

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