elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  comprobar variables de db
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: comprobar variables de db  (Leído 1,198 veces)
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
comprobar variables de db
« en: 2 Diciembre 2014, 01:44 am »

Hola, siento que el titulo no sea muy intuitivo pero no encuentro manera de nombrar el problema que tengo.

Estoy reescribiendo un código que imprime una lista con datos de una tabla, pero con ciertas condiciones:

Código
  1. if ($stmt = $mysqli->prepare("  SELECT members.*, account_type.*, friends.*, friendsCount.*,
  2.                                       COUNT(friendsCount.friendID) AS num_f
  3.                                FROM members
  4.                                INNER JOIN account_type ON account_type.id = ?
  5.                                INNER JOIN friends ON friends.friendID = ?
  6.                                INNER JOIN friends AS friendsCount ON friendsCount.userID = ?
  7.                                WHERE members.id = ?")) {
  8.  
  9.    $stmt->bind_param('iiii', $_SESSION['acc_type'], $_GET['id'], $_SESSION['user_id'], $_GET['id']);
  10.    $stmt->execute();
  11.  
  12.    $result = $stmt->get_result();
  13.    $row = $result->fetch_array();
  14.  
  15.    $monthNames = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
  16.    $paid = array(); //Placeholder for paid months.
  17.  
  18.    for ($i = 1; $i < 13; $i++) {
  19.  
  20.        $month = 'month' . $i;
  21.        $bonus_month = 'bonus_month' . $i;
  22.  
  23.        // check if the user received the monthly bonus
  24.        if ($row[$bonus_month] == 0) {
  25.  
  26.            // check if the friend's member account is active
  27.            if ($row['status'] == 1) {
  28.  
  29.                // check if the friend paid the month
  30.                if ($row[$month] == 1) {
  31.  
  32.                    $paid[] = 'Pagado';
  33.  
  34.                    // check the user account type
  35.                    if ($row['type'] == 'Base') {
  36.  
  37.                        // TODO: check if the friend is one of the three first (special promotion)
  38.                        // (user gets double bonus for the first three invited friends)
  39.                        if ($row['extra'] == 1) {
  40.                            $extra = $row['bonus'] + 5;
  41.                            $bonus[] = $extra . '€';
  42.                        }
  43.  
  44.                        else {
  45.                            $bonus[] = $row['bonus'] . '€';
  46.                        }
  47.                    }
  48.  
  49.                    else {
  50.                        $bonus[] = $row['bonus'] . '€';
  51.                    }
  52.  
  53.                    $cashed[] = 'No';
  54.                    //$non_cashed[] = $bonus[];
  55.                }
  56.  
  57.                else {
  58.                    $paid[] = 'No Pagado';
  59.                    $bonus[] = 'n/a';
  60.                    $cashed[] = 'n/a';
  61.                }
  62.            }
  63.  
  64.            else {
  65.                $paid[] = 'n/a';
  66.                $bonus[] = 'n/a';
  67.                $cashed[] = 'n/a';
  68.            }
  69.        }
  70.  
  71.        else {
  72.            $paid[] = 'Pagado';
  73.            $bonus[] = $row[$bonus_month] . '€';
  74.  
  75.            // TODO: find a way to check if user already received the bonus
  76.            // 12 new columns? (bonus_received_month1-12)
  77.            if (1 == 0) {
  78.                $cashed[] = 'Si';
  79.                //$total_cashed[] = $row[$bonus_month];
  80.            }
  81.  
  82.            else {
  83.                $cashed[] = 'No';
  84.                //$non_cashed[] = $row[$bonus_month];
  85.            }
  86.        }
  87.    }
  88.  
  89.    //Now make the HTML list
  90.  
  91.    foreach ($monthNames as $key => $month) {
  92.  
  93.        echo '
  94.                <div class="list">
  95.                    <ul>
  96.                        <li><a class="month">' . $month . '</a></li>
  97.                        <li><a class="status">' . $paid[$key] .'</a></li>
  98.                        <li><a class="bonus">' . $bonus[$key] . '</a></li>
  99.                        <li><a class="cashed">' . $cashed[$key] . '</a></li>
  100.                    </ul>
  101.                </div>';
  102.    }
  103. } else echo $mysqli->error;

Basicamente son esos 2 "TODOs". Las relaciones de las tablas son muy sencillas:

1º members: contiene informacion de todos los usuarios y en este caso obtiene los datos del amigo ($_GET['id']) del usuario. Las columnas utilizadas son -> "id", "status" (0 or 1; inactive/active), "name" and "month1-12" (12 columns: 0 or 1; not paid / paid month).

2º account_type: contiene los diferentes tipos de cuenta (actualmente solo sirve para asignar bonificaciones segun el tipo). Las columnas utilizadas son -> "id" (members.acc_type), "type" (the type name) and "bonus" (5, 10, 15 etc...).

3º friends: contiene información acerca del usuario y las bonificaciones referentes a un amigo. Las columnas utilizadas son -> "friendID" (members.id, el usuario/amigo invitado), "userID" (members.id, el usuario que ha invitado a un amigo), "extra" (1 para los 3 primeros usuarios invitados y 0 para el resto; 1 es bonus doble, 0 es bonus normal. columna temporal), "bonus_month1-12" (12 columns; 0 is para este o un futuro mes, 1+ es el bonus que el usuario ha ganado este mes(el de la tabla: 1-12), referente al amigo)

Primero me gustaría poder reemplazar la columna friends.extra que indica si el usuario obtiene doble bonus o no, algo así como:

Código
  1. // the number of friends
  2. $count = $row['num_f'];
  3. // the current friendID
  4. $f_id = $_GET['id'];
  5. $match = 'the first 3 ids (with acc status 1)';
  6.  
  7. if ($count > 2 && $f_id == $match) {
  8.    $extra = $row['bonus'] + 5;
  9.    $bonus[] = $extra . '€';
  10. } else $bonus[] = $row['bonus'] . '€';

La idea es que los usuarios con tipo de cuenta "Base" obtengan doble beneficio por los tres primeros amigos invitados, teniendo en cuenta que una de las tres primeras cuentas este desactivada (status 0) entonces la siguiente deberia incluirse, un ejemplo:

Si la cuenta número 1 no esta activa pero la 2 y la 3 si, entonces la 4 debería incluirse en $match.

Pero no se como hacer esto, aunque tengo una ligera idea, ¿sería como crear un array con las ids que solo tengan status 1?

Lo otro debería ser más sencillo: una manera de comprobar si el usuario ya recibió la bonificación. Creo que lo mejor es hacer lo mismo que para saber si la mensualidad ha sido pagada, month1-12 usando 0 y 1, en este caso algo como bonus_received_month1-12. Y contar lo que tiene pendiente por recibir y el total recibido:

Código
  1. $non_cashed[] = $bonus[];
  2. $total_cashed[] = $row[$bonus_month];
  3. $non_cashed[] = $row[$bonus_month];
  4.  
  5. // not received
  6. echo '<p>Total acumulado: ' . array_sum($non_cashed[]) . '€</p>';
  7. // total received
  8. echo '<p>Total recibido: ' . array_sum($total_cashed[]) . '€</p>';

Creo que lo que falla aqui son las variables / arrays que no esta bien puestos...

Sinceramente, lo que mas agradecería serían los consejos, si hay fallos en el código y la manera de estructurar la DB (me han dicho que no se deben usar números en los nombres de las columnas por algo llamado normalización).

Gracias!


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pasar variables por formulario sin variables globales¿? « 1 2 »
PHP
hardkoo 11 9,206 Último mensaje 22 Noviembre 2006, 12:55 pm
por chicuela66
Comprobar sintaxis sql
Programación Visual Basic
elmaro 1 3,210 Último mensaje 28 Noviembre 2007, 18:06 pm
por elmaro
Variables dentro de variables (batch)
Scripting
MK-Ultra 8 7,425 Último mensaje 6 Febrero 2008, 23:18 pm
por GUN$
Comprobar si hay ping
Scripting
arca 9 6,683 Último mensaje 28 Octubre 2008, 22:18 pm
por Enemy
[BATCH] ¿Como puedo meter variables dentro de variables?
Scripting
Meine programmen 1 3,838 Último mensaje 24 Marzo 2012, 16:48 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines