Clicar na letra e buscar na tabela

Gostaria de fazer um sistema onde clicássemos numa letra e direcionasse para minha index.php e aparecesse a table com os dados que comessem com a letra clicada.

Primeiro teria uma opção para selecionar a coluna da tabela(MySQL) para procurar:

<div class="op">
	<select name="opcao_filtro" class="form-control" style="width:150px;">
		<option value="nulo">--</option>                
		<option value="titulo">Título</option>
		<option value="autor">Autor</option>
		<option value="tema">Tema</option>
		<option value="editora">Editora</option>
		<option value="indice">Índice</option>
	</select>
</div>

Depois há as Letras:

<a href="url">A</a>
<a href="url">B</a>
<a href="url">C</a>

Crie um formulário de pesquisa da seguinte forma:

<form action="index.php" method="post">
    <div class="op">
    	<select name="opcao_filtro" class="form-control" style="width:150px;">
    		<option value="nulo">--</option>                
    		<option value="titulo">Título</option>
    		<option value="autor">Autor</option>
    		<option value="tema">Tema</option>
    		<option value="editora">Editora</option>
    		<option value="indice">Índice</option>
    	</select>
    </div>
    <div>
        <input type="text" name="opcao_letra" />
    </div>
   <button type="submit">Enviar Pesquisa</button>
</form>

Ao escolher a opção e digitar na caixa de texto clique no botão e no servidor vai receber duas variáveis:

<?php

    $letra = $_POST['opcao_letra'];
    $filtro = $_POST['opcao_filtro'];

Isso é um exemplo simples, porque, falta embasamento no seu questionário.

Não é possível fazer com <a href>?

Dá também, mas, teria que criar uma forma com Javascript, mas, basicamente é:

<a href="index.php?opcao_letra=A&opcao_filtro=titulo">A</a>

mas, dessa forma seria inviável, teria mesmo de proporcionar um algo dinâmico.

Eu prefiro com post mas, nada impede ser com get! Falta contexto na sua pergunta

É que não tenho nenhum exemplo melhor para dar, sou novo em PHP e JavaScript, talvez pode ser que até por estar faltando o “contexto” no meu código xd

1 curtida

Então se pode estar pulando estapa!

Tipo estudar html, css e javascript e depois uma programação Server Side. A programação Web é muito complexa e precisa de um tempo hábil para desenvolvimento… Comece sempre do mais básico para o mais avançado é uma dica.

Eu sei que não é fácil e faculdade realmente não prepara ninguém para o mercado de trabalho, tem que buscar fora! Eu te compreendo.

E se eu colocar 2 opções, colocar um input para buscar por palavras (“exemplo: no meio do título, começo ou fim”) e um outro input para buscar pela primeira palavra/letra?

Encontrei esse tópico onde apresenta a função LIKE, achei que daria pra fazer algo do tipo.

Coloquei o formulário em um Collapse(antes em outra página) achei que ficaria mais fácil na hora de exibir o resultado.

E se você colocar um input do tipo text e um 2 radio para definir a pesquisa? tudo isso em um form com a requisição post!

Veja tem que usar um form por vários motivos um é segurança (não é segurança logo de cara mas, vai ajudar na segurança)!

Ficou assim:

<div class="row">
            <div class="col">
                <div class="collapse multi-collapse" id="form-busca">
                    <div class="card card-body">
                        <form class="form-horizontal" method="POST" action="search.php" method="post">
                             <div class="custom-control custom-radio">
                                 <p>
                                <input type="radio" id="radiotitulo" name="radio-stacked" value="titulo" required> Título</input>
                                 </p>
                                 
                                 <p>
                                <input type="radio" id="radioautor" name="radio-stacked" value="autor" required> Autor</input>
                                 </p>
                                 
                                 <p>
                                <input type="radio" id="radiotema" name="radio-stacked" value="tema" required> Tema</input>
                                 </p>
                                 
                                 <p>
                                <input type="radio" id="radioeditora" name="radio-stacked" value="editora" required> Editora</input>
                                 </p>
                                 
                                 <p>
                                <input type="radio" id="radioindice" name="radio-stacked" value="indice" required> Índice</input>
                                 </p>
                             </div>
                            
                            <br/>
                            
                            <table>
                                <tr>
                                    <td>
                                        <input type="search" class="form-control" name="busca" id="busca" placeholder="Busca" style="width:200px; float:left;" autocomplete="off"> &nbsp;&nbsp;&nbsp;
                                    </td>
                                </tr>
                            </table>
                            
                            <br />
                            
                            <table>
                                <tr>
                                    <td>
                                        <a href="Busca/A.php">A</a>
                                        <a href="url">B</a>
                                        <a href="url">C</a>
                                        ...
                                    </td>
                                </tr>
                            </table>
                        </form>
                    </div>
                </div>
            </div>
        </div>

