Сохранить значение в select html + php
я разрабатываю простую форму с html, php и MySQL, которая имеет обязательные проверки полей, недопустимые символы и т. д.
Html
<?php include_once '../../includes/insert/insert_user.php'; ?>
<h4 class="mb"><i class="fa fa-angle-right"></i> REGISTRO USUARIO</h4>
<span class="error"><?php echo $msg; ?></span>
<form class="form-horizontal style-form" method="post" enctype="multipart/form-data" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div class="form-group">
<label class="col-sm-2 col-sm-2 control-label"><b>Nombre</b></label>
<div class="col-sm-3">
<input type="text" class="form-control" minlength="3" name="name" value="<?php echo $name; ?>">
<span class="error">* <?php echo $nameErr; ?></span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 col-sm-2 control-label"><b>Tipo de usuario</b></label>
<div class="col-sm-3">
<select class="form-control grey" id="tipo_usuario" name="tipo_usuario" value="<?php echo $tipo_usuario['tipo_usuario']; ?>">
<option value="">Seleccione</option>
<option value="Oficina">Oficina tecnica</option>
<option value="Personal">Personal</option>
<option value="Administrador">Administrador</option>
</select>
<span class="error">* <?php echo $tipo_usuarioErr; ?></span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 col-sm-2 control-label"></label>
<div class="col-sm-9">
<button class="btn btn-primary" name="submit" type="submit"><i class="fa fa-floppy-o"></i> GUARDAR</button>
</div>
</div>
</form>
Php и mysql (insert_user.php)
<?php
include_once('../../includes/dbconfig.php');//mi conexion a la db
$msg = "";
$name $tipo_usuario = "";
$nameErr = $tipo_usuarioErr = null;
$valid = true;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
//validamos que los campos no sean vacíos y sean requeridos:
if (empty($_POST["name"])) {
$nameErr = "El nombre es requerido";
$valid = false;
}
else {
$name = test_input($_POST['name']);
// chequea que el nombre tenga letras y espacios
if (!preg_match("/^[a-zA-Z ]*$/", $name)) {
$nameErr = "Solo se permiten letras y espacios, no acentos ni números";
$valid = false;
}
}
if (empty($_POST["tipo_usuario"])) {
$tipo_usuarioErr = "El tipo de usuario es obligatorio";
$valid = false;
} else {
$tipo_usuario = test_input($_POST["tipo_usuario"]);
}
if ($valid) {
//Si pasa las validaciones, ejecuta el SQL
$con->query("INSERT INTO users (name, tipo_usuario) VALUES ('$name','$tipo_usuario' )");
echo "<script>alert('¡Usuario registrado con éxito!'); location.href='table_users.php';</script>";
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
все идет хорошо в insert, что происходит, когда я сохраняю и оставляю input name пустым, выбранная опция теряется в "Select" и перезагружается по умолчанию в первый вариант (выберите"), вместо этого, если я делаю, оставляя пустой select не теряет значение input name.
2 answers
Замените раздел вашей комбинации этим решением, которое я предлагаю, это серия условных выражений, которые будут выбирать значение, выбранное в этом listbox.
<div class="form-group">
<label class="col-sm-2 col-sm-2 control-label"><b>Tipo de usuario</b></label>
<div class="col-sm-3">
<select class="form-control grey" id="tipo_usuario" name="tipo_usuario">
<option value="">Seleccione</option>
<option value="Oficina" <?php if($tipo_usuario=="Oficina"){ echo "selected='selected'";}?>>Oficina tecnica</option>
<option value="Personal" <?php if($tipo_usuario=="Personal"){ echo "selected='selected'";}?>>Personal</option>
<option value="Administrador" <?php if($tipo_usuario=="Administrador"){ echo "selected='selected'";}?>>Administrador</option>
</select>
<span class="error">* <?php echo $tipo_usuarioErr; ?></span>
</div>
</div>
Кроме того, я делаю вам следующие предложения:
Обновите тип подключения к Mysqli или PDO: подключение к базе данных MySQL
Используйте require или require_once, если скрипт командует, чтобы остановить программу, если ваши escript не подключение или обработка.
- проверяет объявление переменных потому что они такие: $name $type=""; и объявите их так: $name = $type="";
Одним из возможных решений является использование JavaScript:
<select id="opt_ciudades">
<option disabled>Seleccione</option>
<option value="1">Juarez</option>
<option value="2">Mendoza</option>
</select>
<script>
document.getElementById('opt_ciudades').selectedIndex =0;
</script>
Если вы посмотрите, я устанавливаю selected с помощью index в этом случае "0", чтобы установить по умолчанию первый option.