Foros del Web » Programando para Internet » PHP »

Inicios con PHP

Estas en el tema de Inicios con PHP en el foro de PHP en Foros del Web. Hola estoy intentando aprender PHP, pero me ha surgido el primer problema - Tengo un archivo index.php en el que agregado un formulario a través ...
  #1 (permalink)  
Antiguo 10/01/2015, 06:19
 
Fecha de Ingreso: diciembre-2014
Mensajes: 4
Antigüedad: 9 años, 4 meses
Puntos: 0
Inicios con PHP

Hola estoy intentando aprender PHP, pero me ha surgido el primer problema

- Tengo un archivo index.php en el que agregado un formulario a través de un include.

- Tengo el formulario en el archivo form1.php.

Mi problema viene porque cuando intento agregar algo a la base de datos no hace nada.

--- index.PHP ---

body>
<?php include("/formularios/form1.php"); ?>

<?php
$conexion=mysql_connect("localhost","root","") or die("Problemas en la conexion");
mysql_select_db("base1",$conexion) or die("Problemas en la seleccion de la base de datos");
mysql_query("INSERT INTO alumnos(nombre,mail,codigocurso) VALUES 'Sergio','[email protected]','2012')");
?>
</body>

---form1.php---

<form id="form1" name="form1" method="post" action="../index.php">
Ingrese nombre:
<input type="text" name="nombre"/><br>
Ingrese mail:
<input type="text" name="mail"/><br>
Seleccione el curso:
<select name="codigocurso">
<option value="1">PHP</option>
<option value="2">ASP</option>
<option value="3">JSP</option>
</select>
<br>
<input type="submit" value="registrar"/>
</form>
  #2 (permalink)  
Antiguo 10/01/2015, 09:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Inicios con PHP

¿Y cómo estás depurando tu código para saber qué se está executando?

¿O esperas a que lo ejecutemos mentalmente y te digamos que hay mal?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 10/01/2015, 09:16
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Inicios con PHP

mysql_query("INSERT INTO alumnos(nombre,mail,codigocurso) VALUES 'Sergio','[email protected]','2012')");

$sql = "INSERT INTO alumnos(nombre, mail, codigocurso) VALUES ('Sergio', '[email protected]', '2012')";
mysql_query($sql);
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #4 (permalink)  
Antiguo 10/01/2015, 10:30
 
Fecha de Ingreso: enero-2015
Mensajes: 1
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Inicios con PHP

Cambialo así

Código HTML:
<!--Esta pagina se llama ahora    pagina.tmpl.php  y solo se encarga de mostrar la informacion    ->

<form method="post" action="">

<input type="text" name="nombre" placeholder="nombre"/>
<input type="text" name="mail" placeholder="email"/>

<select name="codigocurso">
<option value="1">PHP</option>
<option value="2">ASP</option>
<option value="3">JSP</option>
</select>
<input type="submit" name="submit" value="registrar"/>
</form> 
Luego en otra pagina (yo te recomendaria que todas las logicas las hagas en una pagina diferente y solo dejes el el php de arriba donde esta la forma sola, solo mostrar o recibir la data del controller -que en este caso esta abajo-), luego escribes esto:

Código PHP:
<?php 
//Este script esta en un archivo diferente de donde esta la forma a completar


try
{  
//Se conecta a la base de datos mysql a traves de pdo

    
$pdo=new PDO("mysql:host=localhost;dbname=base1","root","");
    
$pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

}catch(
PDOException $e)
  {
  
//Si encuentra un error a la hora de conectarse a la db, la linea de abajo te dira el error
    
die("No se pudo conectar a la base de datos, error: "$e->getMessage());
  }


//Cuando el usuario Aprete el bottom "Registrar"..

if(isset($_POST['submit'])){

//Guardamos los datos que el usuario escribio en variables:

 
$nombre$_POST["nombre"];
 
$email$_POST["mail"];
 
$curso$_POST["codigocurso"];
  
  
//Revisa si el usuario NO escribio algo en la forma
  
if(!nombre || !$email || !$curso) {

  echo 
"por favor llene los campos";
 
//Si el usuario lleno todos los datos:
} else {

 
//Preparamos el query
  
try
   {
      
$sql=$pdo->prepare("INSERT INTO 
      alumnos (nombre,mail,codigocurso) 
      VALUES       (:name,:mail,:curso) "
);

   
//Asignamos los valores(:name, :mail, etc) a las variables de arriba

    
$sql->bindValue("name",$nombre);
    
$sql->bindValue("mail",$email);
    
$sql->bindValue("curso",$curso);

//Finalmente ejecutamos el codigo
    
$sql->execute();

//Si encuentra un error...
    
}catch(PDOException $d)
      {
//El script se termina (porque usamos la funcio die() ) y nos da el mensaje del error:
         
die("No se pudo guardar datos, error: "$d->getMessage());
       }

   } 
}

include 
"pagina.tmpl.php";

Tambien estaria bueno como creaste la tabla alumnos.

Si estas en linux o mac, abri la terminal, conectate a la base de datos con:

mysql -u root -p

luego de que escribas el password y le des enter, entraras a mysql desde la terminal y luego escribes:

show databases;

luego para entrar a la base de datos donde esta alumnos escribes:

use tubasededatos;

"tubasededatos" es el nombre de tu base de datos. Luego cuando estes adentro escribe:

show tables;

ahi te mostrara todas las tablas, y si esta la tabla "alumnos", escribe:

describe alumnos:

Y listo, luego posteas lo que dice esa tabla en este post.

Bueno eso es mas o menos. Los errores de lo que escribiste en tu post son:


