Ha pasado tiempo y el curso es de un nivel, que los años no son importante. Felicitaciones por tu esfuerzo hercúleo y por enseñar a muchos a programar.
me hace gracia que pago una millonada por la universidad para que entienda 1000 veces más rápido las cosas con tus videos que con las explicaciones de mi profesor, y el código es más simple. Felicidades jajaja
@@nicolasramirez865 Eso de los titulos profesionales no te sirve para nada. Cuando tengas que buscar trabajo te van a preguntar que sabes hacer? que hiciste? cual es tu portfolio y seguramente te tomaran alguna prueba. En informática las cosas son así , los títulos te los piden en ingeniería o medicina;
He sacado varios cursos aquí en tu canal, solo quiero darte las gracias por todo, solo con usted siento ese verdadero sentimiento de decirle maestro a una persona. Gracias.
Perfecto como siempre Juan por los errores no te preocupes porque así vamos aprendiendo como solucionarlos en caso de que aparezcan en nuestros programas. Encantado con tus videos.
La base de datos se llama pruebas (22:59) con s al final, pero aparece en el codigo como prueba (12:58). Como dice Juan, no hay nada mejor que equivocarse para aprender. Excelente video. Saludos. $base = new PDO("mysql:host=localhost;dbname=pruebas",'root','');
excelente!!! tutorial profesor lo felicito y muchas muchas Gracias!!! por compartir sus conocimientos usted usted nos da ese impulso a ser cada día mejores programadores 🤓
Funciona perfecto, lo único que puedo mencionar es que no es necesario ingresar un valor al campo autoincrementable, la aplicación se encarga del valor que tendrá el campo.
Me salio a la primera :D, no me canso de decirlo Excelentes vídeos, Excelente manera de explicar, y con este se sintió un tono tuyo como..."oye funciona ya pues!" jajaja, Saludos.
buen video profesor, me salio a la segunda, corriegiendo el ERRMODE, Jijijiji supere al maestro!! claro con una base de datos diferente, entiendo mucho mas a usted q al loquillo de mi profesor de ingenieria Web
Me surgió un problema, la página se muestra en blanco después de hacer login, inclusive accede sin colocar datos, ¿alguna idea? hlm.dlatorre.mx/login.php
Excelente vídeo Profesor !!! Y no importa si se equivoca ,(No le tiraremos tomates xD ) de los errores se aprende tanto para usted , como para nosotros. Gracias Por Los Vídeos !!
Muy buen video :D gracias me has sacado de apuros ademas estoy en Preparatoria y nose porque estoy aqui pero muy buen video me sirvio demasiado gracias :D
Este es el curso mas completo que he visto he youtube muy bien explicado lo felicito creo que usted le entiende mas a un computador que a una persona por que se sabe el lenguaje es completico. Una pregunata maestro a que se debe el error (Error: could not find driver) no creo que sea error de sintaxis en el codigo php
Hola Profesor. Quiero retribuirle con un granito de arena lo mucho que me ha entregado en estos 59 vídeos que he seguido desde cero sin saber nada de nada. Espero que no le moleste que haya usado la herramienta "San Google" que nos indicó para cuando tuviéramos dudas. Investigando un poco, tal como nos insta, encontré que lo que nos dice en 17:35 del uso de binValue() y bindParam() no es del todo correcto, porque ambos se usan tanto para marcadores como para el signo ? . La diferencia es que bindValue se comporta como una constante y y bindParam como una variable hasta que se realiza el execute(). Por lo tanto el criterio para elegirlos debe ser si cambia o no el valor del parámetro o la etiqueta durante la ejecución de código hasta que se llega a la linea del execute(). Saludos desde Chile y siga así por favor.
¿Por qué usamos la función bindValue() para enlazar los marcadores con lo que hemos rescatado del formulario?(minuto 18:00) Antes lo hacíamos en la función execute(), dentro del array que creábamos dentro. ¿Se debe a la utilización de las funciones htmlentities() y addslashes()?
para los que no sabían: cuando se declara la instancia PDO("mysql:host=localhost; dbname=pruebas", "root",""); es estricto escribirlo tal cual, más que todo en lo que esta dentro de "mysql:host=localhost; dbname=pruebas". Esto se debe a que no podía acceder a la Base de datos y me daba el error 1046, de que Unknown database ' USUARIO', esto porque el host=localhost debe estar pegado no separado con espacio, porque no va a reconocer el localhost y esto mismo pasa con el dbname=pruebas debe estar así, si esta separado (dbname = pruebas) no lo reconocerá. Espero poder Ayudar!!
No se si ya se ha comentado esto pero En la sentencia INSERT no es necesario agregar el ID porque se supone que es autoincrementable P/E INSERT INTO USUARIOS_PASS(USUARIOS, PASSWORD) VALUES ('FULANO','SUSTANO');
Otro genial vídeo. Me gustaría comentar que si con la función htmlentities y addslashes se usa la $_POST da error, porque no reconoce los marcadores, pero si se cambia por $_GET entonces funciona correctamente. Estoy hablando de mi caso particularmente, no digo que esté mal.
Una modesta sugerencia a todos los compañeros del curso. Cuando tengan un error, publiquen su código o al menos el mensaje de error o exception que les arroja. De otra forma es bastante improbable el poder contribuir a solucionarlo o establecer una posible causa factible de la causa.
Correcto, correcto, correcto. Gracias por avisar de esto (yo ya no puedo avisar más veces). La magia y la telepatía no entran dentro de las características del programador. Aquellos que tenéis errores: o publicáis el código o si no es imposible averiguar el error. Un saludo!
porque usas un id int? por lo que me enseñaron en clase es recomendable usar directamente usuario como primary key, si ya tienes un elemento del conjunto de datos que identifica inequivocamente la fila, no necesitas inventar uno nuevo para hacer lo que ya hace usuario. Saludos y aprovecho para felicitarte por el canal y por lo claro que explicas todo.
Ante todo gracias por el genial curso de php, profesor. Quería preguntar en esta parte de login no sería mejor hacer el ejercicio con consultas preparadas y marcadores como lo hemos venido haciendo en los ejercicios anteriores UD. no dijo que esa era la forma más segura 😳
Maestro, necesito de su ayuda. Le comento, seguí los 3 vídeos para hacer el sistema de logeo y me funcionó a la perfección pero ahora necesito hacer lo siguiente: Hacer otro formulario en el cual se introduzca determinado código que esté en la base de datos, hasta aquí todo bien porque he usado los marcadores y el htmlentities... Pero como el sistema que estoy creando hay un campo llamado "notas" y lo que quiero es que por ejemplo, si la nota de un alumno es mayor a 6.0 me tire un mensaje de aprobado pero sino que diga lo contrario... El problema es que aquí no puedo usar el htmlentities porque ese dato no lo va a introducir el usuario sino que está directamente en la base de datos Agradecería su ayuda lo más antes posible, un saludo!
Ojo ya rowCount como que la actualizaron vayan a la página de PHP: Para muchas bases de datos, PDOStatement::rowCount() no devuelve el número de filas afectadas por una sentencia SELECT. En su lugar, use PDO::query() para ejecutar una sentencia SELECT COUNT(*) con las mismas declaraciones que la sentencia SELECT pretendida, luego use PDOStatement::fetchColumn() para recuperar el número de filas que serán devueltas. La aplicación podrá entonces realizar la acción correcta.
En los episodios anteriores en lugar de usar BindValue o BindPAran. Se colocan la correspondencia dentro de los parámetros del método Execute. Cual se debe usar en que ocasión. Bind Param y Values es más seguro?
Eres un genio en la programación muchas felicitaciones por tu aporte que das para aquellas personas que quieren en verdad aprender mucho sobre programación este es el curso indicado y muy avanzado y donde se aprende rapido solo una pregunta profesor e escrito el codigo muy bien en mis archivos pero me sale este mensaje cuando doy en el boton de validación Error: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens no se cual sera el problema estoy viendo la manera como resolverlo y no pasare de este video hasta que resuelva el problema. te lo agradecere mucho
dato, si alguien por algún motivo llamo en phpmyadmin el campo de las contraseñas como CONTRASEÑA no les servira el codigo ya que no leera la Ñ, cambienle de nombre por otra palabra por ejemplo CONTRA y listo el código sigue funcionando.
Para quienes les salga el siguiente error -> Error: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected. Cuando vayan a crear la consulta "$sql", tienen que agregar el nombre de la base de datos concatenada con el nombre de la tabla, de la siguiente manera: $sql = "SELECT * FROM pruebas.usuarios_pass WHERE USUARIO = :login AND PASSWORD = :password"; A las próximas personas que vean este video, espero les saque del apuro tanto como a mí ^_^
Buen día, Tutor, sigo sus videos, usted explica muy bien, gracias. Me ha salido un error y he tratado de solucionarlo, pero no he dado con la solución. Error: SQLSTATE[HY000] [2002] La dirección solicitada no es válida en este contexto
Juan, no sé si es la manera correcta de hacer estas cosas pero hace unos años aprendí a redirigir una pagina con la función header de PHP incluyendo cierto contenido, por ejemplo en un login erroneo: header("location:index.php?error"); para luego, debajo del formulario del index.php: Es decir, si existe el $_GET, que muestre ese mensaje de error. Es correcto esto? Se suele utilizar de esa manera?
Buenos videos, muy buenos, si me permiten sugerir otra alternativa para evitar el "bucle" si el usuario no esta registrado seria con java mas o menos asi: else { echo ' alert("Error, intentelo de nuevo"); window.history.go(-1); '; } con esto aparece una notificación y al aceptar nos regresa a nuestra pagina de "login" Saludos
Para quienes ven el curso en estos tiempos deben saber que la función "addcslashes" ahora exige tener 2 argumentos, el primero sería el texto que capturamos en este caso y el segundo son los caracteres que queremos que no sean permitidos ya sean "/", "=" etc.
Se utilizará mayormente POO pero seguiremos viendo las dos formas de programar. Con ejemplos sencillos seguiremos viendo la forma procedimental. Un saludo!!
También me funcionó comentando estas dos líneas: /*$resultado->bindValue(":login", $login); $resultado->bindValue(":password", $password);*/ Y modificando el método "execute()": $resultado->execute(array(":login" => $login, ":password" => $password));
Hola muy buen tutorial gracias, solo una pregunta, ¿es necesario en cada archivo declarar la nueva conexión a la base de datos?, ¿no se podría llamar al archivo conexión.php y listo?.
Hola Juan! Estoy viendo tus videos y justo en esta parte me encontre con un problema en la parte de la instrucción sql, tengo los mismos parametros: login y contraseña solo que la palabra AND se colorea del mismo color que el marcador :login y al momento de poner los datos en el formulario no me redirecciona a la otra pagina, sin embargo si comento la linea desde el and y las demas sentencias que se relacionan con el password si me redirecciona a la nueva pagina de usuarios registrados
Hola profe todo esta perfecto pero lo que no entiendo porque no me permite con metodo post siempre con get ,lo que me obliga si el user y el pasword son correctos indicar a la pagina que hace trabajo duro derigir a otra pagina en breve paraque no parescan los datos en url , siempre me pasa en este curso y en otro y no se de que viene este problema .
Por lo comentarios parece que a nadie le salió el error que tuve pero por si acaso de todos modoso lo comento. La función rowCount() no me estaba generando ningún cambio colocara lo que colocara como usuario y contraseña, después de revisar mucho al final fue debido a la función addcslashes() que al no colocarle el segundo argumento que solicita me eliminaba el string.
ahi va otra mas, estuve mirando sobre seguridad de injeccion sql y las consultas preparadas: en el manual de php usa bindparam, para asignar los marcadores, con cual nos quedamos???? jeje dejo esta de yapa por si alguien quiere hacer un buscador con PDO como el que habiamos hecho casi al comienzo del curso :D
Se debe utilizar bindParam en las consultas preparadas con parámetros para evitar inyección SQL. En el curso utilizo esta función varias veces (creo recordar). Un saludo!!
sisi, utilizas bindValue para las etiquetas. Pero por eso no sabia que diferencia tenian ambas funciones, por lo que vi en el manual de php bindparam creo que es si la memoria no me falla para cuando utilizas ? en lugar de las etiquetas. lo usare como vos lo explicas, me parece mucho mas sensillo utilizar etiquetas y bindValue :D mil gracias por los videos la verdad estan 20 puntos lejos el mejor curso que vi
pildorasinformaticas El otro dia vi un comentario que decias que trabajabas como profe en un instituto... nunca probaste haciendote freelancer en web? sabes un monton. De hecho estoy haciendo este curso para potenciar lo poco que me enseño la facu para hacer eso.
:)) en instituto no. Soy profe en organismos públicos y empresas privadas. Hago diseño web freelance para clientes conocidos que me lo piden como favor especial. No hago más de 3 o 4 webs al año porque mi actividad principal (dar clases) no me deja más tiempo. Un saludo!!
Ya encontre el error solo movi el codigo php hasta arriba y se soluciono me imagino que no le daba prioridad a las lineas de codigo php por tenerlas debajo del DOCTYPE
En videos anteriores, Juan presentó otra alternativa a la función bindValue que consistía en hacer el "amarre" con parametros en la función execute: $resultado->execute(array(":LOGG"=> $login, ":passw"=> $passw)); Con ambas sintaxis el resultado es el mismo, al aplicar var_dump ($resultado); object(PDOStatement)#2 (1) { ["queryString"]=> string(72) "SELECT * FROM usuarios_pass WHERE USUARIOS = :LOGG AND PASSWORD = :passw" } ¿Estoy en lo cierto o no?
Así es, anteriormente hizo el bind o el amarre de la forma que describes. Aunque no entiendo a qué te refieres en este fragmento object(PDOStatement)#2 (1) { ["queryString"]=> string(72) "SELECT * FROM usuarios_pass WHERE USUARIOS = :LOGG AND PASSWORD = :passw" }
Hola muy buenos cursos, una duda , estoy usando el header para direccionar o login.php, pero me marca el siguiente error Warning: Cannot modify header information - headers already sent by (output started a tu sabras cual sera el problema por el cual manda esa advertencia
Muy bueno, como todos. Según mi opinión, lo del bucle a la página de logado no me gusta: o mostraría un mensaje avisando del error y un enlace de vuelta a la página de logado o, mostraría un mensaje en la página de logado avisando de que algo ha ido mal en el logado. Retornando a la página de logado, el usuario puede llegar a pensar que algo no funciona bien en la aplicación.
Gracias !! En ningún sitio. No subo códigos. Los cursos están pensados para que el alumno vaya haciéndolo a la par que el profesor igual que en una clase presencial. Un saludo
No lo pude hacer andar de ninguna forma... así que lo hice con array asociativos y salió andando solo evite lo de binvalue, cosa q nunca supe porque no anduvo
Muy buenas, muy buen vídeo gracias a este curso encontré lo necesario para crearme un login como proyecto, sólo quisiera ver si alguien o el maestro de este video me ayudará a buscar la forma de pasar todo el login (la Base de datos, archivos css, php, img, y el index.html)a un servidor online gratuito como prueba de que también funciona, por favor si alguien me atiende el comentario, muchas gracias
Excelente vídeo !! profe una consulta... me estoy familiarizando con todo esto de las web y me gustaría desarrollar una web con lo aprendido ¿Que mas necesito aprender aparte de html ,css , php y js ?? (se todo lo de BD ... estoy siguiendo todos sus cursos).
Se debe a que el uso de comillas dobles y simples es indiferente excepto cuando se utilizan comillas anidadas. En ese caso hay que seguir un orden a la hora de usar las comillas. Un saludo!!
vengo con otra duda, el molesto acá presente jaja. Quiero que si tiene un error al conectar la BD, me muestre un error en bootstrap, no se si lo correcto seria hacerlo así: ya que por lo que lei, el die hace lo mismo que el exit, da de baja los objetos, cierra el script y pasa el garbage collector verdad? utilizando el exit: }catch (Exception $e){ echo "Error: ".$e->getMessage()." Code: ".$e->getCode()."En la linea: ". $e->getLine().""; exit(); } o lo correcto seria, utilizando el die, y retorne el error en un return, para que luego lo imprima la pagina de login con las clases bootstrap?
Las dos formas son válidas si no cometes errores evidentemente. Pero es mucho más sencillo con el script que has escrito aquí, en vez de retornar el error y capturarlo en otra clase. Un saludo!!
hola maestro siempre adelante con sus clases sensacionales. tengo utilizado netbeans para la edición de los codigos... pero me sale un montones de errores del síntase. no encuentra bindValue. no dejame accessar los metodos get/post (no accesar los métodos get/post directamente). Deberia salir de este software por ahora? ayudame gran maestro. Saludos
Sí, pero cuando yo necesito utilizar los metodos post/get me muestra errores de sintase en el codigo (lineas). *** Usted no puede utilizar las variables globales directamente (mensaje - NetBeans). Yo no se como escribir tal filtro. * Es un software muy profesional? La gran ventaje: INTELIISENSE. Yo creo