Insert name instead of value option id

Asked

Viewed 322 times

2

Write to Database

    //Ids
	$codEstado = filter_input(INPUT_POST, 'estado', FILTER_VALIDATE_INT);
	$codCidade = filter_input(INPUT_POST, 'cidade', FILTER_VALIDATE_INT);
	$codBairro = filter_input(INPUT_POST, 'bairro', FILTER_VALIDATE_INT);
	//Inserir no bando de dados
	$sqlBairro = "INSERT INTO cadastros (estadonome,cidadenome,bairronome) VALUES (:estadonome, :cidadenome, :bairronome)";
	$resBairro = $conexao->prepare($sqlBairro);

	$resBairro->execute(array(
		':estadonome' => $codEstado,
		':cidadenome' => $codCidade,
		':bairronome' => $codBairros
	));
	$resBairro->fetchAll();	

Selections...

<!--Seleções cep-->
		<select name="estado" id="estado" required>
			<option value="">Selecione</option>
			<?php foreach ($estados as $estado) { ?>
				<option value="<?php echo $estado['id'] ?>"><?php echo $estado['nome'] ?></option>
			<?php } ?>
		</select>

	<label for="cidade">Cidade:</label>
	<select name="cidade" id="cidade" disabled required>
		<option value="<?php $cidade; ?>">Selecione um estado</option>
	</select>

	<label for="bairro">Bairro:</label>
	<select name="bairro" id="bairro" disabled required>
		<option value="<?php $bairro; ?>">Selecione uma cidade</option>
	</select>

Part of the code that is saving the id, remembering... if you put $neighborhood['name'] in place of the value will not record anything...

<?php foreach ($bairros as $bairro) { ?>
    <option value="<?php echo $bairro['id'] ?>"><?php echo $bairro['nome'] ?></option>
<?php } ?>

Everything in the code is normal, but instead of saving the name, it saves the id in the table.

Help me. Grateful!

  • What kind of neighborhood field in your database?

  • varchar(255) friend...

2 answers

1

In his PHP you are recording the return of input in $codBairro and when you pass the parameters you send $codBairros, both must be equal:

//Inserir no bando de dados
$sqlBairro = "INSERT INTO cadastros (estadonome,cidadenome,bairronome) VALUES (:estadonome, :cidadenome, :bairronome)";
$resBairro = $conexao->prepare($sqlBairro);

$resBairro->execute(array(
    ':estadonome' => $codEstado,
    ':cidadenome' => $codCidade,
    ':bairronome' => $codBairro
));
$resBairro->fetchAll();

Another detail, you’re trying to pass a string and asking for the PHP check an integer at this point:

$codBairro = filter_input(INPUT_POST, 'bairro', FILTER_VALIDATE_INT);

Try to pass the POST direct, and make sure you save:

$codBairro = $_POST('bairro');

Now you can ride your options thus:

<?php foreach ($bairros as $bairro) { ?>
    <option value="<?php echo $bairro['nome'] ?>"><?php echo $bairro['nome'] ?></option>
<?php } ?>
  • Tested... is recording blank friend....

  • I edited the answer

  • worked well to record only the neighborhood pq the previous ids are references to each other in the choice of select... Thanks for helping...

0

Thanks to those who helped me, I got another way...

		$codEstado=$_POST["estado"];
		$queryEstado = "SELECT * FROM estado WHERE id='$codEstado'";
		$stmtEstado = $conexao->prepare($queryEstado);
		$stmtEstado->execute();
		$rowEstado = $stmtEstado->fetch(PDO::FETCH_ASSOC);
		$codEstado = $rowEstado["nome"];
		
		$codCidade = $_POST['cidade'];
		$queryCidade = "SELECT * FROM cidade WHERE id='$codCidade'";
		$stmtCidade = $conexao->prepare($queryCidade);
		$stmtCidade->execute();
		$rowCidade = $stmtCidade->fetch(PDO::FETCH_ASSOC);
		$codCidade = $rowCidade["nome"];		
		
		$codBairro = $_POST['bairro'];
		$queryBairro = "SELECT * FROM bairro WHERE id='$codBairro'";
		$stmtBairro = $conexao->prepare($queryBairro);
		$stmtBairro->execute();
		$rowBairro = $stmtBairro->fetch(PDO::FETCH_ASSOC);
		$codBairro = $rowBairro["nome"];	

Browser other questions tagged

You are not signed in. Login or sign up in order to post.