Nueva pregunta

Pregunta:

Fecha: 21-09-2017 13:05:39 (En Español)

¿Como asignar el texto de una opcion select a una variable para luego insertarlo en una base de datos con php y mysql?[No resuelta]

Tengo dos select anidados dinamicos realizado con Jquery + Ajax + Php + Mysql y lo que deseo es caputar el texto asociado al id del select sistema para luego insetarlo en la bd.

<script type="text/javascript">

$(document).ready(function(){

$("#sistema").change(function(){
var id=$("#sistema").val();
$.ajax({
url:'/DIVCOPER/agrega_componente.php',
type:'POST',
async:true,
data:"id="+id,
success: function(data){
$("#componente option").remove();
$("#componente").append(data);
}
});
});
});
</script>

Por otra parte tengo el codigo donde recibo las variables para su insercion en la bd, el problema es que de sistema y componente me inserta el Id, alguna sugerencia o ayuda..

if( isset($_POST['registrar']) && !empty($_POST['asunto']) )
{
$asunto=$_POST['asunto'];
$area=$_POST['area'];
$tipo=$_POST['tipo'];
$sistema=$_POST['sistema'];
$componente=$_POST['componente'];
$tec_responsable=$_POST['tec_responsable'];
$fec_registro=$_POST['fec_registro'];
$hora_registro=$_POST['hora_registro'];
//$fecha=explode('/', $fec_registro);
//$fecha_sql=$fecha[2]."-".$fecha[0]."-".$fecha[1];

$servidor="localhost";
$usuario="root";
$clave="root2017";
$basedatos="divcoper";

$conexion=mysqli_connect($servidor,$usuario,$clave,$basedatos) or die("error de conexion");
mysqli_query($conexion,"INSERT INTO partes (asunto, area, tipo, sistema,componente,tec_responsable,fec_registro,hora_registro) VALUES ('$asunto','$area','$tipo','$sistema','$componente','$tec_responsable','$fec_registro','$hora_registro') ");
Etiquetas: Votos: 0 - Respuestas: 6 - Vistas: 15 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 22-09-2017 00:19:03 No te entiendo compañero arriba te contradices, dices que quieres insertar el texto asociado al id del select sistema, cierto?

    Y luego abajo dices q el problema es q se inserta el id de sistema y componente osea q no quieres q se inserten los de componente en la db? Ese es el problema? o como?

    Pd: ponga el codigo completo del html por que con esos $_POST[] de mas el PHP no le logro entender xfa ponga el problema mas legible a lo q quiere resolver y no ponga codigo de mas, q es su codigo no el nuestro, ademas de las malas practicas en el codigo PHP que nos dio pero eso ya es de cada quien y otro favor q le pido es q ponga BBCode en el codigo correspodiente a cada uno para que sea mas facil leer el codigo.

    Saludos.
      Votos: 0 - Link respuesta
     
  • Fecha: 22-09-2017 05:53:54 Codigo Html
    ***************
    <!DOCTYPE html>
    <html>
    <head>
    <title>REGISTRO DE PARTES</title>
    <link rel="stylesheet" type="text/css" href="/DIVCOPER/jquery-ui/jquery-ui.css">
    <script type="text/javascript" src="/DIVCOPER/js/jquery-3.2.1.js"></script>
    <script type="text/javascript" src="/DIVCOPER/jquery-ui/jquery-ui.min.js"></script>

    <script type="text/javascript">

    $(document).ready(function(){

    $("#sistema").change(function(){
    var id=$("#sistema").val();
    $.ajax({
    url:'/DIVCOPER/agrega_componente.php',
    type:'POST',
    async:true,
    data:"id="+id,
    success: function(data){
    $("#componente option").remove();
    $("#componente").append(data);
    }
    });
    });
    });
    </script>
    </head>
    <body>
    <div align=center>
    <h1>REGISTRO DE PARTES SECCE-105</h1><br>
    <form action="registro_parte.php" method="POST">
    <label>Asunto</label>
    <input type="text" name="asunto" id="asunto" size="80"><br><br>
    <script type="text/javascript">
    $(document).ready(function(){
    $("#asunto").autocomplete({
    source: function(request, response){
    $.ajax({
    url:"busca_asuntos.php",
    dataType:"json",
    data:{a:request.term},
    success: function(data){
    response(data);
    }
    });
    },
    minLength:3,
    });
    });
    </script>
    Area<select name="area">
    <option value="SECCE-105">SECCE-105</option>
    <option value="">DEPEME NORTE</option>
    <option value="">DEPEME CENTRO</option>
    <option value="">DEPEME CALLAO</option>
    <option value="">DEPEME SUR1</option>
    <option value="">DEPEME SUR2</option>
    <option value="">DEPEME ESTE1</option>
    <option value="">DEPEME ESTE2</option>
    <option value="">AGUILAS NEGRAS</option>
    </select><br><br>

    Tipo<select name="tipo">
    <option value="Hardware">Hardware</option>
    <option value="Sotware">Sotware</option>
    <option value="Capacitacion">Capacitacion</option>
    <option value="Servicios">Servicios</option>
    </select><br><br>
    Sistema<select name="sistema" id="sistema">
    <option value="0">Seleccione Sistema</option>
    <?php
    include("conexion.php");

    $conexion=mysqli_connect($servidor,$usuario,$clave,$basedatos) or die("error de conexion");
    $resultadosist=mysqli_query($conexion,"SELECT * from sistemas") or die("error de conexion");
    mysqli_close($conexion);

    while($fila=mysqli_fetch_array($resultadosist)){
    echo"<option value=".$fila['id_sistema'].">".$fila['cod_sistema']."</option>";

    }
    ?>
    </select><br><br>
    Componente<select id="componente">

    </select><br><br>
    Tecnico<select name="tec_responsable">
    <option value="ACESPEDESL">ACESPEDESL</option>
    <option value="AJALCAC">AJALCAC</option>
    <option value="CCRUZS">CCRUZS</option>
    <option value="CESPINOB">CESPINOB</option>
    <option value="HSOTOMAYORP">HSOTOMAYORP</option>
    <option value="HALTUNAG">HALTUNAG</option>
    <option value="JLLANOSL">JLLANOSL</option>
    <option value="ACESPEDESL">LCHUQUIZUTAH</option>
    <option value="MMONZOJ">MMONZONJ</option>
    <option value="WQUISPEV">WQUISPEV</option>
    </select><br><br>
    Fecha<input type="date" name="fec_registro" placeholder="mm/dd//yyyy"><br><br>
    Hora<input type="time" name="hora_registro"><br><br>
    <input type="submit" name="registrar" value="Registrar">
    </form>
    </div>
    <?php
    if( isset($_POST['registrar']) && !empty($_POST['asunto']) )
    {
    $asunto=$_POST['asunto'];
    $area=$_POST['area'];
    $tipo=$_POST['tipo'];
    $sistema=$_POST['sistema'];
    $componente=$_POST['componente'];
    $tec_responsable=$_POST['tec_responsable'];
    $fec_registro=$_POST['fec_registro'];
    $hora_registro=$_POST['hora_registro'];
    //$fecha=explode('/', $fec_registro);
    //$fecha_sql=$fecha[2]."-".$fecha[0]."-".$fecha[1];

    $servidor="localhost";
    $usuario="root";
    $clave="root2017";
    $basedatos="divcoper";

    $conexion=mysqli_connect($servidor,$usuario,$clave,$basedatos) or die("error de conexion");
    mysqli_query($conexion,"INSERT INTO partes (asunto, area, tipo, sistema,componente,tec_responsable,fec_registro,hora_registro) VALUES ('$asunto','$area','$tipo','$sistema','$componente','$tec_responsable','$fec_registro','$hora_registro') ");

    $consulta=mysqli_query($conexion,"SELECT * FROM partes ORDER BY id_parte DESC") or die("Error al buscar Registro");

    echo "<table border='1' align=center cellpadding=2 cellspacing=2>";
    echo "<tr>";
    echo "<th id='id_parte'>N° PARTE</th>";
    echo "<th id='asunto'>ASUNTO</th>";
    echo "<th id='area'>AREA</th>";
    echo "<th id='tipo'>TIPO</th>";
    echo "<th id='sistema'>SISTEMA</th>";
    echo "<th id='componente'>COMPONENTE</th>";
    echo "<th id='tec_responsable'>TECNICO RESPONSABLE</th>";
    echo "<th id='fec_registro'>FECHA REGISTRO</th>";
    echo "<th id='hora_registro'>HORA REGISTRO</th>";
    echo "</tr>";

    while ($resultado=mysqli_fetch_array($consulta)){

    echo "<tr>";
    echo "<td>".$resultado['id_parte']."</td>";
    echo "<td>".$resultado['asunto']."</td>";
    echo "<td>".$resultado['area']."</td>";
    echo "<td>".$resultado['tipo']."</td>";
    echo "<td>".$resultado['sistema']."</td>";
    echo "<td>".$resultado['componente']."</td>";
    echo "<td>".$resultado['tec_responsable']."</td>";
    echo "<td>".$resultado['fec_registro']."</td>";
    echo "<td>".$resultado['hora_registro']."</td>";
    echo "</tr>";
    }
    mysqli_close($conexion);
    echo "</table>";


    }else{

    echo"<div align=center>"."Debe completar todos los campos y seleccionar una de las opciones."."</div>";
    }

    ?>
    </body>
    </html>

    El problema es cuando inserto en mi tabla partes el sistema y componente elegido de los selects anidados me inserta los ids, quiero que se inserte el código o nombre del sistema en la base de datos.
      Votos: 0 - Link respuesta
     
  • Fecha: 22-09-2017 06:34:31 A lo que entiendo no quieres insertar el id sino el código.

    Cuando armas la lista de options en tu select pones id_sistema en value, entonces es ese valor el que se mostrara cuando hagas el envío del formulario por POST o con jquery uses var id=$("#sistema").val();
    <?php
    while($fila=mysqli_fetch_array($resultadosist)){
    echo"<option value=".$fila['id_sistema'].">".$fila['cod_sistema']."</option>";
    


    Entonces no te convendria cambiar el valor del option?

    <?php
    while($fila=mysqli_fetch_array($resultadosist)){
    echo"<option value=".$fila['cod_sistema'].">".$fila['cod_sistema']."</option>";
    


    Ahora mas relacionado al titulo de la pregunta si lo que quieres es obtener el texto en vez del valor desde jquery puedes hacer esto:
    var id=$("#sistema option:selected").text();
      Votos: 1 - Link respuesta
     
  • Fecha: 26-09-2017 14:10:35 Estimado Jorge, mi formulario de registro cuenta con un select denominado "sistemas" que genera la lista de opciones dinamicamente desde la tabla sistemas, debo general el select componentes que depende del sistema seleccionado y que si lo he logrado realizar utilizando el siguiente código

    <script type="text/javascript">

    $(document).ready(function(){

    $("#sistema").change(function(){
    var id=$("#sistema").val();
    $.ajax({
    url:'/DIVCOPER/agrega_componente.php',
    type:'POST',
    async:true,
    data:"id="+id,
    success: function(data){
    $("#componente option").remove();
    $("#componente").append(data);
    }
    });
    });
    });
    </script>

    el id que obtengo con la funcion change es enviado al siguiente código, el cual me devuelve las opciones del select componente y que si me funciona.

    <?php
    include("conexion.php");

    $id=$_POST['id'];

    $conexion=mysqli_connect($servidor,$usuario,$clave,$basedatos) or die("error de conexion");


    $componente1=mysqli_query($conexion,"SELECT * from componentes WHERE id_sistema='$id'") or die("no se puede hacer la consulta");
    $cant_registros=mysqli_num_rows($componente1);

    if($cant_registros>0){
    echo"<option>Seleccione Componente</option>";
    while($componente2=mysqli_fetch_array($componente1)){
    echo"<option value=".$componente2['id_componente'].">".$componente2['cod_componente']."</option>";
    }
    }

    mysqli_close($conexion);

    ?>

    También quiero indicar que la tabla sistema esta relacionada con la tabla componentes por el id para que pueda generar el select anidado Sistemas - Componentes, mi problema esta que cuando yo selecciono un sistema por ejemplo SICOM y en componentes se selecciona por ejemplo ACDATABASE yo debo grabar el nombre SICOM Y ACDATABASE en una tabla llamada partes pero no logro, por el contrario en ves de SICOM grado el id asociado a SICOM y en componentes no graba nada, tambien se del uso de: var id=$("#sistema option:selected").text(); pero mi tablas estan relacionadas x id, lo que debo conseguir es la forma de cuando la funcion change obtiene x ejemplo el id=1 se asocie otra variable que caputure el codigo o texto asociado al id y mediante post pasar al insert php para grabarlo en la base de datos partes, lo mismo deberia suceder para el codigo de componente.
      Votos: 0 - Link respuesta
     
  • Fecha: 28-09-2017 07:24:09 Hola Anibal,

    Para ese planteamiento existen varias soluciones. La más adecuada es almacenar los códigos y al momento de realizar las consultas unir o cruzar las tablas (JOIN) para obtener las descripciones correspondientes así como cualquier otro dato relacionado. Ese es uno de los fundamentos de las bases de datos relacionales. Son pocos los casos en los que no se desee aprovechar esta característica y francamente, los que he visto, exigen soluciones diferentes como bases de datos documentales o cualquiera de las llamadas "No-SQL".

    Luego de lo dicho, un par de sugerencias:

    (a) Utiliza AJAX para procesar los datos de entrada. De esta manera podrás generar desde el formulario los campos que necesitas almacenar. Arriba Jorge te explicó cómo obtener el texto de un renglón seleccionado.

    (b) Si no puedes o no deseas utilizar AJAX, utiliza campos auxiliares que se actualicen con cada selección. Puedes tener, por ejemplo, un campo oculto (<input type="hidden" id="nombre-sistema" name="nombre-sistema">) cuyo valor se actualice cada vez que se haga una selección, es decir, cada vez que cambie el valor del SELECT (onchange) Obviamente deberás tener y manejar tantos campos como selectores desees usar bajo esa condición. De esta manera, cuando enviés el formulario dichos campos ocultos también serán enviados conteniendo los datos que deseas almacenar, en este caso los textos seleccionados. Al igual que con AJAX, toca acá trabajar un poco con Javascript para lograrlo.

    Como te dije al inicio, las soluciones pueden ser varias, pero si no aprovechas la base de datos todas las que busques serán necesariamente del lado del cliente, es decir, deberás trabajar bastante con Javascript. Suerte.
      Votos: 0 - Link respuesta
     
  • Fecha: 18-10-2017 14:12:03 Estimado Leonado.

    Muchas gracias por sus sugerencias estoy tratando de seguir sus recomendación usando el INNER JOIN, como lo habia mencionado tengo una tabla sistemas con sus campos (id_sistema, cod_sistema, nom_sistema) y otra tabla componentes con sus campos (id_componente, cod_componente, nom_componente) mi consulta es si para realizar el select anidado de tal manera que en el formulario de registro al seleccionar el select sistema por ejemplo SICOM cuyo value o id_sistema=1 me debe habiltar el select componentes mostrando las opciones asociadas al id_sistema como seria FTETRA, ACCORE ...lo debo realizar con PHP?.. porque si logre que funciones con el AJAX, JQUERI pero no podia grabar en la tabla deseada los codigos (cod_sistema y cod_componentes) en mi tabla deseada.

    Entonces estoy tratando de realizarlo con PHP, muestro la consulta supuestamente para mostrar el cod_de los componentes donde el id_sistema concide con el id_componentes.

    include("conexion.php");
    $conexion=mysqli_connect($servidor,$usuario,$clave,$basedatos) or die("error de conexion");
    $codcomponente=mysqli_query($conexion,"SELECT cod_componente FROM componentes INNER JOIN sistemas ON componentes.id_componente=sistemas.id_sistema");
    while($fila=mysqli_fetch_array($codcomponente)){
    echo"<option value=".$fila['id_componente'].">".$fila['cod_componente']."</option>";
    }

    Que alternativa en todo caso deberia usar para realizar los 2 o 3 select anidados
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com