Detalles de un usuario -- php campo con pdo camp codereview Relacionados El problema

Details of a user


1
vote

problema

Español

¿Podría recomendar cómo podría mejorar este código? Mi editor PHP solo le dio una advertencia sobre la variable $id .

  require_once 'includes/config.php';  $id = (isset($_GET['id']) || trim($_GET['id'])) ? intval($_GET['id']) : 0;  if (!empty($id) && filter_var($id, FILTER_VALIDATE_INT)) {     $sql = $pdo->prepare("SELECT * FROM users WHERE id = :id");     $sql->bindValue(':id', $id);     $sql->execute();     $row = $sql->fetch(PDO::FETCH_ASSOC);   } else {       $user->redirectTo('index');   }    if ($row === false){       $error[] = "No user found, sorry!";   }    if (isset($error)){       foreach($error as $error){           echo '<div class="alert alert-danger" role="alert">'.$error.'</div>';           $user->redirectTo('index');       }   }   
Original en ingles

Would you please recommend how I could improve this code? My PHP editor only gave a warning about the variable $id.

require_once 'includes/config.php';  $id = (isset($_GET['id']) || trim($_GET['id'])) ? intval($_GET['id']) : 0;  if (!empty($id) && filter_var($id, FILTER_VALIDATE_INT)) {     $sql = $pdo->prepare("SELECT * FROM users WHERE id = :id");     $sql->bindValue(':id', $id);     $sql->execute();     $row = $sql->fetch(PDO::FETCH_ASSOC);   } else {       $user->redirectTo('index');   }    if ($row === false){       $error[] = "No user found, sorry!";   }    if (isset($error)){       foreach($error as $error){           echo '<div class="alert alert-danger" role="alert">'.$error.'</div>';           $user->redirectTo('index');       }   } 
     
         
         

Lista de respuestas

1
 
vote
  jmp9  

¿No debería ser un jb020 ? jb1 ? El comportamiento actual es que verifica si se establece y, si no, se desactiva del espacio en blanco. Pero no habría ningún espacio en blanco si jb2 no estaba establecido.

  jb3  

Esta versión comprueba si está configurada y, en caso afirmativa, se ajusta al espacio en blanco. Si el resultado del recorte es una cadena que se evalúa como verdadera (no una cadena vacía), intenta tomar el 99887766655443324 . Eso tiene más sentido.

No dice cuál es la advertencia, pero si el problema es que 99887766555443325 no se establece cuando lo usa, cambiar el operador debe solucionarlo.

 
$id = (isset($_GET['id']) || trim($_GET['id'])) ? intval($_GET['id']) : 0; 

Shouldn't the || be an &&? The current behavior is that it checks if it is set and if not, it trims off the whitespace. But there wouldn't be any whitespace if $_GET['id'] wasn't set.

$id = (isset($_GET['id']) && trim($_GET['id'])) ? intval($_GET['id']) : 0; 

This version checks if it is set and if so, it trims off whitespace. If the result of the trim is a string that evaluates as true (not an empty string), it attempts to take the intval. That makes more sense.

You don't say what the warning is, but if the problem is that $_GET['id'] is not set when you use it, changing the operator should fix it.

 
 
1
 
vote

Personalmente, siempre me aseguraría de que todas las variables estén inicializadas. Esto ahorra muchos cheques "isset". Además, puede evitar posibles errores por los valores predeterminados inesperados de "inicialización".

  • $ fila nunca se define. Solo tiene sentido después de la ejecución de la consulta.
  • $ error podría inicializarse como una matriz vacía en lugar de agregar un elemento solo (null sería mejor, lea a continuación)
  • $ id ya está inicializado como un entero (usando intval o 0)

Además, el error nunca se usa como una matriz. Por lo tanto, sería mejor usarlo realmente de esa manera, o simplemente cambiar el código para verificar por NULL.

Cuando $_GET['id'] no está configurado, recortará el valor 9988776665544331 pero en realidad no haga nada con él. Puedes desnudar completamente esta pieza de código.

Otra sugerencia menor es seleccionar lo más posible para mantener el resultado de los resultados. En lugar de SELECT * FROM users podría SELECT id FROM users en su lugar.

  require_once 'includes/config.php';  $id = isset($_GET['id']) ? intval($_GET['id']) : 0;  $error = null; if ($id > 0) {     $sql = $pdo->prepare("SELECT id FROM users WHERE id = :id");     $sql->bindValue(':id', $id);     $sql->execute();     $row = $sql->fetch(PDO::FETCH_ASSOC);      if ($row === false){         $error = "No user found, sorry!";     } } else {     $user->redirectTo('index'); }   if ($error !== null){     echo '<div class="alert alert-danger" role="alert">'.$error.'</div>';     $user->redirectTo('index'); }   

