Pregunta:
Fecha: 15-08-2017 11:10:03
(En Español)
El punto es que trunca allí y no sigue asi que no se si realizaria el insert, al consultar la base de dato obviamente no hace el insert, revise la funcion mysqli_error en php y segun los ejemplos estoy bien pero sigue arrojando el resultado, anexo código.
Ayuda con Parse error: syntax error, unexpected 'mysqli_error' (T_STRING)[Resuelta]
Buenas, espero se encuentren bien, estoy tratando de realizar el registro de usuarios por método post en un formulario, pero no hace el select arrojando el error: Parse error: syntax error, unexpected 'mysqli_error' (T_STRING) in /opt/lampp/htdocs/prueba/validar2.php on line 53El punto es que trunca allí y no sigue asi que no se si realizaria el insert, al consultar la base de dato obviamente no hace el insert, revise la funcion mysqli_error en php y segun los ejemplos estoy bien pero sigue arrojando el resultado, anexo código.
<?php
require "conexion.php";
$nombre = $_POST ['nombre'];
$apellido = $_POST['apellido'];
$cedula = $_POST['cedula'];
$correo = $_POST ['correo'];
$usuarioPOST = $_POST['usuario'];
$contrasenaPOST = $_POST ['contrasena'];
$usuarioPOST = htmlspecialchars(mysqli_real_escape_string($con, $usuarioPOST));
$contrasenaPOST = htmlspecialchars(mysqli_real_escape_string($con, $contrasenaPOST));
//Definimos la cantidad máxima de caracteres
//Esta comprobación se tiene en cuenta por si se llegase a modificar el "maxlength" del formulario
$maxCaracteresUsername = "20";
$maxCaracteresPassword = "60";
//Si los input son de mayor tamaño, se "muere" el resto del código y muestra la respuesta correspondiente
if(strlen($usuarioPOST) > $maxCaracteresUsername) {
die('El nombre de usuario no puede superar los '.$maxCaracteresUsername.' caracteres');
};
if(strlen($contrasenaPOST) > $maxCaracteresPassword) {
die('La contraseña no puede superar los '.$maxCaracteresPassword.' caracteres');
};
//Pasamos el input del usuario a minúsculas para compararlo después con
//el campo "usuario" de la base de datos
$userPOSTMinusculas = strtolower($usuarioPOST);
$consultaUsuarios = 'SELECT usuario FROM XXXX'; //XX nombre de la bd
//Obtenemos los resultados
$resultadoConsultaUsuarios = mysqli_query($con, $consultaUsuarios) or die mysqli_error() ; /*aqui es donde arroja el problema*/
$datosConsultaUsuarios = mysqli_fetch_array($resultadoConsultaUsuarios);
$userBD = $datosConsultaUsuarios['usuario'];
if(empty($usuarioPOST) || empty($contrasenaPOST)) {
die('Debes introducir datos válidos');
} else if ($userPOSTMinusculas == $userBD) {
die('Ya existe un usuario con el nombre '.$userPOST.'');
}
else {
//Si no hay errores, procedemos a encriptar la contraseña
function aleatoriedad() {
$caracteres = "abcdefghijklmnopqrstuvwxyz1234567890";
$nueva_clave = "";
for ($i = 5; $i < 35; $i++) {
$nueva_clave .= $caracteres[rand(5,35)];
};
return $nueva_clave;
};
$aleatorio = aleatoriedad();
$valor = "07";
$salt = "$2y$".$valor."$".$aleatorio."$";
$passwordConSalt = crypt($contrasenaPOST, $salt);
//Armamos la consulta para introducir los datos
$consulta = "INSERT INTO usuario ('nombre' , 'apellido' , 'cedula' , 'correo' , 'usuario' , 'contrasena') VALUES ('$nombre', '$apellido' , '$cedula' , '$correo' , '$usuarioPOST' '$passwordConSalt')";
//Si los datos se introducen correctamente, mostramos los datos
//Sino, mostramos un mensaje de error
if(mysqli_query($con, $consulta)) {
}
}
?>
Votos: 0 -
Respuestas: 9 -
Vistas: 14
Compartir en: Google
Facebook
Twitter
LinkedIn
Link
Respuestas:
-
Fecha: 15-08-2017 15:15:52 Yo usualmente hago las consultas utiliando el try catch y deshabilitando la ejecucióin automatica de las querys, algo así:
$con->autocommit(false);//desactivo las querys automaticas try{ $a = $con->query("SELECT usuario FROM xxx"); $t = mysqli_num_rows($a); $row = $a->fetch_assoc(); if(!$a){ throw new Exception($con->error);//Si hay problemas corto la ejecución y reporto el error } $con->commit();//Ejhecuto la consulta return "Lo que sea"; }catch(Exception $e){ $con->rollback();//Deshago cambios si los hubiere return $e->getMessage();//Retorno el Error }
Esto con la finalidad de que todo este correcto en mis bases y capturar los errores más facilmente, por ejemplo, imagina una funciojn donde tengas que realizar varias inserciones pero una de ellas falla, tendrias inconsistencias en tus datos, lo digo por experiencia, claro, como dije al principio es lo que yo hago.
Por otro lado habria que ver la funcion que conecta a la base para analizar más a fondo tu problema, estoy seguro que es alli el problema. Yo utilizo el estilo orientado a objetos, el por por procedimientos no me gusta la sintaxis. Votos: 0 - Link respuesta -
Fecha: 16-08-2017 04:20:59 Agradecido carlos, bueno fijate que he revisado también el conect y esta todo perfecto, el error sigue arrojandolo donde te dije, he realizado el conect por ambos metodos, llamando a la clase y asi como esta aqui el include ?or procedimiento y muestra consistencia en la conexion más sin embargo sigue la falla en la linea que comente. Votos: 0 - Link respuesta
-
Fecha: 16-08-2017 05:23:03 Prueba colocando la conexion:
mysqli_error($con);
Otra opción sería de esta manera:
$resultadoConsultaUsuarios = mysqli_query($con, $consultaUsuarios); if(!$resultadoConsultaUsuarios){ echo mysqli_error($con); }Votos: 1 - Link respuesta -
Fecha: 16-08-2017 05:42:13 buenas,
El error es por algun query que no tiene la sintaxis correcta mano.. escribe el query directamente en phpmyadmin o en la consola y comprueba.
otra sugerencia, deberias verificar los campos del lado del cliente antes de enviarlos al servidor, ahi puedes limitar el campo en el html, indicarle un patron y verificar con jquery que no queden vacios y tambien patrones y caracteres validos, y del lado del servidor verificas de nuevo por si las moscas no llegue algun dato null.
luego de eso haces la consulta y verificas que el usuario no exista. Votos: 0 - Link respuesta -
Fecha: 16-08-2017 06:31:41 luis eso esta hecho el formulario esta validado para no enviar informacion vacia hasta valide el campo de correo para el formato etc, en efecto revisando mi archivo conect, lo tenia llamando un config.ini donde asignaba los atributos de la bd como usuario bd etc, resulta que me daba un falso positivo porque borre el nombre de la bd y de igual forma ddecia conexion exitosa, volvi al modo de clase y llamo a la bd y aparentemente esta bien pero sigue dando falla el query obviamente creoq ue sencillamente no enlaza con la bd y por lo tanto trunca todo procedimiento que pretendo hacer Votos: 0 - Link respuesta
-
Fecha: 19-08-2017 19:27:20 Hola,
Te da el error porque le lanzas el "or die", de manera incorrecta, para poder que te funcione tienes que darle como una función el die(), además el mysqli_error(), tiene el campo de conexión
mysqli_query($con, $consultaUsuarios) or die( mysqli_error($con) );
Saludos
Equipo QuéCódigo <- Servicio de diseño y desarrollo web. Votos: 1 - Link respuesta -
Fecha: 21-08-2017 01:29:11 $consulta = "INSERT INTO usuario ('nombre' , 'apellido' , 'cedula' , 'correo' , 'usuario' , 'contrasena') VALUES ('$nombre', '$apellido' , '$cedula' , '$correo' , '$usuarioPOST' '$passwordConSalt')";
Falta una coma para separar los dos último valores
$consulta = "INSERT INTO usuario ('nombre' , 'apellido' , 'cedula' , 'correo' , 'usuario' , 'contrasena') VALUES ('$nombre', '$apellido' , '$cedula' , '$correo' , '$usuarioPOST', '$passwordConSalt')"; Votos: 0 - Link respuesta -
Fecha: 21-08-2017 17:17:52 //Esta primera parte es un html que recoge variables y los envía a un programa llamado DennA.php.
<!DOCTYPE html>
<html>
<head>
<title>Formulario de entrada del dato</title>
</head>
<body>
<form method="post" action="DennA.php">
Ingrese su nombre:
<input type="text" name="nombre">
<br>
Ingrese su apellido:
<input type="text" name="apellido">
<br>
Ingrese su cedula:
<input type="text" name="cedula">
<br>
Ingrese su correo:
<input type="text" name="correo">
<br>
Ingrese su usuario:
<input type="text" name="usuario">
<br>
Ingrese su pass:
<input type="password" name="contrasena">
<br>
<input type="submit" value="confirmar">
</form>
</body>
</html>
--------------------------------------------
este es el programa que corre, ya se realizaron los ajustes y a mi me corre bien, lo que no revise es la encriptar,
los siguientes hallazgo son:
1. el $con no estaba definido, hay que incluirlo. el que esta ahí es el mio.
yo utilizo Mysql Workbench para obtenerlo hay que = tools ->utilities->copy as PHP (conect to server),
luego botón derecho del raton y pegar.
2.quitar las comillas en (nombre,apellido,cedula,correo,usuario ,contrasena) tanto en select como insert.
3. usar '$_REQUEST[nombre]' entre comillas.
El programa me esta corriendo, espero que le sirva.
Atte.
-----------------------------------------
<?php
echo "El nombre ingresado es:";
require "denal.html";
$nombre = $_POST ['nombre'];
$apellido = $_POST['apellido'];
$cedula = $_POST['cedula'];
$correo = $_POST ['correo'];
$usuarioPOST = $_POST['usuario'];
$contrasenaPOST = $_POST ['contrasena'];
$host="localhost"; /* no tenia esta parte , tools ->utilites->copy as php code-> conect to server */
$port=3306; /* ojo, estos son mis datos debes cambiarlos */
$socket="";
$user="root";
$password="";
$dbname="salidas";
$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('Could not connect to the database server' . mysqli_connect_error());
//$con->close();
$usuarioPOST = htmlspecialchars(mysqli_real_escape_string($con, $usuarioPOST));
$contrasenaPOST = htmlspecialchars(mysqli_real_escape_string($con, $contrasenaPOST));
//Definimos la cantidad máxima de caracteres
//Esta comprobación se tiene en cuenta por si se llegase a modificar el "maxlength" del formulario
$maxCaracteresUsername = "10";
$maxCaracteresPassword = "12";
//Si los input son de mayor tamaño, se "muere" el resto del código y muestra la respuesta correspondiente
if(strlen($usuarioPOST) > $maxCaracteresUsername) {
die('El nombre de usuario no puede superar los '.$maxCaracteresUsername.' caracteres');
};
if(strlen($contrasenaPOST) > $maxCaracteresPassword) {
die('La contraseña no puede superar los '.$maxCaracteresPassword.' caracteres');
};
//Pasamos el input del usuario a minúsculas para compararlo después con
//el campo "usuario" de la base de datos
$userPOSTMinusculas = strtolower($usuarioPOST);
echo "$userPOSTMinusculas <br> $contrasenaPOST";
$consultaUsuarios = "SELECT * FROM usuario where usuario='$_REQUEST[usuario]'";
$resultadoConsultaUsuarios = mysqli_query($con, $consultaUsuarios) or die ("Problemas en el select:".mysqli_error($con)); /*aqui es donde arroja el problema*/
$datosConsultaUsuarios = mysqli_fetch_array($resultadoConsultaUsuarios);
$userBD = $datosConsultaUsuarios['usuario'];
if(empty($usuarioPOST) || empty($contrasenaPOST)) {
die('Debes introducir datos validos');
} else if ($userPOSTMinusculas == $userBD) {
die('Ya existe un usuario con el nombre '.$usuarioPOST.''); // aqui se pega tenia $userpost
}
else {
//Si no hay errores, procedemos a encriptar la contraseña
function aleatoriedad() {
$caracteres = "abcdefghijklmnopqrstuvwxyz1234567890";
$nueva_clave = "";
for ($i = 5; $i < 35; $i++) {
$nueva_clave .= $caracteres[rand(5,35)];
};
return $nueva_clave;
};
$aleatorio = aleatoriedad();
$valor = "07";
$salt = "$2y$".$valor."$".$aleatorio."$";
$passwordConSalt = crypt($contrasenaPOST, $salt);
//Armamos la consulta para introducir los datos
mysqli_query($con, "INSERT INTO usuario (nombre,apellido,cedula,correo,usuario ,contrasena)
VALUES ('$_REQUEST[nombre]', '$_REQUEST[apellido]' , '$_REQUEST[cedula]' , '$_REQUEST[correo]' ,'$_REQUEST[usuario]','$_REQUEST[contrasena]')");
//Si los datos se introducen correctamente, mostramos los datos
//Sino, mostramos un mensaje de error
}
mysqli_close($con);
echo " Fue dado de alta.";
?> Votos: 0 - Link respuesta -
Fecha: 22-08-2017 04:23:35 Gracias a todos, Sr Bonilla agradecido por su comentario, el $con viene de conexion, por eso no lo declaro de nuevo porque esta incluido en el conxion.php, el detalle era en la sintaxis por unas comillas como dijeron los compañeros anteriores, de igual forma ya probe la suya y en efecto corre pero la diferencia es que yo llamo a la conxion desde otro archivo por seguidad..gracias a todos Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
