Insertar Datos a DB y Protegernos de Datos con Malicia

En esta lecci贸n, finalmente conservaremos una nueva nota en la base de datos. Pero, al hacerlo, se le presentar谩 un nuevo problema de seguridad que requiere que siempre evitemos la entrada proporcionada por el usuario.

Que aprenderemos

  • Insert Queries
  • htmlspecialchars()

Insertar datos a DB

Recordemos los datos que llegan en la variable super global $_POST Salida de dd($_POST):

array(1) {
  ["body"]=>
  string(6) "prueba"
}

Para insertar datos a la base de datos, en controllers/note-create.php:

<?php 

$config = require('config.php');
$db = new Database($config['database']);

$heading = 'Crear Nota';

if($_SERVER['REQUEST_METHOD'] === 'POST'){
    $db->query('INSERT INTO notes (body, user_id) VALUES(:body, :user_id)', [
        'body' => $_POST['body'],
        'user_id' => 1
    ]);
}

require 'views/note-create.view.php';

Para protegernos de datos con malicia como podr铆a ser una nota con c贸digo script java, por ejemplo: <h1 style="font-size: 100px">Ah ja</h1><script>alert('Hola desde JS')</script> podemos utilizar una funci贸n de de php htmlspecialchars() en nuestra vista views/notes.view.php:

<?php foreach ($notes as $note) : ?>
	<li>
		<a href="/note?id=<?=$note['id'] ?>" class="text-blue-500 hover:underline">
			<?= htmlspecialchars($note['body']) ?>
		</a>
	</li>
<?php endforeach; ?>

Y hacer lo mismo en las dem谩s partes donde desplegamos. En views/note.view.php

<main>
	<div class="mx-auto max-w-7xl py-6 sm:px-6 lg:px-8">
		<p class="mb-6">
			<a href="/notes" class="text-blue-500 underline">Regresar...</a>
		</p>
		<?= htmlspecialchars($note['body']) ?>
	</div>
</main>

Todav铆a falta mucho por hacer, que pasa si damos salvar nota con los datos vac铆os pro ejemplo, vemos que no estamos protegidos contra eso, para esto necesitamos otra capa de protecci贸n (form validation) que lo veremos la pr贸xima lecci贸n.