Si no te gusta el error $! == nulo, siempre puedes eliminar el! == nulo, ya que null es falso.

 

Personally, I would always make sure all variables are initialized. This saves a lot of "isset" checks. Also, you can avoid possible errors by unexpected "initialization" defaults.

  • $row is never defined. It only makes sense after the execution of the query.
  • $error could be initialized as an empty array instead of appending an element only (null would be better, read below)
  • $id is already initialized as an integer (using intval or 0)

Also, error is never used as an array. So it would be better to really use it that way, or just change the code to check for NULL.

When $_GET['id'] is not set, it will trim the $_GET['id'] value but actually do nothing with it. You can entirely strip this piece of code.

Another minor suggestion is to select as little as possible to keep the resultset little. instead of SELECT * FROM users you could SELECT id FROM users instead.

require_once 'includes/config.php';  $id = isset($_GET['id']) ? intval($_GET['id']) : 0;  $error = null; if ($id > 0) {     $sql = $pdo->prepare("SELECT id FROM users WHERE id = :id");     $sql->bindValue(':id', $id);     $sql->execute();     $row = $sql->fetch(PDO::FETCH_ASSOC);      if ($row === false){         $error = "No user found, sorry!";     } } else {     $user->redirectTo('index'); }   if ($error !== null){     echo '<div class="alert alert-danger" role="alert">'.$error.'</div>';     $user->redirectTo('index'); } 

If you don't like the $error !== null, you can always remove the !== null, since null is falsey.

 
 

Relacionados problema

1  Un sistema similar / a diferencia de MySQL y PDO  ( A like unlike system using mysql and pdo ) 
He creado un sistema similar / a diferencia. El usuario hace clic en uno para indicar un "Me gusta" y hacer clic nuevamente para "A diferencia de". Actualment...

4  Consulta para trazar un histograma de calificaciones de canciones  ( Query to plot a histogram of song ratings ) 
Escribí código para trazar una distribución de calificación, que se parece a esto: La función más importante es el stats Función: function stats($so...

0  Formulario de sintaxis PDO  ( Syntax form pdo ) 
Pudo ejecutar el formulario para actualizar los datos del perfil de usuario, por el momento está en una versión aproximada, pero sé que se puede mejorar. Pu...

5  ¿Hay algún problema para revisar la conexión PHP PDO de esta manera?  ( Is there any problem in checking php pdo connection this manner ) 
¿Hay algún problema para revisar la conexión PHP PDO de esta manera? es de esta manera confiable? function pdo_mysql() { $mysql_string = "xxxxxxxxxxx"; ...

2  Adquiriendo información de los empleados  ( Acquiring employee information ) 
Tengo curiosidad por saber si hay una forma más rápida, mejor y más eficiente de lograr este programa que adquiere información de los empleados: <?php ...

9  Método de base de datos para consultar  ( Database method to query ) 
Tengo una clase de base de datos que en __construct() Inicialice una conexión PDO e inserte la instancia en un VAR privado de $ dB. Ahora estoy trabajando e...

4  Conexión PDO (MYSQL) y Clase de consulta, seguridad y lógica  ( Pdo mysql connection and query class safety and logic ) 
Durante los últimos días, intenté averiguar cómo trabajar con MySQL y PDO. Aunque he tratado de leer mucho sobre el tema, todavía hay muchas cosas que no enti...

8  Clase de base de datos usando PDO  ( Database class using pdo ) 
el punto de esta pregunta En realidad, lo estoy usando mientras desarrolla una aplicación simple y parece cubrir todas mis necesidades. También utiliza PD...

1  Categorizar y Sub clasificar desde el contenido de una fila y más ejecute aún más consultas en resultados  ( Categorize sub categorize from contents of one row and more execute even more ) 
Tengo una tabla llamada sales y tiene debajo de las columnas: 'id' 'product_type' 'soldDate' 'text' 'product_type' Ejemplos: Tshirt-XL , Tshirt-L...

5  Autenticación de inicio de sesión PHP con BCIPTPT  ( Php login authentication with bcrypt ) 
Tengo un script de autenticación PHP y todo funciona bien, pero no estoy seguro de la forma en que lo programé (i hard codificé algunas cosas). Esperaba que l...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos