SELECT/LIST PHP PDO

25/08/2014

Boa tarde pessoal, estou fazendo um cadastro simples em php, só que gostaria de uma ajuda para que ao invés de utilizar um input e ter que digitar toda hora no o nome de um cliente (que é o exemplo que estou utilizando) ele trazer as informações em um select/list do banco de dados.

segue o código que estou utilizando:

<?php 
	
	require 'database.php';

	if ( !empty($_POST)) {
		// keep track validation errors
		$cliError = null;
		
		// keep track post values
		$cli = $_POST['cli_cham'];
		
		// validate input
		$valid = true;
		if (empty($cli)) {
			$cliError = 'Por favor insira o cliente';
			$valid = false;
		}		
		
		// insert data
		if ($valid) {
			$pdo = Database::connect();
			$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			$sql = "INSERT INTO chamados (cli_cham) values(?)";
			$q = $pdo->prepare($sql);
			$q->execute(array($cli));
			Database::disconnect();
			header("Location: index.php");
		}
	}
?>


<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="utf-8">
    <link   href="css/bootstrap.min.css" rel="stylesheet">
    <script src="js/bootstrap.min.js"></script>
</head>

<body>
    <div class="container">
    
    			<div class="span10 offset1">
    				<div class="row">
		    			<h3>Inclusão</h3>
		    		</div>
    		
	    			<form class="form-horizontal" action="chamado.php" method="post">
					  <div class="control-group <?php echo !empty($cliError)?'error':'';?>">
					    <label class="control-label">Cliente</label>
					    <div class="controls">
					      	<input name="cli_cham" type="text"  placeholder="cliente" value="<?php echo !empty($cli)?$cli:'';?>">
					      	<?php if (!empty($cliError)): ?>
					      		<span class="help-inline"><?php echo $cliError;?></span>
					      	<?php endif; ?>
					    </div>
					  </div>

					  

					  <div class="form-actions">
						  <button type="submit" class="btn btn-success">Abrir Chamado</button>
						  <a class="btn" href="index.php">Voltar</a>
						</div>
					</form>
				</div>
				
    </div> <!-- /container -->
  </body>
</html>



No caso iria fazer um select em outra tabela (Clientes) e puxar a informação para eu inserir na tabela chamados onde os campos são

id_cli (pk)
nome_cli var (50)

se alguém puder me ajudar a fazer esse select/list em pdo eu agradeço muito.

PHP

João Vitor

Respostas

27/08/2014

Burg

nesse caso voce precisa de um auto complete com os clientes de sua tabela "clientes", usa o autocomplete do jquery ui.
Responder Citar

27/08/2014

Burg

nesse caso voce precisa de um auto complete com os clientes de sua tabela "clientes", usa o autocomplete do jquery ui.
Responder Citar

27/08/2014

Ronaldo Lanhellas

Este é o componente que você precisa: http://jqueryui.com/autocomplete/
Responder Citar

28/08/2014

João Vitor

Eu consegui resolver de uma maneira bem mais simples no lugar da div do input coloquei o select e dentro dele eu faço uma select no banco e depois um foreach para listar as opção dentro de uma variável no option.





					    <div class="controls">
								<select name="pri_cham" id="pri_cham">			  
								<?php
										$pdo = Database::connect();
										$sql = "SELECT cod_pri,nome_pri FROM prioridade ORDER BY id_pri";
										foreach ($pdo->query($sql) as $row) {
										echo "<option value='".$row['cod_pri']."'>".$row['nome_pri']."</option>";
										
										}
										Database::disconnect();
								?>
								</select>
							<?php if (!empty($prioError)): ?>
					      		<span class="help-inline"><?php echo $prioError;?></span>
					      	<?php endif; ?>
					    </div>



Responder Citar

28/08/2014

João Vitor

....
Responder Citar

28/08/2014

Ronaldo Lanhellas

Eu consegui resolver de uma maneira bem mais simples no lugar da div do input coloquei o select e dentro dele eu faço uma select no banco e depois um foreach para listar as opção dentro de uma variável no option.

					    <div class="controls">
								<select name="pri_cham" id="pri_cham">			  
								<?php
										$pdo = Database::connect();
										$sql = "SELECT cod_pri,nome_pri FROM prioridade ORDER BY id_pri";
										foreach ($pdo->query($sql) as $row) {
										echo "<option value='".$row['cod_pri']."'>".$row['nome_pri']."</option>";
										
										}
										Database::disconnect();
								?>
								</select>
							<?php if (!empty($prioError)): ?>
					      		<span class="help-inline"><?php echo $prioError;?></span>
					      	<?php endif; ?>
					    </div>





Mas o seu código não tem o "auto-complete" apenas mostra os valores do SELECT. O componente auto-complete do jquery lhe possibilita maiores recursos, mas se você precisa apenas mostrar os valores sem muita "frescura", então de fato a sua solução é a melhor.
Responder Citar