Ir para conteúdo

Arquivado

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

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 :)

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

  • Conteúdo Similar

    • Por Jack Oliveira
      Bom dia galera
      Preciso de uma ajuda, preciso separar numero usando explode eu ja tentei e não deu certo
      pesquisei tambem e não achei nada a respeito apenas separa os que esta ex:12,23./55
      quero separar uns numero que estão juntos ex: 90 fazer ficar 9 0
      <? //Valores com Desconto $ValorA = '99,90'; $ValorA = explode(',',$ValorA); //$ValorB = explode(' ','90'); $ValorB = explode('','90'); echo '<div class="value-component"> <p class="value-text"><span>por</span></p> <p class="value-caractere">R$</p> <p class="value-1">'.$ValorA[0].'</p> <p class="value-small">,'.$ValorB[0].'<span>'.$ValorB[1].'</span></p> <p class="value-year"><span>/mês</span></p> </div>'; /* se eu deixar direto dentro do html aqui ex: <p class="value-small">,'.$ValorA[1].'<span></span></p> os numero fica fora do padrão do que é pra ser entende? Então para ficar padronizado terá que ficar assim <p class="value-small">,'.$ValorB[0].'<span>'.$ValorB[1].'</span></p> */ ?>  
    • Por JurisCode
      Eu criei um código que faz o seguinte:
       
      Ele pega siglas de uma tabela de dados e apresenta apenas as siglas constantes entre as variáveis $origem e $destino.
       
      Depois eu faço um explode e pesquiso cada sigla em outra tabela, procurando o que significa aquela sigla.
       
      Faço um foreach e dentro do foreach um select na tabela que tem o significado de cada sigla (tabela cidades)
       
      peço para imprimir na tela, mas imprime só o último resultado. Onde como faço para aparecer todos?
      if ($_COOKIE['user'] == 0) { ?> <!-- parte que vaia aparecer quando o usuário não estiver logado --> <?php  }  elseif ($_COOKIE['user'] > 0 && $origem == " " && $destino == " ")  { ?> <!-- Esta parte vai aparecer só quando o usuário estiver logado. vAI CRIAR UM FORMULÁRIO DE BUSCA-->     <section id='about' class="s-about">         <div class="row section-header has-bottom-sep" data-aos="fade-up">             <div class="col-full">                 <h3 class="subhead subhead--dark">PROCURAR CARONAS</h3>                 <h1 class="display-1 display-1--light">Você está procurando uma carona</h1>             </div>         </div> <!-- end section-header -->         <div class="row about-desc" data-aos="fade-up">             <div class="col-full">                 <p>                 No formulário abaixo selecione as cidades de origem e de destino - O sistema vai identificar qual a direção em que você está pretendendo ir e vai listar as rotas possíveis.                 </p>         <p align="center"> <?php $sql = 'SELECT id, sigla, cidade FROM cidades order by cidade'; $result = $conn->query($sql); echo '<form method=get action="#about"><SELECT name="origem" style="font-size: 25px; font-weight: bold; display: inline-block;">'; if ($result->num_rows > 0) {     while($row = $result->fetch_assoc()) {         echo '<OPTION value="' . $row["sigla"]. '">' . $row["cidade"] . '</option>';               }} else {               echo "0 results";               }               echo '</select> | '; $result = $conn->query($sql); echo '<SELECT name="destino" style="font-size: 25px; font-weight: bold; display: inline-block;">'; if ($result->num_rows > 0) {     while($row = $result->fetch_assoc()) {         echo '<OPTION value="' . $row["sigla"]. '">' . $row["cidade"] . '</option>';               }} else {               echo "0 results";               }               echo '</select> <Input type="submit" value="Procurar"> </form>'; ?>             </div>         </div> <!-- end about-desc -->          <!-- end about-stats -->         <div class="about__line"></div>     </section> <!-- end s-about -->       </p> <!-- Final da parte de procurar caronas --> <?php  } elseif (!empty($_GET['origem']) && !empty($_GET['destino'])) { <!-- ESTA PARTE É O RESULTADO DA BUSCA FEITA PELO FORMUÁRIO --> $origem = $_GET['origem']; $destino = $_GET['destino']; $sql = "SELECT * FROM rotas WHERE rota LIKE '%$origem%$destino%' limit 2"; $result = $conn->query($sql); echo utf8_encode('<section id=about" class="s-about"> <div class=col-full> <P>A descrição do trajeto abaixo apresenta TODA A LINHA. Para escolher a melhor linha, observe a partir do seu ponto de partida. Caso queira, você pode ainda clicar em cada rota para ver por onde cada rota passa</p>'); if ($result->num_rows > 0) {     while($row = $result->fetch_assoc()) {         echo '<p style="background-color: #000000; color: #FFFFFF;">' . utf8_encode($row['descricao']) . ' - ';         $rotatotal = $row['rota'];         $positioni = mb_strpos($rotatotal, $origem);         $positionf = mb_strpos($rotatotal, $destino);         $totalstr = mb_strlen($rotatotal);         $rotaescol = mb_substr($rotatotal, $positioni, $positionf - $positioni + 2);         $rotarray = explode(' ', $rotaescol);         foreach($rotarray as $ct);         {         $sql2 = "SELECT * FROM cidades WHERE sigla = '$ct'";         $rescit = $conn->query($sql2);         if ($rescit->num_rows > 0) {         while($row2 = $rescit->fetch_assoc()) {         echo ' - '. $row2['cidade'];         }}         else{         echo '';         }         }}}               } else {               echo '<section id="about" class="s-about">0 resultsNão era para estar aparecendo isto."</section>';               }               echo '</div></section> | '; <!-- FINAL DO SCRIPT -->  
    • 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!
×

Informação importante

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