Tengo un problema con un formulario con el que envío datos a una base de datos mysql utilizando un array.
Todo va perfecto salvo cuando en el formulario introduzco un checkbox para pasarle el valor 0 ó 1 a la BD.
He probado de dos maneras (con dos resultados distintos) pero no consigo obtener lo que quiero.
El código ha sido generado con DW, pero ha sido ligeramente adaptado a mis necesidades
Este es el código que uso:
Código PHP:
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
foreach($_POST['input'] as $key => $val){
$insertSQL = sprintf("INSERT INTO tabla (input, check) VALUES ($val, %s)",
GetSQLValueString(isset($_POST['check']) ? "true" : "", "defined","1","0"));
mysql_select_db($database_db, $db);
$Result1 = mysql_query($insertSQL, $db) or die(mysql_error());
}
}
<body>
<form id="form" name="form" method="post" action="<?php echo $editFormAction; ?>"
<table>
<tr>
<td>input 1</td>
<td>
<input type="text" name="input[]" value="" />
</td>
<td align="center" valign="middle">
<input name="check[]" type="checkbox"/>
</td>
</tr>
<tr>
<td>input 2</td>
<td>
<input type="text" name="input[]" value="" />
</td>
<td align="center" valign="middle">
<input name="check[]" type="checkbox"/>
</td>
</tr>
<tr>
<td>input 3</td>
<td>
<input type="text" name="input[]" value="" />
</td>
<td align="center" valign="middle">
<input name="check[]" type="checkbox"/>
</td>
</tr>
<tr>
<input type="hidden" name="MM_insert" value="form" />
<input type="submit" value="Insertar" />
</tr>
</table>
</form>
</body>
Con este código el resultado que obtengo es una BD con tres nuevos registros. Pero si en el formulario había activado el checkbox en alguno de los tres inputs, siempre le pasará el valor 1 al primero de los registros. Da igual que active el primero, el segundo o el tercero, siempre se lo pasará al primer registro.
Con esta pequeña modificación que le hice al código, el resultado es distinto, pero tampoco es válido:
Código PHP:
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
foreach($_POST['input'] as $key => $val){
$insertSQL = sprintf("INSERT INTO tabla (input, check) VALUES ($val, %s)",
GetSQLValueString($_POST['check'][$key], "int"));
mysql_select_db($database_db, $db);
$Result1 = mysql_query($insertSQL, $db) or die(mysql_error());
}
}
<body>
<form id="form" name="form" method="post" action="<?php echo $editFormAction; ?>"
<table>
<tr>
<td>input 1</td>
<td>
<input type="text" name="input[]" value="" />
</td>
<td align="center" valign="middle">
<input name="check[]" type="checkbox" value="1"/>
</td>
</tr>
<tr>
<td>input 2</td>
<td>
<input type="text" name="input[]" value="" />
</td>
<td align="center" valign="middle">
<input name="check[]" type="checkbox" value="1"/>
</td>
</tr>
<tr>
<td>input 3</td>
<td>
<input type="text" name="input[]" value="" />
</td>
<td align="center" valign="middle">
<input name="check[]" type="checkbox" value="1"/>
</td>
</tr>
<tr>
<input type="hidden" name="MM_insert" value="form" />
<input type="submit" value="Insertar" />
</tr>
</table>
</form>
</body>
De esta manera, lo que consigo es que sólo crea un nuevo registro y le asigna el valor 1 al campo check si activo cualquiera de los 3 checkboxes. Es decir, mantiene el mismo problema con los checkboxes que con el código anterior, pero ahora aparece otro problema, ya que no genera 2 de los 3 registros que debiera crear.
Espero haberme explicado bien y que sepáis ayudarme a solucionar este problema. He buscado bastante por internet, pero no consigo dar con la solución.
No dudéis en pedirme cualquier aclaración sobre lo que he escrito aquí.