Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Atascado para envio a base de datos varias lineas

Estas en el tema de Atascado para envio a base de datos varias lineas en el foro de PHP en Foros del Web. Buenas, estoy atascado en este punto, recibo diferentes variables de otra hoja por "post", luego en esta a través de una consulta saco los "status" ...
  #1 (permalink)  
Antiguo 10/06/2016, 09:25
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Atascado para envio a base de datos varias lineas

Buenas, estoy atascado en este punto, recibo diferentes variables de otra hoja por "post", luego en esta a través de una consulta saco los "status" para las variables traídas.
Los "status" van a un select, hasta ahí todo correcto, el problema lo tengo que al cambiar el valor de uno de los select y enviarlo (update) me envía el valor de la última fila no de la que yo quiero modificar.
Cita:
$fecha = $_POST['fecha'];
$nombre = $_POST['nombre'];
$telefono = $_POST['telefono'];

<?php


$sql = "SELECT * FROM pedidos where fecha='$fecha'";

$result = mysql_query($sql,Conectar::Conexion());
$rs = mysql_query($sql,Conectar::Conexion());
$num_rows = mysql_num_rows($result);
if($num_rows!=0){//ponia $num_rows!=0
while ($rol = mysql_fetch_array($result)){
?>
<tr>
<td align="middle" style="border-color:#D0142D; border-style:dashed; border-width:5px;"><?php echo $fecha; ?></td><!--Fecha-->
<td align="middle" style="border-color:#D0142D; border-width:2px;"><?php echo $nombre; ?></td><!--nombre-->

<td align="middle" style="border-color:#D0142D; border-width:2px;"><br>
<select name="status">
<?php
$i=0;

$sql = "SELECT * FROM status";
$re = mysql_query($sql, Conectar::Conexion());
while($col = mysql_fetch_array($re)){
?>
<option value="<?php echo $col[1]; ?>" <?php if ($status== $col[1]) {?> selected="selected" <?php }?>> <?php echo $col[1]; ?></option>

<?php
}
?>
</select>
<!-- pongo aqui el form --><td align="middle" style="border-color:#D0142D; border-width:2px;">
<form action="actualizar_pedido.php" method="post" enctype="multipart/form-data">
<input type="submit" value="Actualizar Pedido" />
<input type="hidden" name="fecha" value="<?php echo $fecha; ?>" /><!--Fecha-->
<input type="hidden" name="articulos" value="<?php echo $rol[11]; ?>" /><!--articulos-->
<input type="hidden" name="selected" value="<?php echo $col[$i][1]; ?>"/><!--articulos-->
<br></td> <!--status-->
</tr>
<?php
}
?>
</table>

<?php
}else{

echo'<h2>Usted no cuenta actualmente con pedidos</h2>';
}

?>
  #2 (permalink)  
Antiguo 10/06/2016, 09:28
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Atascado para envio a base de datos varias lineas

gracias de antemano. Un Saludo
  #3 (permalink)  
Antiguo 10/06/2016, 11:56
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 9 años
Puntos: 39
Respuesta: Atascado para envio a base de datos varias lineas

La variable i qué función tiene en este caso? No la incrementas.

Y pues en lo que veo aquí no tienes el select donde tienes el problema. Ojalá pudieras poner esa parte de código, saludos.
  #4 (permalink)  
Antiguo 10/06/2016, 12:36
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Atascado para envio a base de datos varias lineas

perdón el $i=0 no debería de estar , es precisamente ahí donde no soy capaz de incrementarlo,
este es un ejemplo:
recibo lo siguiente:
Fecha Nombre Telefono Status
2016/06/09 Pepe 3333 En Tiempo
2016/06/09 Ana 55555 Servido
2016/06/09 Luis 77777 Pendiente

sin embargo al pulsar el botón, el la pagina "actualizar_pedido" solo recibo la última linea , por eso no puedo luego volcar los datos a la base de datos.
Soy novato y esto en concreto me lía bastante,Gracias
  #5 (permalink)  
Antiguo 10/06/2016, 12:42
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Atascado para envio a base de datos varias lineas

parte del problema es el nombrte de tu select, es decir, si estas crando una lista de varios articulos y en cada uno aparece el select con los estatus, pues debes indicarle a php que ese es un arreglo al enviarlo colocando corchetes al nombre:

Código HTML:
Ver original
  1. <select name="status[]">


eso en primera, pero al parecer no es tu caso o no se que estas haciendo alli, pues veo que tienes el select dentro de un whle que imagino que lo repite tantas veces como registros encuentre, luego veo que tienes un formulario por cada item de la lista (cosa que no me gusta).

