Ir para conteúdo

Arquivado

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

michelmir

PHP PDO Ajax CRUD com INNER JOIN

Recommended Posts

Olá a todos, tudo bem?

 

É a minha primeira vez aqui no fórum e gostaria de aproveitar esta oportunidade para poder tirar uma dúvida que tenho. Estou desenvolvendo um projeto em PHP PDO onde o mesmo possui uma tabela onde  adiciono, leio, edito e deleto (CRUD). O meu desenvolvimento esta sendo baseado neste exemplo CRUD.

 

No exemplo citado, estou tentando fazer com que uma coluna FK (Foreing Key) dentro de uma tabela html com plugin DataTable localizada na página index.php mostre o nome do Foreing Key ao invés de mostrar o número ID.

 

Abaixo segue um link onde mostro um rascunho que estou trabalhando baseado no exemplo citado acima: Rascunho CRUD.

 

Este CRUD possui a seguinte estrutura:

 

1. Tabela users:

 

image.png.f6e4ab082e010442cd9f2bc1814ea564.png

 

2. Tabela tipo_ps:

 

image.png.df1d0c7c17fb65c9d49928e9d0ec628b.png

 

3. Relacionamento entre a tabela users e a tabela tipo_ps:

 

image.png.0d74a97d839e928ea78fb66f0d87a265.png

 

4. Um arquivo chamado fetch.php onde o mesmo é responsável por "juntar" todos os dados da tabela MySql users e mostra-las na tabela html localizada na página index.php.

 

<?php
include('db.php');
include('function.php');
$query = '';
$output = array();
$query .= "SELECT users.*, tipo_ps.tipo
FROM users
INNER JOIN tipo_ps ON users.tipo_fk = tipo_ps.tipo_id;  ";

if(isset($_POST["search"]["value"]))
{
 $query .= 'WHERE first_name LIKE "%'.$_POST["search"]["value"].'%" ';
 $query .= 'OR last_name LIKE "%'.$_POST["search"]["value"].'%" ';
}
if(isset($_POST["order"]))
{
 $query .= 'ORDER BY '.$_POST['order']['0']['column'].' '.$_POST['order']['0']['dir'].' ';
}
else
{
 $query .= 'ORDER BY id DESC ';
}
if($_POST["length"] != -1)
{
 $query .= 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}
$statement = $connection->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$data = array();
$filtered_rows = $statement->rowCount();
foreach($result as $row)
{
 $image = '';
 if($row["image"] != '')
 {
  $image = '<img src="upload/'.$row["image"].'" class="img-thumbnail" width="50" height="35" />';
 }
 else
 {
  $image = '';
 }
 $sub_array = array();
 $sub_array[] = $image;
 $sub_array[] = $row["first_name"];
 $sub_array[] = $row["last_name"];
 $sub_array[] = $row["tipo_fk"];
 $sub_array[] = '<button type="button" name="update" id="'.$row["id"].'" class="btn btn-warning btn-xs update">Update</button>';
 $sub_array[] = '<button type="button" name="delete" id="'.$row["id"].'" class="btn btn-danger btn-xs delete">Delete</button>';
 $data[] = $sub_array;
}
$output = array(
 "draw"    => intval($_POST["draw"]),
 "recordsTotal"  =>  $filtered_rows,
 "recordsFiltered" => get_total_all_records(),
 "data"    => $data
);
echo json_encode($output);
?>

 

Dentro deste arquivo fetch.php contém uma query sql INNER JOIN ao qual eu uso para que a mesma selecione os dados na tabela users e tipo_ps e mostre o nome do ítem ao invés do ID do mesmo:

SELECT users.*, tipo_ps.tipo
FROM users
INNER JOIN tipo_ps ON users.tipo_fk = tipo_ps.tipo_id;

Também, no arquivo fetch.php, apenas adicionei um sub array que corresponde a coluna FK "tipo_fk":

 $sub_array = array();
 $sub_array[] = $image;
 $sub_array[] = $row["first_name"];
 $sub_array[] = $row["last_name"];
 $sub_array[] = $row["tipo_fk"];
 $sub_array[] = '<button type="button" name="update" id="'.$row["id"].'" class="btn btn-warning btn-xs update">Update</button>';
 $sub_array[] = '<button type="button" name="delete" id="'.$row["id"].'" class="btn btn-danger btn-xs delete">Delete</button>';
 $data[] = $sub_array;

Após eu ter inserido esta sub array dentro do arquivo fetch.php, é mostrado na tabela html na página index.php a ID da coluna relacionada tipo_fk (Rascunho CRUD) porém quando substituo tipo_fk dentro do arquivo fetch.php por apenas tipo $sub_array[] = $row["tipo"];, é me retornado um DataTable Error Mesage. Invalid JSON response.

 

No caso acredito que a query INNER JOIN que inseri esta correta porém não estou conseguindo identificar onde devo alterar dentro do arquivo fetch.php. Eu devo mudar o código PHP PDO no arquivo fetch.php?

 

Desde já agradeço a atenção de todos. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, seja bem vindo ao fórum.

 

Evite o anexo de arquivos para download. Como a ideia do fórum é compartilhar conhecimento, no futuro, o link de download pode não estar mais disponível. Para isso, o fórum possui a tag de código para adicionar diretamente o seu código. Caso for muito grande o código, pode adicionar a tag de spoiler em conjunto:

 

Spoiler

//Código dentro da tag de spoiler

 

 

 

Eu não consigo abrir o link para download (devido à restrições de rede). Mostre-nos como está criando o JSON.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é o texto gerado pelo código abaixo?

echo json_encode($output);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Giovanird
      O script abaixo atualiza a página (centro.php) a cada um minuto e dentro desta página terei uma div que não poderá ser atualizada.
      Tentei colocar esta div como pagina com setInterval de 100 minutos porem ao dar o refresh no centro.php  tudo vai junto.  Será que isto é possivel?

      Desde já meu muito obrigado!
      <script> function atualiza(){ var url = 'centro.php'; $.get(url, function(dataReturn) { $('#centro').html(dataReturn); }); } setInterval("atualiza()",60000); </script>  

    • Por ILR master
      Fala pessoal, tudo bem?
       
      Eu tenho um dominio e vários subdomios dentro.
      Quero saber como recuperar um cookie nos subdominios, uma vez que ele foi criado em um subdominio específico.
       
      Estrutura:
      Tô criando o cookie em usuario.dominio.com.br com o seguinte código:
       
      $valor = md5(uniqid(rand(), true));
      setcookie("token", $valor, time() + (60 * 10), "/", "www.dominio.com.br");
       
      Porém, quero recuperar esse valor em todos os outros subdominios, mas esse codigo aí não tá funcionando.
       
      Alguém pode ajudar?
      Valeu
       
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

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