La solución que te ofrece @alo_Malbarez es sustancialmente correcta. Pero, tu código, pasando el valor sin control al que él te ofrece abre un terrible agujero de seguridad en tu sitio porque se usa directamente y sin beneficio de inventario el valor $_GET['id']
, de modo que expones tanto la bd, como el sistema de archivos. Te sugiero leer ¿Cómo evitar la inyección SQL en PHP?
El problema: La variable 'id' recogida en get puede contener una cola que rompa la integridad de la consulta sql y eventualmente ejecutar código malicioso. Si lees el artículo citado lo ilustra bastante bien. Ademas, si se usa para crear directorios la cola podría afectar al sistema de archivos (no tengo certeza plena pero, esas colas, pueden resultar en desastres)
La solución:
- Utilizar una consulta preparada traigo el ejemplo de la repuesta del autor del artículo @Alvaro_Montoro:
$pdo = new PDO('mysql:host=mihost;dbname=basedatos', "usuario", "contraseña");
$id_usuario = $_POST["id"]; // en tu caso sería = $_GET['id'];
$sentencia = $pdo->prepare("SELECT * FROM usuarios WHERE id = :idusuario");
// Muy importante desactivar la posibilidad de emulación en consultas
$sentencia=$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
// pasar parámetros a la consulta
$sentencia->bindParam(":idusuario", $id_usuario, PDO::PARAM_INT);
// ejecutar
$sentencia->execute();
- Una vez validado el usuario, con la consulta, usar el resultado para comparar el id almacenado con el recibido, si no coinciden puedes sospechar de un ataque y se puede guardar el dato para revisarlo, (convertirlo a cadena hex antes de guardarlo), más adelante y no acusar sin motivo.
- Si los ids coinciden proceder a crear el directorio, si no hay coincidencia el directorio no se puede crear, aunque la consulta de id devuelva que el usuario existe. En ese caso hacer un reporte dummie de fallo para no alertar al intruso en caso de que lo sea.
(tuve problemas para editar el código, por alguna razón que no percibo el lenguaje de marcación no lo reconoció y le di formato a fuerza bruta)