Yo implementaria el envio con ajax diferenciando los elementos dentro de cada fila por su id y de esa manera quedaria mas limpio y menos problematico:

Código PHP:
Ver original
  1. <tr>
  2.  
  3. <td><input type="text" name="fecha" id="<?php echo $rol['id']; ?>" value="<?php echo $fecha; ?>" /></td>
  4. <td><input type="text" name="articulos" id="<?php echo $rol['id']; ?>" value="<?php echo $rol[11]; ?>" /></td>
  5. <td><input type="text" name="selected" id="<?php echo $rol['id']; ?>" value="<?php echo $col[$i][1]; ?>"/><td>
  6. <td><button type="button" id="<?php echo $rol['id']; ?>"  onClick="envia(this.id)"</td>
  7.  
  8. </tr>

Código Javascript:
Ver original
  1. function envia(X){
  2.  
  3. var fecha = $("input[name=fecha][id="+X+"]").val();
  4. var articulos = $("input[name=articulos][id="+X+"]").val();
  5. var selected = $("select[name=selected][id="+X+"]").val();
  6.  
  7. $.ajax({
  8.     url:    'procesa.php?fecha='+fecha+'&articulos='+articulos+'&selected='+selected,
  9.     type:   'post',
  10.  
  11.     success: function(data){
  12.         /*AQUI LO QUIE QUIERES QUE HAGA LA RESPUESTA POR EJEMPLO UN ALERT*/
  13.         alert("Registro de "+articulos+" actualizado");
  14.     }
  15. })
  16.  
  17. }

todo esto es solo un ejemplo, verifica y adapta a ver
__________________
[email protected]
HITCEL
  #6 (permalink)  
Antiguo 10/06/2016, 12:43
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Atascado para envio a base de datos varias lineas

Cita:
Iniciado por fab2160225 Ver Mensaje
perdón el $i=0 no debería de estar , es precisamente ahí donde no soy capaz de incrementarlo,
este es un ejemplo:
recibo lo siguiente:
Fecha Nombre Telefono Status
2016/06/09 Pepe 3333 En Tiempo
2016/06/09 Ana 55555 Servido
2016/06/09 Luis 77777 Pendiente

sin embargo al pulsar el botón, el la pagina "actualizar_pedido" solo recibo la última linea , por eso no puedo luego volcar los datos a la base de datos.
Soy novato y esto en concreto me lía bastante,Gracias
Como te dije, debes modificar tu form y los nombres agregarles corchetes para que php interprete el arreglo y sepa que son varios elementos

nombre[]
__________________
[email protected]
HITCEL
  #7 (permalink)  
Antiguo 10/06/2016, 14:09
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Atascado para envio a base de datos varias lineas

Muchas gracias, hoy no puedo probarlo pero creo que podré adecuarlo , muchas gracias otra vez el lunes lo miro no esperaba una respuesta tan rápida.
  #8 (permalink)  
Antiguo 12/06/2016, 16:19
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Atascado para envio a base de datos varias lineas

Buenas, ya lo he adaptado, el mensaje que recibo es correcto, sin embargo no me manda a la pagina los datos.
Ya cambié el nombre del ejemplo "procesa.php?" por mi pagina "actualiza_pedido.php?", no sé que me falta.
  #9 (permalink)  
Antiguo 12/06/2016, 16:37
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 9 años
Puntos: 39
Respuesta: Atascado para envio a base de datos varias lineas

Código Javascript:
Ver original
  1. url:    'procesa.php?fecha='+fecha+'&articulos='+articulos+'&selected='+selected,

Esta línea nos dice que los datos los envías por GET, y en el primer mensaje esperas recibirlos por POST. ¿Lo cambiaste? De no ser así, cambia la petición ajax, de este modo:

Código Javascript:
Ver original
  1. $.ajax({
  2.     url:    'procesa.php',
  3.     type:   'post',
  4.     data: { 'fecha': fecha, 'articulos': articulos, 'selected': selected},
  5.     success: function(data){
  6.         alert(fecha + " " + articulos + " " + selected);
  7.         /*AQUI LO QUIE QUIERES QUE HAGA LA RESPUESTA POR EJEMPLO UN ALERT*/
  8.         alert("Registro de "+articulos+" actualizado");
  9.     }
  10. })

de paso le puse una alerta para que te cerciores que estás enviando todos los datos.
Toca probar esto, y ver si es ahí el problema o en el php.
  #10 (permalink)  
