Foros del Web » Programando para Internet » PHP »

select en fomulario con base de datos y validacion de telefono

Estas en el tema de select en fomulario con base de datos y validacion de telefono en el foro de PHP en Foros del Web. Hola a todos, tengo un nuevo problema, tengo que modificar una fila de la base de datos, para ello mediante un boton en la fila ...
  #1 (permalink)  
Antiguo 18/03/2010, 05:55
Avatar de dengaku  
Fecha de Ingreso: enero-2010
Mensajes: 69
Antigüedad: 14 años, 3 meses
Puntos: 1
select en fomulario con base de datos y validacion de telefono

Hola a todos, tengo un nuevo problema, tengo que modificar una fila de la base de datos, para ello mediante un boton en la fila indicada hago clic y pasa a la pagina modifica_libro.php, ahi muestro un formulario con campos de texto que me muestran los datos de esa fila en cuestion, pero quiero que en el campo id_autor, no me meustre la ID, y me muestre el nombre del escritor mediante una lista desplegable (es decir en mi tabla libros tengo idautor, y en la tabla autores tengo id_autor ademas de su nombre, en vez de que salga su id salga su nombre y me deje seleccionarlo pero que al enviar el formulario me guarde el id del autor en al tabla libro junto al resto de datos.
Código:
<?PHP

//Iniciar sesión
session_start();

        include("libreria1.php");
		$conexion=conecta();
		$cod_libro=$_REQUEST[codigo];
   
if (isset ($_REQUEST[modificar])){
    $errores = false;
	$cod_libro=$_REQUEST[cod_libro];
	$titulo = $_REQUEST['titulo'];
	$editorial = $_REQUEST['editorial'];
	$idautor = $_REQUEST['idautor'];
	$categoria = $_REQUEST['categoria'];
	$copias = $_REQUEST['copias'];
	$precio = $_REQUEST['precio'];
	$imagen = $_REQUEST['imagen'];
	if ($titulo=="") { 
	   $error[1]='  Complete el titulo'; 
	   $errores=true;}
	if ($editorial=="") { 
	   $error[2]='  Complete la editorial'; 
	   $errores=true;}
	if ($idautor=="") { 
	   $error[3]='  Complete el ID del autor'; 
	   $errores=true;}
	if ($categoria=="") { 
	   $error[4]='  Complete la categoria'; 
	   $errores=true;}
	if ($copia=="") { 
	   $error[5]='  Complete el numero de copias'; 
	   $errores=true;}
	if ($precio=="") { 
	   $error[6]='  Complete el precio'; 
	   $errores=true;}
//print $errores."..........";
}

if (isset ($_REQUEST[modificar]) and $errores!=0){
	
$conexion=mysql_connect("localhost","root","") or
             die("Problemas en la conexion");
mysql_select_db("bdlibro",$conexion) or
             die("Problemas en la selección de la base de datos");
$sql="update libros set titulo='$titulo', editorial='$editorial', categoria='$categoria', copias='$copias', precio='$precio' where cod_libro='$cod_libro'";
//print $sql;
$registros=mysql_query($sql,$conexion) or
              die("Problemas en el select:".mysql_error());
//  echo "El libro fue modificado";
		$pagina="carrito.php";
		header("Location:$pagina");
 }
else{

$conexion=mysql_connect("localhost","root","") or
             die("Problemas en la conexion");
mysql_select_db("bdlibro",$conexion) or
             die("Problemas en la selección de la base de datos");
$sql2="select * from libros where cod_libro='$cod_libro'";
$registros=mysql_query($sql2,$conexion) or 
             die("Problemas en el select:".mysql_error());
if ($fila=mysql_fetch_array($registros))
{ 

  print '<form action="modifica_libro.php" method="post">';

  print '<input type="hidden" name="cod_libro" value="'.$fila['cod_libro'].'">';
  print "<br>Titulo: ";
  print '<input type="text" name="titulo" value="'.$fila['titulo'].'">';
  		 print ("<font color='#990033'>$error[1]</font><BR>");
  print "<br>Editorial: ";
  print '<input type="text" name="editorial" value="'.$fila['editorial'].'">';
        print ("<font color='#990033'>$error[2]</font><BR>");
  print "<br>Id del Autor: ";
			$sql10="select nombre from autores where id_autor ='".$reg['idautor']."'";
			$autores=mysql_query($sql10,$conexion) or
  					die("Problemas en el select:".mysql_error());
			while ($reg_a=mysql_fetch_array($autores)){
				print "<td><select name='autores'>
							<option value=".$reg_a['nombre'].">
							</select></td>";
			}
//  print '<input type="text" name="idautor" value="'.$fila['idautor'].'">';
//        print ("<font color='#990033'>$error[3]</font><BR>");
  print "<br>categoria: ";
  print '<input type="text" name="categoria" value="'.$fila['categoria'].'">';
  		 print ("<font color='#990033'>$error[4]</font><BR>");
  print "<br>copias: ";
  print '<input type="text" name="copias" value="'.$fila['copias'].'">';
        print ("<font color='#990033'>$error[5]</font><BR>");
  print "<br>precio: ";
  print '<input type="text" name="precio" value="'.$fila['precio'].'">';
        print ("<font color='#990033'>$error[6]</font><BR>");
  print '<br>';


  print '<br>';  
  print '<input type="submit" name="modificar" value="modificar">';
  print '</form>';
}
 }
?>
</body>
</html>
El problema exacto es que e empezado a ahcer esto pero no se como seguir:
Código:
 print "<br>Id del Autor: ";
			$sql10="select nombre from autores where id_autor ='".$reg['idautor']."'";
			$autores=mysql_query($sql10,$conexion) or
  					die("Problemas en el select:".mysql_error());
			while ($reg_a=mysql_fetch_array($autores)){
				print "<td><select name='autores'>
							<option value=".$reg_a['nombre'].">
							</select></td>";
			}
Mi siguiente consulta es si alguien sabe comprobar (en un formulario) en php un campo telefono con solo 9 numeros ni uno mas ni uno menos por ejemplo 636789735.
  #2 (permalink)  
Antiguo 18/03/2010, 06:03
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: select en fomulario con base de datos y validacion de telefono

Creo q Inner Join es tu respuesta
  #3 (permalink)  
Antiguo 18/03/2010, 06:10
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: select en fomulario con base de datos y validacion de telefono

Hola dengaku.

En respuesta a la primera pregunta y suponiendo que quieres seleccionar un nuevo autor, sin tener en cuenta el que tenía de antes te digo que la consulta a la DB debe ser tal que así
Código PHP:
Ver original
  1. $consulta = "Select id_autor, nombre_autor From tabla_autores";
  2. $resultado=mysql_query($consulta, $conexion);
Luego el select lo reienas así
Código PHP:
Ver original
  1. echo"<select name='nombre_select' value=''>";
  2. while($fila = mysql_fetch_row($resultado))
  3. {
  4. echo"<option name='nombre_select' value $fila[0]>$fila[1]</option>";
  5. }
  6. echo"</select>";

Sobre la otra pregunta debo decirte que las validaciones suelen hacerse con javascript, en el cliente, entre otras cosas para que pese menos el script y sea más rápido el proceso.
Siendo así debes iamar al evento javascript en un onblur del input type='text' que recoja el teléfono y tratarlo de la siguiente forma
Código Javascript:
Ver original
  1. function compruebaTlfn(tel)
  2. {
  3. var digitos = tel.length();
  4. if(digitos != 9)
  5. return (false);
  6. else
  7. return (true);
  8. }

Espero haberte sido de aiuda.

Un saludo!!
  #4 (permalink)  
Antiguo 18/03/2010, 06:14
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 5 meses
Puntos: 16
Respuesta: select en fomulario con base de datos y validacion de telefono

Código PHP:
Ver original
  1. print "<br>Id del Autor: ";
  2.             $sql10="select nombre from autores where id_autor ='".$reg['idautor']."'";
  3.             $autores=mysql_query($sql10,$conexion) or
  4.                     die("Problemas en el select:".mysql_error());
  5.             while ($reg_a=mysql_fetch_array($autores)){
  6.                 print "<td><select name='autores'>
  7.                             <option value=".$reg_a['nombre'].">
  8.                             </select></td>";
  9.                         <option value=".$reg_a['nombre'].">
  10.                             </select></td>";
  11.             }
Pero no te saque el nombre del autor ahí? :S Si te lo saca añadele por ejemplo $autor=$reg_a['nombre'] Y lo podrás sacar(si siempre es el mismo).

Por lo de validar, busca ereg o preg_match, mejor esta segunda ;)
  #5 (permalink)  
