1

Estoy aprendiendo a insertar usuarios en mi base de datos, pero los datos que inserto no aparecen en la tabla de usuarios, ¿cuál es el problema? Este es mi código:

<?php
  if (isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $connection = mysqli_connect('localhost', 'root', '', 'cs base de datos');
    if ($connection) {
      echo "We are connected";
    } else{
      die("failed");
    }
    $query = "INSERT INTO usuarios(username, password) ";
    $query .= "VALUES ('$username', '$password')"; 

    $result = mysqli_query($connection, $query); 

    if (!$result . mysqli_error()) {
      die('Query failed'); 
    }
  }

?>

introducir la descripción de la imagen aquí

Por alguna razón no aparecen los usuarios que intento agregar cuando escribo el nombre de usuario y contraseña en el formulario de ingresar.

Kleith
  • 3,773
  • 2
  • 13
  • 27
Leon
  • 13
  • 6
  • 1
    Hay un error de sintaxis en tu sentencia, el manejador interpreta que tu tabla se llama: **`usuarios(username, password)`**, como puedes ver, **no hay espacio de separación entre `usuarios` y los nombres de columnas**. Corrige eso y prueba también insertando datos que no sean duplicados. Una vez corregido ese error, considera blindar tu código contra el gravísimo riesgo de seguridad llamado **Inyección SQL**, [a través del cual un usuario mal intencionado podría tomar control no solamente de nuestra base de datos, sino de todo el sistema](https://es.stackoverflow.com/q/108520/29967). – A. Cedano Apr 14 '18 at 11:19
  • tebgo la siguiente duda, por que separas tu query en 2 partes y luego la concatenas? no sería mas simple que toda ella vaya dentro de la variable query en una sola vez? –  Apr 14 '18 at 15:56
  • El curso que estoy haciendo me hizo hacerlo de esa forma porque supuestamente es una forma más organizada de hacerlo... cómo quedaría el código si lo escribo de la forma que usted dice? – Leon Apr 14 '18 at 15:58
  • ¿Sigue sin funcionar aún haciendo lo que te comentaba al principio? Otra cosa extraña en tu código es esta línea: `if (!$result . mysqli_error()) { ...` debería ser más bien: **`if (!$result) { die('Query failed'.mysqli_error()) } else { echo "Datos insertados correctamente";}`** O sea, debes evaluar en el `if` el valor de la variable `$result` y en caso de ser `FALSE` entonces imprimir el error ocurrido. – A. Cedano Apr 14 '18 at 17:01

3 Answers3

0

El código esta correcto. Deberías añadir qué error te devuelve, pero me da la sensación de que al crear la tabla no has puesto el campo id como Auto_Increment. Veo que usas phpmyadmin Borra la tabla (está vacía), creala de nuevo marcando A_I al crear el campo id y creo que se solucionarán tus problemas.

Javi Ps
  • 465
  • 3
  • 8
0

Revisando tu código con más detenimiento, se puede apreciar que aquí:

if (!$result . mysqli_error()) {

haces una evaluación incorrecta. Es como si hicieras esto:

$result=TRUE;
$error="Hubo un error"; 
if (!$result.$error){
    die ("Query failed");
}

El código siempre entrará en el if porque estás preguntando si la concatenación !$result . mysqli_error() no es FALSE. Y nunca lo será, tampoco si ocurriese esto:

$result=FALSE;
$error="Hubo un error"; 
if (!$result.$error){
    die ("Query failed");
}

Aquí también entraría en el if.

Entonces, teniendo en cuenta que $result almacenaría el resultado de mysqli_query y que éste sería FALSE si la consulta fallase, puedes escribir el código así:

<?php
  if (isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $connection = mysqli_connect('localhost', 'root', '', 'cs base de datos');
    if ($connection) {
      echo "We are connected";
    } else{
      die("failed");
    }
    $query = "INSERT INTO usuarios (username, password) ";
    $query .= "VALUES ('$username', '$password')"; 

    $result = mysqli_query($connection, $query); 

    if (!$result) {
      die('Query failed '.mysqli_error()); 
    } else {
      echo "Se insertaron: ".mysqli_affected_rows($connection). " registros";
    }
  }

?>

De ese modo, cuando falle, te dirá cuál ha sido el error, pues estás evaluando solamente a la variable $result y no a una concatenación de ella.

Si aún así no funciona, comenta el error que se imprime en pantalla, al lado de Query failed.

Nótese que he hecho uso de mysqli_affected_rows para indicar la cantidad de registros insertados, cuando la consulta funcione. Si esta función no entra dentro del alcance de tu curso, la puedes quitar.

NOTA:

Una vez corregido el presente error, considera blindar tu código contra el gravísimo riesgo de seguridad llamado Inyección SQL, a través del cual un usuario mal intencionado podría tomar control no solamente de tu base de datos, sino de todo el sistema. Si este tipo de solución es aceptable para tu caso (dado que has comentado que se trata de un curso), me lo puedes decir en comentario y te muestro como blindar el código.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
0

Hay varias cosas que debes revisar:

1- Si estas usando isset($_POST['submit']) para verificar si se ha enviado información por POST, revisa que efectivamente en tu formulario html tienes algún <input> con <name="submit">.

<input type="submit" name="submit" value="Enviar">

o

<input type="hidden" name="submit" value="True">

2- Si la columna id esta como "autoincrement" en la base de datos

3- Una vez funcione el asunto, debes guardar la contraseña al menos como un hash. PHP posee varias funciones hash integradas como MD5 (no recomendada), SHA, etc.

$password = hash('sha256', $_POST['password'], False);
aeportugal
  • 7,106
  • 2
  • 9
  • 21