1

Estoy usando PHP 7 para ingresar registros en una base de datos. Me dice "subscripción completa" pero reviso mi base de datos y no tengo ningún dato guardado. ¿Dónde está el error? ¿Y cómo puedo solucionarlo?

Éste es mi archivo registro.php

<?php
$db_host="localhost";
$db_user="root";
$db_password="123456";
$db_name="Inscripcion";
$db_table_name="Nuevo";
$db_connection = mysqli_connect($db_host, $db_user, $db_password, $db_name);

if (!$db_connection) {
    die('No se ha podido conectar a la base de datos');
}
$subs_name = utf8_decode($_POST['nombre']);
$subs_last = utf8_decode($_POST['apellido']);
$subs_email = utf8_decode($_POST['email']);

$resultado = mysqli_query($db_connection, "SELECT * FROM Nuevo");

if (mysqli_num_rows($resultado)>0)
{

header('Location: Fail.html');

} else {

    $insert_value = "INSERT INTO Nuevo (Nombre, Apellido, email) values ('$_POSTname[nombre]','$_POST[apellido]','$_POST[email]')";

$retry_value = mysqli_query($db_connection, $insert_value);

if (!$retry_value) {
   //die('Error: '.mysqli_error());
}

header('Location: success.html');

}

mysqli_close($db_connection);


?>

Y éste es mi index.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Formulario de Registro SCIII</title>
<link href="estilos.css" rel="stylesheet" type="text/css">
</head>

<body>



<div class="group">
  <form action="registro.php" method="POST" action="registro.php">
  <h2><em>Formulario de Registro</em></h2>


      <label for="nombre">Nombre <span><em>(requerido)</em></span></label>
      <input type="text" id="nombre" name="nombre" class="form-input" required/>   

      <label for="apellido">Apellido <span><em>(requerido)</em></span></label>
      <input type="text" id="apellido" name="apellido" class="form-input" required/>           

      <label for="email">Email <span><em>(requerido)</em></span></label>
      <input type="email" id="email" name="email" class="form-input" />

     <center> <input class="form-btn" name="submit" type="submit" value="Suscribirse" /></center>
  </form>
</div>
</body>
</html>
Alvaro Montoro
  • 48,157
  • 26
  • 100
  • 179
  • `$_POSTname[nombre]` no es correcto. Además de que faltan las comillas `$_POST['nombre']`. Y ahora no recuerdo si podías ponerla así directamente en la consulta. – OscarR Jul 22 '16 at 20:29
  • Sería mejor que declaras nuevas variables para almacenar los POST ejemplo: `$nombre = $_POST['nombre'];` – Fabian Sierra Jul 22 '16 at 20:31

2 Answers2

3

Tienes un error en el insert que hará que falle:

INSERT INTO Nuevo (Nombre, Apellido, email) values ('$_POSTname[nombre]','$_POST[apellido]','$_POST[email]')

Si te fijas pone $_POSTname[nombre] y eso es incorrecto, debería ser $_POST[nombre].

INSERT INTO Nuevo (Nombre, Apellido, email) values ('$_POST[nombre]','$_POST[apellido]','$_POST[email]')

Aparte de eso, tu código puede sufrir ataques de inyección SQL, deberías usar sentencias preparadas en lugar de SQL dinámico.

Alvaro Montoro
  • 48,157
  • 26
  • 100
  • 179
0

Te recomiendo declara una variable para guardar el nombre y los demás datos, para así poder aplicar alguna especie de filtro y el uso de la funcion isset para no intentar ingresar variables vacias

$v_nombre =isset( $_POST['nombre'])?strip_tags($_POST['nombre']):'no-ingresa';

por ejemplo, y después hacer la consulta con la variable

$insert_value = "INSERT INTO Nuevo (Nombre, Apellido, email) values ('$v_nombre','$v_apellido','$v_email')";