1-Al <form> tag no le pones name, eso solo se lo dejas a lo que va adentro del form.

2-El input con value="registrar" es el que se encarga de enviar los datos que el usuario subio, como vos no le escribiste un "name", el script no tiene idea de donde sacar los datos, al ultimo input con type="submit" agregale esto: name="submit". No tiene que llamarse submit en el name, le podes escribir lo que queres.

3- "mysql_query("INSERT INTO alumnos(nombre,mail,codigocurso) VALUES 'Sergio','[email protected]','2012')");

Como podes ver donde dice INSERTO INTO, significa que estas insertando valores a una tabla(en este caso alumnos), luego dice VALUES, en values vos le decis que valores queres insertar a la tabla, pero ahora mismo values, ya tiene valores insertados("Sergio", [email protected]", etc..).

Lo que tenes que poner luego de VALUES son los datos que recibiste de la forma, esos datos los tenes que guardar en una variable, como esta escrito el script de arriba esta bien. Ahora fijate esto:

$nombre = $_POST['nombre'];

Como vos pusiste la forma con el method="post", la unica forma de obtener los datos que usuario escribio es con una super global $_POST, que queremos obtener de $_POST ?? bueno queremos obtener el nombre, y es en ese instante en donde buscamos name="name" dentro de la forma.

Entonces:

$nombre =$_POST['nombre']; significa:

Guardamos en una variable llamado nombre, el nombre que escibrio el usuario en el <input> que tiene name="nombre" .Si queres obtener los datos que el usuario escriba, necesitas obtenerlos a traves del $_POST[''], dentro de los corchetes cuadrados le tenes que escribir el valor que le pusiste dentro de cualquier name (en este caso name="nombre").

4-estas usando mysql_connect, mysql_query. NO LO USES, estas funciones traen muchas vulnerabilidades de seguridad, y estan depreciadas. la forma actual y mucho mas segura de trabajar con base de datos con php es usando mysqli, o PDO. En el script que puse arriba, php se conecta y agrega valores a la base de datos a traves de PDO.

En internet de seguro que hay varios tutoriales o videos de youtube donde te enseñan a conectarte a la base de datos y usar la base de datos con PDO, en mi caso yo lo aprendi leyendo el libro "Php from novice no ninja" o "Php fundamentals jeffrey way".

Bueno eso es todo, cualquier duda avisame.

Última edición por penhova; 10/01/2015 a las 11:06
  #5 (permalink)  
Antiguo 10/01/2015, 12:15
Avatar de fede5426  
Fecha de Ingreso: diciembre-2014
Ubicación: Córdoba
Mensajes: 446
Antigüedad: 9 años, 4 meses
Puntos: 208
Respuesta: Inicios con PHP

A ver, vamos a hacerla mas corta porque si estas aprendiendo, lo que escribio penhova es algo extenso y te vas a marear jaja

En el index solo deberia estar el formulario, esta bien como lo trajiste, pero la consulta deberias hacerla en otro archivo.

Deberian quedar 3 archivos, algo asi:

index.php

Código PHP:
<body>
   <?php include("formularios/form1.html"); ?>
</body>
form1.html

Código HTML:
<form method="post" action="confirmar.php">
Ingrese nombre:
<input type="text" name="nombre"/><br>
Ingrese mail:
<input type="text" name="mail"/><br>
Seleccione el curso:
<select name="codigocurso">
<option value="1">PHP</option>
<option value="2">ASP</option>
<option value="3">JSP</option>
</select>
<br>
<input type="submit" value="Registrar"/>
</form> 
No es necesario que sea php, el formulario es html puro.
El tercero es donde ejecutas la consulta y confirmas si se registro correctamente o no:

confirmar.php

Código PHP:

//realizamos la conexión con la base de datos

$host="localhost";
$user="root";
$pass="";
$db="base1";

$conexionmysqli_connect($host,$user,$pass,$db) or die("No se pudo conectar con la base de datos");


//traemos por POST lo que escribas en el formulario y lo almacenamos en variables

$nombre=$_POST['nombre'];
$mail=$_POST['mail'];
$curso=$_POST['codigocurso'];


//realizamos la consulta

$consulta="INSERT INTO alumnos(nombre,mail,codigocurso) VALUES ('$nombre','$mail','$codigocurso')";

$resultado=mysqli_query($conexion$consulta) or die (mysql_error());


//comprobamos si se registro correctamente con un if

if ($resultado){//si la consulta se ejecuto correctamente
   
echo "Se ha registrado correctamente"//mensaje de confirmacion
   
header("Location: ../index.php"); //redireccion al index
}

else{ 
//sino...
   
echo "Error al registrarse"//mensaje de error
   
header("Location: ../index.php"); //redireccion al index


Intenta poniendolo asi, saludos.

[edito]
PD:

Cita:
2-El input con value="registrar" es el que se encarga de enviar los datos que el usuario subio, como vos no le escribiste un "name", el script no tiene idea de donde sacar los datos, al ultimo input con type="submit" agregale esto: name="submit". No tiene que llamarse submit en el name, le podes escribir lo que queres.
El script saca los datos del "ACTION" del formulario, no del name del boton.. Con que tenga type="submit" es suficiente.

Cita:
4-estas usando mysql_connect, mysql_query. NO LO USES, estas funciones traen muchas vulnerabilidades de seguridad, y estan depreciadas. la forma actual y mucho mas segura de trabajar con base de datos con php es usando mysqli, o PDO.
Totalmente de acuerdo, aprende mysqli.

Última edición por fede5426; 10/01/2015 a las 12:23

Etiquetas: formulario, mysql, select, sql
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 01:41.