Antiguo 18/03/2010, 06:26
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: select en fomulario con base de datos y validacion de telefono

Cita:
Iniciado por dengaku Ver Mensaje
Hola a todos, tengo un nuevo problema, tengo que modificar una fila de la base de datos, para ello mediante un boton en la fila indicada hago clic y pasa a la pagina modifica_libro.php, ahi muestro un formulario con campos de texto que me muestran los datos de esa fila en cuestion, pero quiero que en el campo id_autor, no me meustre la ID, y me muestre el nombre del escritor mediante una lista desplegable (es decir en mi tabla libros tengo idautor, y en la tabla autores tengo id_autor ademas de su nombre, en vez de que salga su id salga su nombre y me deje seleccionarlo pero que al enviar el formulario me guarde el id del autor en al tabla libro junto al resto de datos.
Quizás entendí mal, pero parece que lo q quiere es hacer una consulta a la tabla libros (q tiene id_autor) y que le salga el nombre del autor (de la tabla autores)
  #6 (permalink)  
Antiguo 18/03/2010, 06:27
Avatar de dengaku  
Fecha de Ingreso: enero-2010
Mensajes: 69
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: select en fomulario con base de datos y validacion de telefono

Buf haber (soy espeso)... me tiene que mostrar un select con los nombres en vez del id (el nombre no está en al tabla libros, si no en autores) y ahi yo elijo uno, deberia mostrarme el autor que tenia antes.
Con lo del telefono no se como hacerlo si pudiera alguien hacer una comprobacion debe ser en php de un telefono con 9 números

inner join nunca habia escuchado eso (normal, soy novatillo)
  #7 (permalink)  
Antiguo 18/03/2010, 06:30
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: select en fomulario con base de datos y validacion de telefono

¿Has visto los ejemplos que te posteé?
  #8 (permalink)  
Antiguo 18/03/2010, 06:34
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 5 meses
Puntos: 16
Respuesta: select en fomulario con base de datos y validacion de telefono

print "<br>Id del Autor: ";
print "<td><select name='autores'>
$sql10="select nombre from autores where id_autor ='".$reg['idautor']."'";
$autores=mysql_query($sql10,$conexion) or
die("Problemas en el select:".mysql_error());
while ($reg_a=mysql_fetch_array($autores)){

echo "<option value=\"$reg_a['nombre'].\">"
echo "</td>";
}
echo "</select>";

Valla, si inicias el select antes de las respuetas y lo acabas despues.. :S

Sobre lo del numero http://techtastico.com/post/8-expres...hp-muy-utiles/

Si buscas en google validar telefono php, te sale bastante bien :P
  #9 (permalink)  
Antiguo 18/03/2010, 06:43
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: select en fomulario con base de datos y validacion de telefono

Cita:
Iniciado por dengaku Ver Mensaje
Buf haber (soy espeso)... me tiene que mostrar un select con los nombres en vez del id (el id no está en al tabla libros, si no en autores) y ahi yo elijo uno, deberia mostrarme el autor que tenia antes.
Con lo del telefono no se como hacerlo si pudiera alguien hacer una comprobacion debe ser en php de un telefono con 9 números
A ver deganku, entonces lo que quieres es que el select te muestre primero el nombre del autor que tenía seleccionado el libro en la base de datos y, desplegando el menú, los demás autores, no?
Eso se haría así
Código PHP:
$conexion conectar();//meto el resultado de la conexion en la variable
//con esta consulta obtienes el autor del libro
$consulta_autor "Select id_autor from tabla_libros where id_libro = id";
$resulta_autor mysql_query($consulta_autor$conexion);
$autor $resulta_autor[0];//aquí guardas el id del autor original
//obtienes todos los autores
$consulta "Select id_autor, nombre_autor From tabla_autores";
$resultado mysql_query($consulta$conexion);
mysql_lose($conexion);

echo
"<select name='nombre_select' value=' '>";
while(
$fila mysql_fetch_row($resultado))
{
    
echo
"<option name='nombre_select' value='$fila[0]'";
   
//Esto hará que te muestra primero el autor que estaba definido
   
if($fila[0] == $autor)
        echo 
"selected";
    echo
">$fila[1]</option>";
}
 echo
"</select>"
Luego, para comprobar los caracteres del teléfono tienes que meterlo primero en una variable
Código PHP:
$telefono $_POST['telefono'];
if(
strlen($telefono) != 9)
  echo
"Telefono incorrecto";
else
  echo
"Teléfono correcto" 
  #10 (permalink)  
Antiguo 20/03/2010, 03:43
Avatar de dengaku  
Fecha de Ingreso: enero-2010
Mensajes: 69
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: select en fomulario con base de datos y validacion de telefono

Creoq eu estoy medio viendo al luz, pero tengo un problema con el select y es el siguiente,
Código PHP:
  print "<br>Id del Autor: ";
$consulta_autor "Select idautor from libros where cod_libro = $cod_libro";
$resulta_autor mysql_query($consulta_autor$conexion);
$autor $resulta_autor[0];//aquí guardas el id del autor original
//obtengo todos lso autores
$consulta "Select id_autor, nombre From autores"
$resultado mysql_query($consulta$conexion); 
mysql_close($conexion);  
echo
"<select name='nombre_select' value=' '>"
while(
$fila mysql_fetch_row($resultado)) 

     
echo
"<option name='nombre_select' value='$fila[0]'"
   
//Esto hace que muestre primero el autor que estaba definido 
   
if($fila[0] == $autor
        echo 
"selected"
    echo
">$fila[1]</option>"

 echo
"</select>"
eso efectivamente me muestra una lista desplegable con los autores, pero cuando el doy a modificar no continua y me dice lo siguiente
Problemas en el select:Cannot add or update a child row: a foreign key constraint fails (`bdlibro`.`libros`, CONSTRAINT `cafc` FOREIGN KEY (`idautor`) REFERENCES `autores` (`id_autor`))
Algo de la clave ajena, y ademas siempre empieza por el primer autor no por el que tiene esa fila me estoy desquiciando XD
Y todo ese codigo lo pongo al final del formulario antes del submit, porke si lo pongo entre las demás cajas de texto, los de debajo de el no em muestran nada.
  #11 (permalink)  
Antiguo 22/03/2010, 02:49
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: select en fomulario con base de datos y validacion de telefono

Cita:
Iniciado por dengaku Ver Mensaje
$consulta_autor = "Select idautor from libros where cod_libro = $cod_libro";
$resulta_autor = mysql_query($consulta_autor, $conexion);
$autor = $resulta_autor[0];//aquí guardas el id del autor original
Lo de la clave ajena ahora mismo no puedo explorar a qué se debe dengaku. Lo que sí puedo decir es por qué no te muestra el autor al principio en el select.

No le has hecho el mysql_fetch_row a $resulta_autor para posicionarte en la primera fila(en este caso también la única).

Entonces sería
Código PHP:
$consulta_autor "Select idautor from libros where cod_libro = $cod_libro";
$resulta_autor mysql_query($consulta_autor$conexion);
$autor mysql_fetch_row($resulta_autor);
echo
"El id del autor es: $autor[0]"
Mira a ver qué pasa ahora y me cuentas, ok?
Un saludo!!
  #12 (permalink)  
Antiguo 22/03/2010, 07:52
Avatar de dengaku  
Fecha de Ingreso: enero-2010
Mensajes: 69
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: select en fomulario con base de datos y validacion de telefono

Pues bien esto ya va ^^ muchas gracias a todo el que se a molestado y por darme esas pistas :P

Código PHP:
<?PHP

//Iniciar sesión
session_start();

        include(
"libreria1.php");
        
$conexion=conecta();
$cod_libro=$_REQUEST['codigo'];
   
if (isset (
$_REQUEST[modificar])){
    
$errores false;
    
print_r($_REQUEST);
    
//$cod_libro2=$_REQUEST['cod_libro'];
    
$titulo $_REQUEST['titulo'];
    
$editorial $_REQUEST['editorial'];
    
$idautor $_REQUEST['idautor'];
    
$categoria $_REQUEST['categoria'];
    
$copias $_REQUEST['copias'];
    
$precio $_REQUEST['precio'];
    
$imagen $_REQUEST['imagen'];
    if (
$titulo=="") { 
       
$error[1]='  Complete el titulo'
       
$errores=true;}
    if (
$editorial=="") { 
       
$error[2]='  Complete la editorial'
       
$errores=true;}
    if (
$categoria=="") { 
       
$error[4]='  Complete la categoria'
       
$errores=true;}
    if (
$copias=="") { 
       
$error[5]='  Complete el numero de copias'
       
$errores=true;}
    if (
$precio=="") { 
       
$error[6]='  Complete el precio'
       
$errores=true;}
print 
$errores."..........";
//print"$idautor";
}

if (isset (
$_REQUEST[modificar]) and $errores==false){
    
$conexion=conecta();
$sql="update libros set titulo='$titulo', editorial='$editorial', idautor='$idautor', categoria='$categoria', copias='$copias', precio='$precio' where cod_libro=".$cod_libro;
print 
$sql;
$registros=mysql_query($sql,$conexion) or
              die(
"Problemas en el update".mysql_error());
 echo 
"El libro fue modificado";
        
$pagina="carrito.php";
//        header("Location:$pagina");
 
}
else{
//print "eeeeeee";
$conexion=conecta();
$sql2="select * from libros where cod_libro=".$cod_libro;
$registros=mysql_query($sql2,$conexion) or 
             die(
"Problemas en el select libro:".mysql_error());
if (
$fila=mysql_fetch_array($registros))


  print 
'<form action="modifica_libro.php" method="post">';

  print 
'<input type="hidden" name="codigo" value="'.$fila['cod_libro'].'">';
  print 
"<br>Titulo: ";
  print 
'<input type="text" name="titulo" value="'.$fila['titulo'].'">';
           print (
"<font color='#990033'>$error[1]</font><BR>");
  print 
"<br>Editorial: ";
  print 
'<input type="text" name="editorial" value="'.$fila['editorial'].'">';
        print (
"<font color='#990033'>$error[2]</font><BR>");
//  print '<input type="text" name="idautor" value="'.$fila['idautor'].'">';
//        print ("<font color='#990033'>$error[3]</font><BR>");
  
print "<br>categoria: ";
  print 
'<input type="text" name="categoria" value="'.$fila['categoria'].'">';
           print (
"<font color='#990033'>$error[4]</font><BR>");
  print 
"<br>copias: ";
  print 
'<input type="text" name="copias" value="'.$fila['copias'].'">';
        print (
"<font color='#990033'>$error[5]</font><BR>");
  print 
"<br>precio: ";
  print 
'<input type="text" name="precio" value="'.$fila['precio'].'">';
        print (
"<font color='#990033'>$error[6]</font><BR>");
  
  print 
"<br>Id del Autor: ";

$autor=$fila['idautor'];  
$consulta "Select id_autor, nombre From autores"
$resultado mysql_query($consulta$conexion); 
 
echo
"<select name='idautor'>"

while(
$fila2 mysql_fetch_array($resultado)) 

     echo
"<option value='".$fila2[id_autor]."'"
   
//Esto hace que muestre primero el autor que estaba definido 
   
if($fila2['id_autor'] == $autor
        echo 
"selected "
    echo 
">".$fila2['nombre']."</option>"

 echo 
"</select>";
    

  print 
'<br>';
  print 
"$idautor";  
  print 
'<input type="submit" name="modificar" value="modificar">';
  print 
'</form>';
}
 }
?>
</body>
</html>
al poner $fila machacaba lo recogido asi que lo e llamado $fila2 y otros problemillas de nombres de tabla etc y ya me va, y con respecto a lo del telefono al final lo e dejado asi
Código:
$patron3 = "^(9|6)[[:digit:]]{8}$";
luego en un array de errores hago
Código:
if (! eregi($patron3,$tel)){ 
	   $error[3]='  Complete el Telefono'; 
	   $errores=true;}
y esto ya va, muchas gracias de verdad ^^
pal que quiera el validar el telefono solo toma bien lso telefonos ke empiecen por 6 o 9 y que tengan en total 9 numeros.

Etiquetas: select
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 03:57.