Сохранить значение в 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.

Author: IndiraRivas, 2018-10-19

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>

Кроме того, я делаю вам следующие предложения:

  1. Обновите тип подключения к Mysqli или PDO: подключение к базе данных MySQL

  2. Используйте require или require_once, если скрипт командует, чтобы остановить программу, если ваши escript не подключение или обработка.

  3. проверяет объявление переменных потому что они такие: $name $type=""; и объявите их так: $name = $type="";
 3
Author: Edgard, 2018-10-19 21:53:02

Одним из возможных решений является использование 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.

 1
Author: Diego Avila, 2018-10-19 19:58:31