Antiguo 13/06/2016, 14:24
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Atascado para envio a base de datos varias lineas

Buenas, tienes que perdonar, pero esto se me está atragantando, suelo leer bastante antes de preguntar y generalmente con eso me basta, pero con esto no lo acabo de ver:
el mensaje de ajax no recibe la variable del select, las otras si, lo tengo de esta manera:
Cita:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script>
function envia(X){

var fecha = $("input[name=fecha][id="+X+"]").val();
var articulos = $("input[name=articulos][id="+X+"]").val();
var selected = $("select[name=selected][id="+X+"]").val();
$.ajax({
url: 'actualizar_pedido.php',
type: 'post',
data: { 'fecha': fecha, 'articulos': articulos, 'selected': selected},
success: function(data){
alert(fecha + " " + articulos + " " + selected);
/*AQUI LO QUIE QUIERES QUE HAGA LA RESPUESTA POR EJEMPLO UN ALERT*/
alert("Registro de "+articulos+" actualizado");
}
})

}
</script>
la parte de ajax no le veo problemas

Cita:
<article class="fondoArticulo">
<h2>Aquí podrás ver tus pedidos, y el Estado de los mismos</h2>
<br><br>
<table border="10" align="center" cellspacing="2" cellpadding="2" style="">
<tr>
<th style="border-color:#4E6FFF; border-width:3px; ">Fecha</th>
<th style="border-color:#4E6FFF; border-width:3px; ">Nombre</th>
<th style="border-color:#4E6FFF; border-width:3px; ">Pedido por</th>
<th style="border-color:#4E6FFF; border-width:3px; ">Dirección</th>
<th style="border-color:#4E6FFF; border-width:3px; ">Teléfono</th>
<th style="border-color:#4E6FFF; border-width:3px; ">Transporte</th>
<th style="border-color:#4E6FFF; border-width:3px; ">Articulo PVP Cantidad</th>
<th style="border-color:#4E6FFF; border-width:3px; ">Numero Pedido</th>
<th style="border-color:#4E6FFF; border-width:3px; ">Status</th>
</tr>
<?php
$fecha = $_POST['fecha'];
$nombre = $_POST['nombre'];
$nombreR = $_POST['nombreR'];
$direccion = $_POST['direccion'];
$telefono = $_POST['telefono'];
$metodoenvio = $_POST['metodoenvio'];
$npedido = $_POST['npedido'];


echo $fecha;
echo $nombre;
echo $nombreR;
echo $direccion;
echo $npedido;

?>
<?php


$sql = "SELECT * FROM pedidos where fecha='$fecha'";

$result = mysql_query($sql,Conectar::Conexion());
$rs = mysql_query($sql,Conectar::Conexion());
$num_rows = mysql_num_rows($result);