é isso que você não deve estar entendo não precisa do link ali não tem necessidade porque você vai utilizar outro tipo de verb (que no caso é POST), então seria:

Html

<div class="row">
	<div class="col">
		<div class="collapse multi-collapse" id="form-busca">
			<div class="card card-body">
				<form class="form-horizontal" method="POST" action="search.php" method="post">
					 <div class="custom-control custom-radio">
						 <p>
						<input type="radio" id="radiotitulo" name="radiostacked" value="titulo" required> Título</input>
						 </p>
						 
						 <p>
						<input type="radio" id="radioautor" name="radiostacked" value="autor" required> Autor</input>
						 </p>
						 
						 <p>
						<input type="radio" id="radiotema" name="radiostacked" value="tema" required> Tema</input>
						 </p>
						 
						 <p>
						<input type="radio" id="radioeditora" name="radiostacked" value="editora" required> Editora</input>
						 </p>
						 
						 <p>
						<input type="radio" id="radioindice" name="radiostacked" value="indice" required> Índice</input>
						 </p>
					 </div>
					
					<br />					
					<table>
						<tr>
							<td>
								<input type="search" class="form-control" name="busca" id="busca" placeholder="Busca" style="width:200px; float:left;" autocomplete="off"> &nbsp;&nbsp;&nbsp;
							</td>
						</tr>
					</table>	
					
					<br />
					
					<table>
						<tr>
							<td>
								<select class="form-control" name="stexto">
									<option value="">Selecione a letra ...</option>
									<option value="A">A</option>
									<option value="B">B</option>
									<option value="C">C</option>
								</select>
							</td>
						</tr>
					</table>
					
					<br />
					
					<table>
						<tr>
							<td>
								<button type="submit" class="btn btn-success">Enviar</button>
							</td>
						</tr>
					</table>
					
														
				</form>
			</div>
		</div>
	</div>
</div>

PHP arquivo search.php

<?php

    $radiostacked = $_POST['radiostacked'];
    $stexto = $_POST['stexto'];
    $busca = $_POST['busca'];


    // aqui em diante trabalhe com a informação

Observação:

Não coloque no name palavras separadas por traço, como por exemplo estava radio-stacked eu mudei para radiostacked.

Meu search.php está assim:

<?php
require_once 'init.php';

$PDO = db_connect();

$radiostacked = $_POST['radiostacked'];
$busca = $_POST['busca'];

$db = new PDO('mysql:host=localhost;dbname=testdb;','username','password');
$categoria = $_GET['busca'];
$stmt = $db->prepare("SELECT * FROM livro AS t WHERE t.categorias = ?");
$stmt->execute($categoria); //SE FOSSE 2 PARAMETROS, PASSE UM ARRAY
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

$stmt = $PDO->prepare($sql);
$stmt->execute();

Sim eu vi o seu arquivo qual a duvida? tem um erro na variavel $categoria

No retorno dos resultados.

Me explica

t.categorias é o que está no formulário como Título, Autor etc ???

E qual é o outro filtro …

Precisa explicar a SQL para mim !

No banco só há uma table que no caso é “livro” onde há as colunas: idlivro, titulo, autor, tema e editora.

Então

$stmt = $db->prepare(“SELECT * FROM livro AS t WHERE t.categorias = ?”);

essa SQL não está certa? porque não tem o campo categorias?

Não sei se categorias se encaixaria. E se fizer + - assim?
$stmt = $db->prepare("SELECT * FROM livro AS t WHERE '$radiostacked' = ?");

Falha minha…

Se você tem esses campos na sua tabela:

idlivro, titulo, autor, tema e editora.

tem que utilizar eles, qual é o filtro que deseja fazer?

Pegar as informações desse formulário e exibir de segundo ele.
Por exemplo quero procurar na coluna titulo um livro que tenha a palavra “Teste”, mostre o livro com suas outras colunas só que de acordo com o título(já que selecionei título).