Comunidad de diseño web y desarrollo en internet online

restriccion en php

Citar            
MensajeEscrito el 06 Sep 2009 05:51 am
amigos tengo el siguiente codigo en el cual recojo algunos datos mediante un formulario en el cual en un campo recojo un dato en un combobox, lo que quiero hacer es limitar a que esos campos del combobox solo recojan 40 datos, es decir el combobox asigna salones a los alumnos, si tiene 40 alumnos, hay alguna forma de mandarle un msg al usuario que el salon esta lleno, o que el salon lleno desaparezca del combobox?
este es mi codigo:

Código PHP :

<?php require_once('Connections/siscam.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $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"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO alumnos (nombre, matricula, horario, aula) VALUES (%s, %s, %s, %s)",
                       GetSQLValueString($_POST['nombre'], "text"),
                       GetSQLValueString($_POST['matricula'], "text"),
                       GetSQLValueString($_POST['horario'], "text"),
                       GetSQLValueString($_POST['aula'], "text"));

  mysql_select_db($database_siscam, $siscam);
  $Result1 = mysql_query($insertSQL, $siscam) or die(mysql_error());

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

mysql_select_db($database_siscam, $siscam);
$query_aula = "SELECT grupo_crea FROM grupos";
$aula = mysql_query($query_aula, $siscam) or die(mysql_error());
$row_aula = mysql_fetch_assoc($aula);
$totalRows_aula = mysql_num_rows($aula);

mysql_select_db($database_siscam, $siscam);
$query_horario = "SELECT hora FROM horarios";
$horario = mysql_query($query_horario, $siscam) or die(mysql_error());
$row_horario = mysql_fetch_assoc($horario);
$totalRows_horario = mysql_num_rows($horario);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Nombre:</td>
      <td><input type="text" name="nombre" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Matricula:</td>
      <td><input type="text" name="matricula" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Horario:</td>
      <td><select name="horario">
        <option value="menuitem1" >seleccionar</option>
        <?php
do {  
?>
        <option value="<?php echo $row_horario['hora']?>"><?php echo $row_horario['hora']?></option>
        <?php
} while ($row_horario = mysql_fetch_assoc($horario));
  $rows = mysql_num_rows($horario);
  if($rows > 0) {
      mysql_data_seek($horario, 0);
     $row_horario = mysql_fetch_assoc($horario);
  }
?>
      </select>
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Aula:</td>
      <td><select name="aula">
        <option value="menuitem1" >seleccionar</option>
        <?php
do {  
?>
        <option value="<?php echo $row_aula['grupo_crea']?>"><?php echo $row_aula['grupo_crea']?></option>
        <?php
} while ($row_aula = mysql_fetch_assoc($aula));
  $rows = mysql_num_rows($aula);
  if($rows > 0) {
      mysql_data_seek($aula, 0);
     $row_aula = mysql_fetch_assoc($aula);
  }
?>
      </select>
      </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="form1">
</form>
<p>&nbsp;</p>
</body>
</html>
<?php
mysql_free_result($aula);

mysql_free_result($horario);
?>

Por beto20

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Sep 2009 10:52 am
Esa restricción deberías hacerla con JavaScript, no con PHP.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 06 Sep 2009 02:52 pm

DriverOp escribió:

Esa restricción deberías hacerla con JavaScript, no con PHP.


Más equivocada no puede ser tu respuesta. Javascript solo sirve para mejorar la experiencia del usuario, no para validar.

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 06 Sep 2009 07:21 pm
entonces como pondria una restriccion para ke solo me acepte cierto numero de datos?

Por beto20

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Sep 2009 05:30 pm
Debes contar los registros que hay en la tabla de la base de datos y luego le sumas el total de los que tienes en cola para insertar... si supera el máximo, emite un mensaje de error sino insertas los registros.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 07 Sep 2009 06:23 pm

Maikel escribió:

Más equivocada no puede ser tu respuesta. Javascript solo sirve para mejorar la experiencia del usuario, no para validar.

En un sentido tienes toda la razón. Y la culpa es mía por no haber matizado mejor mi respuesta. Pero yo hablé de restricción, no de validación.

Para el caso JavaScript se encargaría de que el visitante no pueda seleccionar más de 40 items a la vez pero por supuesto eso no quita que luego en PHP hagas de nuevo esa validación, tal como dices; y mi idea se debe a que el visitante, si no cumple con esa condición no se vea forzado a volver a seleccionar lo que ya seleccionó, si el visitante ve que no puede seleccionar más de 40 sabrá en ese momento que esa es la restricción.

beto20
Como primera medida debes cambiar el tag select:

Código PHP :

<select name="multiples[]" size="5" multiple id="multiples" onChange="ValidarSelect()">


el código de la función JS sería algo así:

Código PHP :

<script language="JavaScript" type="text/JavaScript">
function ValidarSelect() {
  var s = document.getElementById("multiples");
  var c = 0;
  for (var i=0;i<s.options.length;i++) {
    if (s.options[i].selected) { c++; }
    if (c > 3) {
       s.options[s.selectedIndex].selected = false;
       window.alert("No más selecciones."); 
      break;
       } // if
  }
}
</script>


Al haber declarado el name del select como array, en PHP obtendrás un array con ese nombre e índice numérico.

Código PHP :

$selector = $_POST["multiple"];
if (count($selector) > 40) { echo "No puedes seleccionar m&aacute;s de 40 items."; exit; }

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 07 Sep 2009 07:09 pm

DriverOp escribió:

Para el caso JavaScript se encargaría de que el visitante no pueda seleccionar más de 40 items a la vez pero por supuesto eso no quita que luego en PHP hagas de nuevo esa validación, tal como dices; y mi idea se debe a que el visitante, si no cumple con esa condición no se vea forzado a volver a seleccionar lo que ya seleccionó, si el visitante ve que no puede seleccionar más de 40 sabrá en ese momento que esa es la restricción.


Exacto, eso es mejorar la experiencia del usuario y no una validación como tal.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 09 Sep 2009 05:37 am
muchas gracias a todos, no habia venido al foro por ke me habia kedado sin modem, pero checare sus respuestas, muchas gracias a todos

Por beto20

2 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.