Bueno, te lo explico más detalladamente, tú código inicial:
Código PHP:
<?php
$nombre=$_POST['nombre'];
$correo=$_POST['correo'];
$mensaje=$_POST['mensaje'];
$link = mysql_connect("localhost", "root", "")
or die("No se pudo acceder a la base de datos");
mysql_select_db("contacto")
or die("No se a seleccionado la base de datos");
$query = "insert into `contacto` (`nombre`,`correo`,`mensaje`) values
('$nombre','$correo','$mensaje')";
$result = mysql_query($query)
or die("Query failed:$query");
?>
Las variables de $_POST nombre, correo y mensaje como sabes vienen dadas por el usuario, con lo que puede poner lo que quiera.
Tu no compruebas lo que hay escrito, directamente lo metes en la BD, supón que en nombre y correo no pone nada, con lo que $correo y $nombre quedarían vacíos.
Supón que $mensaje, después de introducir algo, queda:
Código PHP:
$mensaje = " '); $q = mysql_query('SELECT * FROM contacto'); while($row = mysql_fetch_array($q)) print_r($row); "
tu código quedaría:
Código PHP:
<?php
$nombre=$_POST['nombre'];
$correo=$_POST['correo'];
$mensaje=$_POST['mensaje'];
$link = mysql_connect("localhost", "root", "")
or die("No se pudo acceder a la base de datos");
mysql_select_db("contacto")
or die("No se a seleccionado la base de datos");
$query = "insert into `contacto` (`nombre`,`correo`,`mensaje`) values
('','',''); $q = mysql_query('SELECT * FROM contacto'); while($row = mysql_fetch_array($q)) print_r($row); ')";
$result = mysql_query(insert into `contacto` (`nombre`,`correo`,`mensaje`) values
('','',''); $q = mysql_query('SELECT * FROM contacto'); while($row = mysql_fetch_array($q)) print_r($row); ))
or die("Query failed:$query");
?>
Cómo ves con el resaltado de sintaxis, antes de que la página muera, habrá mostrado la tabla entera de contactos.
Puede parecerte complicado, pero cualquiera que sepa un poco de PHP sabe cuales son las estructuras normales de poner las funciones, y es que no hay otras, es deducible que serán 3 los campos viendo 3 campos para rellenar en el formulario, y deducir un nombre de tabla de DB tampoco es difícil porque todo el mundo suele poner los mismos ya que es más fácil con nombres identificativos.
Por eso te decía lo de la seguridad, y por otro lado es aconsejable usar comillas simples en lo del mysql_query('consulta'); en vez de dobles porque las dobles evaluan las variables, en cambio con las simples no, para meter una variable tienes que unir con el operador . (punto), y usar la '\' para que no se interprete la comilla simple como un fin de frase. Haciéndolo así se evita - no del todo pero con bastante efectividad - que alguien meta una variable creada por él en el formulario y que tu la evalúes.
Todo esto sumado a un correcto tratamiento de los datos introducidos antes de inserir en la base de datos te evita muchos problemas.