Foros del Web » Programando para Internet » PHP »

array+php+mysql, un empujoncito?

Estas en el tema de array+php+mysql, un empujoncito? en el foro de PHP en Foros del Web. muy buenas a todos tengo el siguiente codigo, creado con dreamweaver, y funciona todo perfecto excepto los checkbox, que no soy capaz de introducirlos en ...
  #1 (permalink)  
Antiguo 16/03/2010, 04:09
 
Fecha de Ingreso: enero-2004
Ubicación: en mi casa
Mensajes: 29
Antigüedad: 20 años, 3 meses
Puntos: 1
array+php+mysql, un empujoncito?

muy buenas a todos
tengo el siguiente codigo, creado con dreamweaver, y funciona todo perfecto excepto los checkbox, que no soy capaz de introducirlos en la BD, como el resto de datos.

Código:
<?php require_once('Connections/xxxx.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}


if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {

$insertSQL = sprintf("INSERT INTO xxxx (campos) VALUES (valores)",
GetSQLValueString($_POST['numero'], "int"),
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['seleccion'], "text"),
GetSQLValueString($_POST['observaciones'], "text"),
GetSQLValueString($_POST['fecha'], "date"));
mysql_select_db($database_xxxx, $xxxx);
$Result1 = mysql_query($insertSQL, $xxxx) or die(mysql_error());

$insertGoTo = "registro.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}

mysql_select_db($database_xxxx, $xxxx);
$query_Recordset1 = "SELECT * FROM xxxx";
$Recordset1 = mysql_query($query_Recordset1, $xxxx) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<div>
<?php
if(isset($_POST['insertar registro']))
foreach($_POST['tratamiento_id'] as $tratamiento)
$tratamiento=serialize(",",$_POST['tratamiento']);
?>
<form method="POST" name="form2" action="<?php echo $editFormAction; ?>">
<table align="center">
<tr valign="baseline">
<td width="126" align="right" nowrap>Numero:</td>
<td width="243"><input type="text" name="historia" size="8"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Nombre:</td>
<td><input type="text" name="nombre" size="32"></td>
</tr>
<tr valign="baseline">
<td align="right" valign="middle" nowrap>Eleccion:</td>
<td>

<input name="tratamiento_id[]" type="checkbox" value="opcion 1">&nbsp;opcion 1&nbsp;&nbsp;
<input name="tratamiento_id[]" type="checkbox" value="opcion 2">&nbsp;opcion 2<br>
<input name="tratamiento_id[]" type="checkbox" value="opcion 3">&nbsp;opcion 3&nbsp;&nbsp;
<input name="tratamiento_id[]" type="checkbox" value="opcion 4">&nbsp;opcion 4<br>
<input name="tratamiento_id[]" type="checkbox" value="opcion 5">&nbsp;opcion 5&nbsp;&nbsp;
<input name="tratamiento_id[]" type="checkbox" value="opcion 6">&nbsp;opcion 6<br>
<input name="tratamiento_id[]" type="checkbox" value="opcion 7">&nbsp;opcion 7 </td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Seleccion:</td>
<td><select name="seleccion">
<option value="" selected>Seleciona</option>
<option value="opcion 1">opcion 1</option>
<option value="opcion 2">opcion 2</option>
<option value="opcion 3">opcion 3</option>
<option value="opcion 4">opcion 4</option>
<option value="opcion 5">opcion 5</option>
<option value="opcion 6">opcion 6</option>
<option value="opcion 7">opcion 7</option>
<option value="opcion 8">opcion 8</option>
<option value="opcion 9">opcion 9</option>
</select></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Fecha:</td>
<td><input type="text" name="fecha" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Observaciones:</td>
<td><textarea name="observaciones" cols="32"></textarea></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">&nbsp;</td>
<td><input type="submit" value="Insertar registro"></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form2">
</form>


</div>

</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
yo se que el fallo esta en este trozo de codigo,
Código:
if(isset($_POST['insertar registro']))
foreach($_POST['tratamiento_id'] as $tratamiento)
$tratamiento=serialize(",",$_POST['tratamiento']);
pero por mas vueltas que le doy no consigo hacerlo funcionar.
alguien podria echarme una manita?
un millon de gracias por adelantado
  #2 (permalink)  
Antiguo 16/03/2010, 04:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: array+php+mysql, un empujoncito?

pues parece que usas tratamiento_id o tratamiento como índice del $_POST

¿cual es el correcto según tu problema??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/03/2010, 04:50
 
Fecha de Ingreso: enero-2004
Ubicación: en mi casa
Mensajes: 29
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: array+php+mysql, un empujoncito?

pues lamento contestar que no se lo que me quieres decir
me faltan datos? las variables estan mal colocadas?
si faltan datos ya si que no se por donde seguir, y si estan mal colocadas, he probado con todas las combinaciones posibles
de todos modos gracias por la ayuda
un saludo

INDUMA
  #4 (permalink)  
Antiguo 16/03/2010, 04:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: array+php+mysql, un empujoncito?

Cita:
Iniciado por Induma Ver Mensaje
pues lamento contestar que no se lo que me quieres decir
me faltan datos? las variables estan mal colocadas?
si faltan datos ya si que no se por donde seguir, y si estan mal colocadas, he probado con todas las combinaciones posibles
de todos modos gracias por la ayuda
un saludo

INDUMA
pues yo no se si están bien o mal tus datos, es tu script... no el mio, y adivino no soy!!

pero por sentido común solo noté esto:
Cita:
if(isset($_POST['insertar registro']))
foreach($_POST['tratamiento_id'] as $tratamiento)
$tratamiento=serialize(",",$_POST['tratamiento']);
y vamos, me resulta muy extraño eso que haces ahí... ¿esta bien??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 16/03/2010, 05:13
 
Fecha de Ingreso: enero-2004
Ubicación: en mi casa
Mensajes: 29
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: array+php+mysql, un empujoncito?

te agradezco enormemente la ayuda, pero si supiera exactamente el fallo no preguntaria.
solo necesito saber como solucionar ese fallo, asi podre entender mejor como funciona el tema de los arrays y las BDs, lo cual nunca antes habia visto ni hecho
pero repito que agradezco enormemente tu ayuda, seguire buscando, gracias
un saludo

INDUMA
  #6 (permalink)  
Antiguo 16/03/2010, 05:39
 
Fecha de Ingreso: septiembre-2005
Mensajes: 14
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: array+php+mysql, un empujoncito?

lo que quiere decir paketetrueke es que haces referencia (aparentemente) al mismo objeto enviado desde el form (checkbox) pero con nombres distintos:
$tratamiento=serialize(",",$_POST['tratamiento']);
cuando supongo que querias hacer
$tratamiento=serialize(",",$_POST['tratamiento_id']);

Además, ten en cuenta que los checkbox solo se envian si estan activados, (true)
  #7 (permalink)  
Antiguo 16/03/2010, 05:50
 
Fecha de Ingreso: enero-2004
Ubicación: en mi casa
Mensajes: 29
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: array+php+mysql, un empujoncito?

gracias jordinogue por una respuesta mas que aceptable sobre el tema
el problema es que he probado ya cambiando eso y con todas las combinaciones posibles, pero en la base de datos solo me guarda array, tal cual, no la lista de los checkbox seleccionados
por eso pedia ayuda para poder solucionarlo, ya que por mas vueltas que le he dado no he conseguido que funcione.
de nuevo gracias por arrojar un poco de luz a mi problema.
le seguire dando vueltas

un saludo

INDUMA
  #8 (permalink)  
Antiguo 16/03/2010, 05:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: array+php+mysql, un empujoncito?

Cita:
Iniciado por Induma Ver Mensaje
gracias jordinogue por una respuesta mas que aceptable sobre el tema
el problema es que he probado ya cambiando eso y con todas las combinaciones posibles, pero en la base de datos solo me guarda array, tal cual, no la lista de los checkbox seleccionados
por eso pedia ayuda para poder solucionarlo, ya que por mas vueltas que le he dado no he conseguido que funcione.
de nuevo gracias por arrojar un poco de luz a mi problema.
le seguire dando vueltas

un saludo

INDUMA
bingo!!

esa información la habías omitido intencionalmente??

si en la BD se almacena literalmente como Array entonces tu variable no la has convertido apropiadamente antes de...

en todo caso procura depurar tus variables antes de utilizarlas... ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 16/03/2010, 06:06
 
Fecha de Ingreso: enero-2004
Ubicación: en mi casa
Mensajes: 29
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: array+php+mysql, un empujoncito?

pateketrueke, sinceramente, no todos tenemos tus "conocimientos" sobre php, ni mucho menos tu excepcional cabeza para resolver problemas y mucho menos la "sabiduría" que demuestras resolviéndolos.
muchas gracias por solucionar el error, ahora ya podre tranquilamente dedicarme a otra cosa, como podar cactus.
un saludo

INDUMA
  #10 (permalink)  
Antiguo 16/03/2010, 06:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: array+php+mysql, un empujoncito?

a ver... ¿es sarcasmo??

porque en primer lugar en tu código no veo donde utilizas dicha variable de array para el INSERT ¿cual INSERT??

ahora suponiendo que ya tienes un array, es sencillo... y de hecho, ya tienes la respuesta desde que abriste el tema, solo que no la estas aplicando correctamente...
Código PHP:
$foo = array(135);
$bar serialize($foo);

$sql "INSERT INTO tabla(baz) VALUES('$bar')"
si lo que esperabas era código... ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 16/03/2010, 07:17
 
Fecha de Ingreso: enero-2004
Ubicación: en mi casa
Mensajes: 29
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: array+php+mysql, un empujoncito?

osea, que me faltaria el $sql... no?
pero si eso ya esta definido al principio del codigo, que debo, borrarlo del principio y ponerlo mas adelante o crear otra conexion?

si, era sarcasmo, ya que no puedes ir de saberlo sin explicarlo, como has hecho ahora esta bien, no pido codigo, sino explicaciones de como funcionan las cosas, y para los novatos nos es mas facil asimilar si podemos comparar con alguno que no tenga errores.
  #12 (permalink)  
Antiguo 16/03/2010, 08:10
 
Fecha de Ingreso: septiembre-2005
Mensajes: 14
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: array+php+mysql, un empujoncito?

Mira Induma, lo mejor para estos casos es empezar con ejemplos sencillos e ir añadiendo cosas al asunto, por ejemplo, copia esto en un documento nuevo:

<html>
<head>
</head>
<body>
<form name="ejemplo" action="pruebacheck.php?tip=1" method="post">

Seleccione opcion/es:<br>
<input type="checkbox" name="opcion[]" value="Opcion 1">Opcion 1<br>
<input type="checkbox" name="opcion[]" value="Opcion 2">Opcion 2<br>
<input type="checkbox" name="opcion[]" value="Opcion 3">Opcion 3<br>
<input type="submit" value="comprobar">
</form>
<?
if($HTTP_GET_VARS["tip"]=="1"){
echo "Has escogido las siguientes opciones: ";
foreach($HTTP_POST_VARS["opcion"] as $value){
echo $value." ";
}
}
?>
</body>
</html>

Y guarda la página como pruebacheck.php

Fijate que es muy sencillo, pero te servirá mucho para ver el procedimiento de los checks y el foreach.
Luego, cambia echo $value." "; por lo que quieras que haga. Por ejemplo:
$insertar="INSERT INTO nombretabla (campo) VALUES ($value)";
mysql_query($insertar);

o usa como usabas serialize para agrupar los datos.

Pero ojo, como te decia antes, solo se envian los checks que estan marcados. Es decir, si marco 2 mi array tendrá 2 elementos, si marco 3 tendrá 3, etc... Lo digo porque si quieres insertar, por ejemplo 10 productos, y en tres has marcado que caducan pronto vas a tener 2 arrays distintos (10 productos y 3 checks) ya que si el check no esta marcado no vale 0 sino que simplemente no existe. No sé si te he ayudado o te habré liado aún más jajajaja. A partir de ahí sigue probando!!!

Última edición por jordinogue; 16/03/2010 a las 08:30
  #13 (permalink)  
Antiguo 16/03/2010, 10:37
 
Fecha de Ingreso: marzo-2010
Ubicación: Lima, Perú
Mensajes: 136
Antigüedad: 14 años, 1 mes
Puntos: 2
Sonrisa Respuesta: array+php+mysql, un empujoncito?

Cita:
Iniciado por Induma Ver Mensaje
si, era sarcasmo, ya que no puedes ir de saberlo sin explicarlo, como has hecho ahora esta bien, no pido codigo, sino explicaciones de como funcionan las cosas, y para los novatos nos es mas facil asimilar si podemos comparar con alguno que no tenga errores.
Me encanta ver como los novatos se escudan en el hecho de que no saben para querer tener respuestas "amistosas".
  #14 (permalink)  
Antiguo 27/03/2010, 13:09
 
Fecha de Ingreso: enero-2004
Ubicación: en mi casa
Mensajes: 29
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: array+php+mysql, un empujoncito?

muy buenas de nuevo!!
lo primero pedir disculpas por no contestar antes, pero estaba de viaje y pense que se habia zanjado ya el tema, me alegro de que no, jejejejeje
muchas gracias jordinogue por la extensa explicacion funciona bien, lo malo es cuando intento meter esos datos en la BD, me los duplica tantas veces como opciones marque.
he intentado con implode y con serialize y con los dos me sucede lo mismo
este es el codigo que he añadido para sustituir echo $value;
Código PHP:
<?
if($HTTP_GET_VARS["tip"]=="1"){
foreach(
$HTTP_POST_VARS["opcion"] as $value){
$value=implode(", "$HTTP_POST_VARS['opcion']);
$insertar="INSERT INTO trato (val) VALUES ('$value')";
mysql_query($insertar);}
}
?>
y este el codigo completo
Código PHP:
<?php
    $conexion 
mysql_connect("local""user""pass");
    
mysql_select_db("valor"$conexion);
?>
<html>
<head>
</head>
<body>
<form name="ejemplo" action="pruebacheck.php?tip=1" method="post">

Seleccione opcion/es:<br>
<input type="checkbox" name="opcion[]" value="Opcion 1">1<br>
<input type="checkbox" name="opcion[]" value="Opcion 2">2<br>
<input type="checkbox" name="opcion[]" value="Opcion 3">3<br>
  <input type="submit" name="Submit" value="Insertar Registro" />
</form>
<?
if($HTTP_GET_VARS["tip"]=="1"){
foreach(
$HTTP_POST_VARS["opcion"] as $value){
$value=implode(", "$HTTP_POST_VARS['opcion']);
$insertar="INSERT INTO trato (val) VALUES ('$value')";
mysql_query($insertar);}
}
?>
</body>
</html>
cual podria ser el fallo?
muchas gracias por todo
un saludo

INDUMA
  #15 (permalink)  
Antiguo 30/03/2010, 13:47
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: array+php+mysql, un empujoncito?

Huh, pues porque es exactament lo que le estas diciendo.. recorres el array de los check seleccionados, y por cada iteracion, insertas todos los seleccionados, si sabes como funciona foreach() e implode(), tu error es mas bien de logica :/
  #16 (permalink)  
Antiguo 07/04/2010, 19:53
 
Fecha de Ingreso: enero-2004
Ubicación: en mi casa
Mensajes: 29
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: array+php+mysql, un empujoncito?

sinceramente y sin animo de ofender a nadie, si supiera como funcionan no habria abierto este hilo, una contestacion de logica :/
un saludo
  #17 (permalink)  
Antiguo 09/04/2010, 04:54
 
Fecha de Ingreso: septiembre-2005
Mensajes: 14
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: array+php+mysql, un empujoncito?

Hola Induma, varias cosas:
1- Si lo que quieres es guardar los valores por separado (es decir, cada opcion en un registro) simplemente borra la linea

Código PHP:
Ver original
  1. $value=implode(", ", $HTTP_POST_VARS['opcion']);

2- Si lo que quieres es guardar todos los valores clicados juntos en un solo registro luego debemos cambiar algo el concepto. No puedes hacer el insert para cada opcion sino que debemos almacenar todos los valores en una variable y luego insertarla.

Código PHP:
Ver original
  1. if($HTTP_GET_VARS["tip"]=="1"){
  2. $i=0;
  3. $coma="";
  4. foreach($HTTP_POST_VARS["opcion"] as $value){
  5. $value2.=$coma.$HTTP_POST_VARS["opcion"][$i];
  6. $coma=", ";
  7. $i++;
  8. }
  9. $insertar="INSERT INTO trato (val) VALUES ('$value2')";
  10. mysql_query($insertar);
  11. }

Uso la variable
Código PHP:
Ver original
  1. $i
para poder recorrer todos los valores de la matriz que contiene los valores de opcion.

Uso la variable
Código PHP:
Ver original
  1. $coma
para poner las comas entre cada valor excepto en el primero.

Y fijate en que concateno la variable
Código PHP:
Ver original
  1. $value2
(es decir, el punto) para que vaya uniendo todos los valores. Si no pones el punto te cambiaria el valor a cada foreach.
Y fijate también que el insert queda fuera del foreach porque en este caso solo insertamos un solo registro.
Espero que te haya aclarado un poquito tus dudas.
Saludos!!

Última edición por jordinogue; 09/04/2010 a las 12:16

Etiquetas: Ninguno
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 00:47.