if($num_rows!=0){
while ($rol = mysql_fetch_array($result)){
?>
<?php
$status=$rol[14];
echo $rol[14];
?>
<tr>
<td align="middle" style="border-color:#D0142D; border-width:2px;">
<form action="actualizar_pedido.php" method="post" enctype="multipart/form-data">
<tr>

<td><input type="text" name="fecha" id="<?php echo $rol['id']; ?>" value="<?php echo $fecha; ?>" /></td>
<td><input type="text" name="nombre" id="<?php echo $rol['id']; ?>" value="<?php echo $nombre; ?>" /></td>
<td><input type="text" name="nombreR" id="<?php echo $rol['id']; ?>" value="<?php echo $nombreR; ?>" /></td>
<td><input type="text" name="direccion" id="<?php echo $rol['id']; ?>" value="<?php echo $direccion; ?>" /></td>
<td><input type="text" name="telefono" id="<?php echo $rol['id']; ?>" value="<?php echo $telefono; ?>" /></td>
<td><input type="text" name="metodoenvio" id="<?php echo $rol['id']; ?>" value="<?php echo $metodoenvio; ?>" /></td>
<td><input type="text" name="articulos" id="<?php echo $rol['id']; ?>" value="<?php echo $rol[11]; ?>" /></td>
<td><input type="text" name="npedido" id="<?php echo $rol['id']; ?>" value="<?php echo $npedido; ?>" /></td>
<td>
<select name="status[]">
<?php
$i=0;

$sql = "SELECT * FROM status";
$re = mysql_query($sql, Conectar::Conexion());
while($col = mysql_fetch_array($re)){
?>
<option value="<?php echo $col[1]; ?>" <?php if ($status== $col[1]) {?> selected="selected" <?php }?>> <?php echo $col[1]; ?></option>

<?php
}
?>
<?php
$i=0;
while($i<1){
$rol[11];
$i++;}
?>
</select></td>
<td><input type="text" name="selected" id="<?php echo $rol['id']; ?>" value="<?php echo $col[$i][1]; ?>"/><td>
<td><input type="button" id="<?php echo $rol['id']; ?>" onClick="envia(this.id)" </td>
agradezco tu paciencia
  #11 (permalink)  
Antiguo 13/06/2016, 15:08
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 9 años
Puntos: 39
Respuesta: Atascado para envio a base de datos varias lineas

Bueno bueno .. que el select lo tienes como array para empezar. Prueba cambiando la etiqueta de apertura del select por esta que te pongo:

Código PHP:
Ver original
  1. <select name="status" id="selector<?= $rol['id']; ?>">

Y en el ajax cambia la línea donde recolectas su valor.

Código Javascript:
Ver original
  1. var selected = $("#selector"+X).val();

Prueba si ya recibes el valor seleccionado, a ver qué tal va.
  #12 (permalink)  
Antiguo 13/06/2016, 15:33
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Atascado para envio a base de datos varias lineas

perdón esto era anterior a tu respuesta, ahora el mensaje de ajax es correcto, voy a ver si ya soy capaz de pasarlo a la otra pagina.

Última edición por fab2160225; 13/06/2016 a las 15:39
  #13 (permalink)  
Antiguo 13/06/2016, 15:55
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Atascado para envio a base de datos varias lineas

Buenas. entiendo que la linea
url: 'actualizar_pedido.php', define la pagina a la que envía las variables por post?, sin embargo ni la abre ni recibo nada, para verlo simplemente tengo esto:
Cita:
if($_POST){

$fecha= $_POST['fecha'];
$articulos = $_POST['articulos'];
$status = $_POST['selected'];

echo $fecha;
echo $articulos;
echo $status;
}
?>
  #14 (permalink)  
Antiguo 13/06/2016, 16:15
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 9 años
Puntos: 39
Respuesta: Atascado para envio a base de datos varias lineas

Ya vi que de principio tú no implementabas ajax, disculpa.
En una petición ajax, su función es esa, "no abrir" el archivo php, hacer el proceso más limpio y amigable para el cliente.
La pagina "actualizar_pedido.php" recibe los datos correctamente y ya puedes hacer con ello lo que quieras, para que veas que lo recibes. Cambia esto en tu petición ajax:

Código Javascript:
Ver original
  1. success: function(data){
  2.        alert(data);
  3.     }

Esa 'data' es lo que la url 'actualizar_pedido.php' está recibiendo. Pruebalo, saludos!
  #15 (permalink)  
Antiguo 14/06/2016, 07:25
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Atascado para envio a base de datos varias lineas

Buenas, sigo con esto a vueltas, con el código que me diste veo el código que tengo escrito, no sé si es eso lo que tendía que ver?.
Como lo que persigo enviando esos datos a la otra pagina es hacer un update a la base de datos, he estado leyendo y he visto que con Ajax y desde la propia pagina también se puede hacer (sin Ajax también), he modificado el código Ajax para intentar ejecutar el update, pero tampoco lo logré
Cita:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script>
function envia (X){

var fecha = $("input[name=fecha][id="+X+"]").val();
var articulos = $("input[name=articulos][id="+X+"]").val();
var selected = $("#selector"+X).val();
$.ajax({
url: 'editar_pedido.php',
type: 'POST',
async: false,
data: {
'update' : 1,
'upfecha' : fecha,
'uparticulos' : articulos,
'upselected' : selected
},
success:function(data)
{
alert(data);
$('input[type=text]').val('');
showdata();
}

})
};
esta es la parte de sql,
Cita:
<?php
echo $_POST['upfecha'];
if (isset($_POST['update']))
{
$sql="UPDATE pedidos
SET
articulos = '{$_POST['uparticulos']}',
status = '{$_POST['upselected']}'
where fecha = '{$_POST['upfecha']}'
and
articulos = '{$_POST['uparticulos']}'";


$res=mysql_query(sql);
if($res)
{
echo "Modificacion realizada";
}
}
?>
  #16 (permalink)  
Antiguo 14/06/2016, 16:58
 
Fecha de Ingreso: abril-2016
Mensajes: 90
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Atascado para envio a base de datos varias lineas

Buenas, gracias por tu ayuda al final si ha funcionado, gracias otra vez.

Etiquetas: atascado, lineas, select, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:18.