# HG changeset patch # User viric@llimona # Date 1163021938 -3600 # Node ID 8d76ba374dee8166e5619c8e132488473ac910e3 # Parent 43323a4bccdd925db4b3935185939f41fff0be5c He afegit una comprovació alhora d'afegir una compra nova. diff -r 43323a4bccdd -r 8d76ba374dee update-compra.php --- a/update-compra.php Fri Oct 13 11:28:57 2006 +0200 +++ b/update-compra.php Wed Nov 08 22:38:58 2006 +0100 @@ -265,7 +265,7 @@

Excepcions

Empleneu les necessàries. S'agafaran si hi ha algo a - Article):

+ Article:

@@ -389,211 +389,389 @@ // Afegir les coses a la base de dades // Falta xequejar si les dades estan bé +/* Ha de retornar false si falla. True si va bé */ + settype($_POST["hora"], "integer"); + settype($_POST["minut"], "integer"); + settype($_POST["dia"], "integer"); + settype($_POST["mes"], "integer"); + settype($_POST["any"], "integer"); - if (mysql_select_db($mysql_db,$connexio)) + settype($_POST["preu"], "double"); // Preu=0 ERROR TO HANDLE *** + + $error = ""; + +function end_error() +{ + global $error; + echo "

ERROR! " . $error . "

\n"; + echo "

Prem \"Enrera\" al navegador per a corregir la compra.

\n"; + exit(-1); + echo "hola"; +} + +function compra_valida() +{ + global $error, $habitants; + if ($_POST["preu"] == 0) { - settype($_POST["hora"], "integer"); - settype($_POST["minut"], "integer"); - settype($_POST["dia"], "integer"); - settype($_POST["mes"], "integer"); - settype($_POST["any"], "integer"); + $error = "El preu ha de ser més de 0"; + return false; + } + $preu_per_compradors = $_POST["preu"]; + + /* Posem a 0 els toca_pagar finals */ + foreach($habitants as $j) + $toca_pagar[$j["id"]] = 0.; - settype($_POST["preu"], "double"); // Preu=0 ERROR TO HANDLE *** + for ($i = 1; $i <= $_POST["num_excepcions"]; $i++) + { + if($_POST["earticle"][$i] != "") + { + settype($_POST["epreu"][$i], "double"); + + if ($_POST["epreu"][$i] == 0) + { + $error = "Una excepció té preu 0."; + return false; + } + + $preu_per_compradors -= $_POST["epreu"][$i]; - // ** El preu ha de ser la suma de lo que ha pagat tothom. O inferior! - $data = mktime($_POST["hora"], $_POST["minut"], 0, $_POST["mes"], $_POST["dia"], $_POST["any"]); + foreach($habitants as $j) + if (isset($_POST["eparticipat"][$i][$j["id"]])) + $participants++; + + for ($j=0;$j<$_POST["num_altres_excepcions"];$j++) + if (isset($_POST["eparticipat_altres"][$i][$j])) + $participants++; + + if ($participants == 0) + { + $error = "En una excepció no hi ha participants."; + return false; + } + + $preu_per_cap = $_POST["epreu"][$i] / $participants; - // Inserto la fila a 'compres' - $query = "INSERT INTO compres VALUES(FROM_UNIXTIME($data),'" . strtosql($_POST["botiga"]) . "','". strtosql($_POST["motiu"]) . "', ". $_POST["preu"] . ", '" . strtosql($_POST["comentari"]) ."');"; - $resultat = 1; // Per si no es fa la query, assumim que no hi ha errors - if ($touchdb) - $resultat = mysql_query($query, $connexio); - else - echo $query . "
"; + // Els habitants que compren l'article + foreach($habitants as $j) + { + if (isset($_POST["eparticipat"][$i][$j["id"]])) + { + $toca_pagar[$j["id"]] += $preu_per_cap; + } + } + for ($j=0;$j<$_POST["num_altres_excepcions"];$j++) + { + if (isset($_POST["eparticipat_altres"][$i][$j])) + { + $persona = $_POST["ealtres"][$i][$j]; + $toca_pagar[$persona] += $preu_per_cap; + } + } + } + } + + if ($_POST["percentatges"] == "checkboxes") + { + $participants = 0; + foreach($habitants as $j) + if (isset($_POST["checkbox"][$j["id"]])) + $participants++; + for ($j=0;$j<$_POST["num_altres"];$j++) + if (isset($_POST["checkbox_altres"][$j])) + $participants++; + + if ($participants == 0) + { + $error = "No hi ha participants de la compra."; + return false; + } + } - // Comprovem el resultat de l'inserció a "compres" - if (!$resultat) - { -?> -

ERROR: Error al actualitzar les dades a - compres!

-"; + $suma_pagat = 0; + // Els habitants que compren + foreach($habitants as $i) + { + $total_a_pagar = 0; + settype($_POST["pagat"][$i["id"]], "double"); + + $suma_pagat += $_POST["pagat"][$i["id"]]; + + if ($_POST["percentatges"] == "checkboxes") + { + if(isset($_POST["checkbox"][$i["id"]])) + $total_a_pagar = $preu_per_compradors / $participants; + } + elseif ($_POST["percentatges"] == "si") + { + settype($_POST["percent"][$i["id"]], "double"); + $total_a_pagar = $preu_per_compradors * $_POST["percent"][$i["id"]] / 100; } else { - $preu_per_compradors = $_POST["preu"]; - - // Afegim les excepcions - for ($i = 1; $i <= $_POST["num_excepcions"]; $i++) - { - if($_POST["earticle"][$i] != "") - { - settype($_POST["epreu"][$i], "double"); // Preu=0 ERROR TO HANDLE *** - - $preu_per_compradors -= $_POST["epreu"][$i]; + settype($_POST["tocapagar"][$i["id"]], "double"); + $total_a_pagar = $_POST["tocapagar"][$i["id"]]; + } - // ** El preu de l'article ha de ser inferior al preu de la compra! + $toca_pagar[$i["id"]] += $total_a_pagar; + $toca_pagar[$i["id"]] -= $_POST["pagat"][$i["id"]]; + } + // Els altres que compren + for($i=0; $i < $_POST["num_altres"]; $i++) + { + $total_a_pagar = 0; + settype($_POST["pagat_altres"][$i], "double"); + $suma_pagat += $_POST["pagat_altres"][$i]; + if ($_POST["percentatges"] == "checkboxes") + { + if(isset($_POST["checkbox_altres"][$i])) + $total_a_pagar = $preu_per_compradors / $participants; + } + elseif ($_POST["percentatges"] == "si") + { + settype($_POST["percent_altres"][$i], "double"); + $total_a_pagar = $preu_per_compradors * $_POST["percent_altres"][$i] / 100; + } + else + { + settype($_POST["tocapagar_altres"][$i], "double"); + $total_a_pagar = $_POST["tocapagar_altres"][$i]; + } - // Inserto la fila a 'excepcions' - $query = "INSERT INTO excepcions (data,article,preu) VALUES(FROM_UNIXTIME($data),'" . strtosql($_POST["earticle"][$i]) . - "',". $_POST["epreu"][$i] . ");"; - $resultat = 1; // Per si no es fa la query, assumim que no hi ha errors - if ($touchdb) - $resultat = mysql_query($query, $connexio); - else - echo $query . "
"; + $persona = $_POST["altres"][$i]; + + $toca_pagar[$persona] += $total_a_pagar; + $toca_pagar[$persona] -= $_POST["pagat_altres"][$i]; + } - // Obtenim l'ID de la excepció - $query = "SELECT id FROM excepcions WHERE data = FROM_UNIXTIME($data) AND article = '" . strtosql($_POST["earticle"][$i]) . - "' AND preu = ". $_POST["epreu"][$i] . ";"; - $resultat = 1; // Per si no es fa la query, assumim que no hi ha errors - if ($touchdb) - { - $resultat = mysql_query($query, $connexio); - $ex_id = mysql_result($resultat, 0, "id"); - } - else - { - echo $query . "
"; - $ex_id = 255; - } - - // Comptem quants participen - $participants = 0; - foreach($habitants as $j) - if (isset($_POST["eparticipat"][$i][$j["id"]])) - $participants++; - for ($j=0;$j<$_POST["num_altres_excepcions"];$j++) - if (isset($_POST["eparticipat_altres"][$i][$j])) - $participants++; - $preu_per_cap = $_POST["epreu"][$i] / $participants; + if ($suma_pagat != $_POST["preu"]) + { + $error = "El total pagat no correspon amb el preu de la compra."; + return false; + } + $suma_toca_pagar = 0; + for($i=0; $i < $_POST["num_altres"]; $i++) + { + $persona = $_POST["altres"][$i]; + $suma_toca_pagar += $toca_pagar[$persona]; + } + foreach($habitants as $i) + { + $suma_toca_pagar += $toca_pagar[$i["id"]]; + } + if (abs($suma_toca_pagar) > 0.01) + { + $error = "El càlcul final no quadra per una suma de " . + abs($suma_toca_pagar) . " EUR"; + return false; + } + return true; +} - // Els habitants que compren l'article - foreach($habitants as $j) - { - if (isset($_POST["eparticipat"][$i][$j["id"]])) - { - $query = "INSERT INTO compradors_excepcions (ex_id,persona,toca_pagar) VALUES($ex_id," . $j["id"] . ",". $preu_per_cap.");"; - if ($touchdb) - $resultat = mysql_query($query, $connexio); - else - echo $query . "
"; - } - } + /* Començem a tocar la base de dades */ + + if (!mysql_select_db($mysql_db,$connexio)) + { + $error = "La connexió amb la base de dades ha fallat.\n"; + $error .= mysql_errno().": ".mysql_error(); + end_error(); + } + + // ** El preu ha de ser la suma de lo que ha pagat tothom. O inferior! + $data = mktime($_POST["hora"], $_POST["minut"], 0, $_POST["mes"], $_POST["dia"], $_POST["any"]); + + $query = "SELECT data from compres where data = " . + "FROM_UNIXTIME($data);"; - for ($j=0;$j<$_POST["num_altres_excepcions"];$j++) - { - if (isset($_POST["eparticipat_altres"][$i][$j])) - { - $persona = $_POST["ealtres"][$i][$j]; - $query = "INSERT INTO compradors_excepcions (ex_id,persona,toca_pagar) VALUES($ex_id," . $persona . ",". $preu_per_cap.");"; - if ($touchdb) - $resultat = mysql_query($query, $connexio); - else - echo $query . "
"; - } - } - } - } // Fi del for - // Afegim el que han pagat i el que els toca pagar a cada habitant - // Participen els habitants + $num_altres - - // Comptem quans participen si hi ha checkboxes - if ($_POST["percentatges"] == "checkboxes") - { - $participants = 0; - foreach($habitants as $j) - if (isset($_POST["checkbox"][$j["id"]])) - $participants++; - for ($j=0;$j<$_POST["num_altres"];$j++) - if (isset($_POST["checkbox_altres"][$j])) - $participants++; - } - - // Els habitants que compren - foreach($habitants as $i) + if ($touchdb) + { + $resultat = mysql_query($query, $connexio); + if (mysql_num_rows($resultat) > 0) + { + $error = "La compra ja existeix."; + end_error(); + } + } + else + echo $query; + + if (!compra_valida()) + end_error(); + + /* Començem a afegir les coses a la base de dades */ + // Inserto la fila a 'compres' + $query = "INSERT INTO compres VALUES(FROM_UNIXTIME($data),'" . strtosql($_POST["botiga"]) . "','". strtosql($_POST["motiu"]) . "', ". $_POST["preu"] . ", '" . strtosql($_POST["comentari"]) ."');"; + $resultat = 1; // Per si no es fa la query, assumim que no hi ha errors + if ($touchdb) + $resultat = mysql_query($query, $connexio); + else + echo $query . "
"; + + // Comprovem el resultat de l'inserció a "compres" + if (!$resultat) + { + $error = "Error al actualitzar les dades a compres:\n" . mysql_errno() . ": " . mysql_error()."
"; + end_error(); + } + + + $preu_per_compradors = $_POST["preu"]; + + // Afegim les excepcions + for ($i = 1; $i <= $_POST["num_excepcions"]; $i++) + { + if($_POST["earticle"][$i] != "") + { + settype($_POST["epreu"][$i], "double"); + + $preu_per_compradors -= $_POST["epreu"][$i]; + + // Inserto la fila a 'excepcions' + $query = "INSERT INTO excepcions (data,article,preu) VALUES(FROM_UNIXTIME($data),'" . strtosql($_POST["earticle"][$i]) . + "',". $_POST["epreu"][$i] . ");"; + $resultat = 1; // Per si no es fa la query, assumim que no hi ha errors + if ($touchdb) + $resultat = mysql_query($query, $connexio); + else + echo $query . "
"; + + // Obtenim l'ID de la excepció + $query = "SELECT id FROM excepcions WHERE data = FROM_UNIXTIME($data) AND article = '" . strtosql($_POST["earticle"][$i]) . + "' AND preu = ". $_POST["epreu"][$i] . ";"; + $resultat = 1; // Per si no es fa la query, assumim que no hi ha errors + if ($touchdb) { - $total_a_pagar = 0; - settype($_POST["pagat"][$i["id"]], "double"); - if ($_POST["percentatges"] == "checkboxes") - { - if(isset($_POST["checkbox"][$i["id"]])) - $total_a_pagar = $preu_per_compradors / $participants; - } - elseif ($_POST["percentatges"] == "si") - { - settype($_POST["percent"][$i["id"]], "double"); - $total_a_pagar = $preu_per_compradors * $_POST["percent"][$i["id"]] / 100; - } - else - { - settype($_POST["tocapagar"][$i["id"]], "double"); - $total_a_pagar = $_POST["tocapagar"][$i["id"]]; - } - - if ($_POST["pagat"][$i["id"]] != 0 || $total_a_pagar != 0) - { - $query = "INSERT INTO compradors (data,persona,pagat,toca_pagar) VALUES(FROM_UNIXTIME($data)," . $i["id"] . ",". - $_POST["pagat"][$i["id"]] . ", $total_a_pagar);"; - if ($touchdb) - $resultat = mysql_query($query, $connexio); - else - echo $query . "
\n"; - } + $resultat = mysql_query($query, $connexio); + $ex_id = mysql_result($resultat, 0, "id"); + } + else + { + echo $query . "
"; + $ex_id = 255; } + + // Comptem quants participen + $participants = 0; + foreach($habitants as $j) + if (isset($_POST["eparticipat"][$i][$j["id"]])) + $participants++; + for ($j=0;$j<$_POST["num_altres_excepcions"];$j++) + if (isset($_POST["eparticipat_altres"][$i][$j])) + $participants++; + $preu_per_cap = $_POST["epreu"][$i] / $participants; - // Els altres que compren - for($i=0; $i < $_POST["num_altres"]; $i++) + // Els habitants que compren l'article + foreach($habitants as $j) { - $total_a_pagar = 0; - settype($_POST["pagat_altres"][$i], "double"); - if ($_POST["percentatges"] == "checkboxes") - { - if(isset($_POST["checkbox_altres"][$i])) - $total_a_pagar = $preu_per_compradors / $participants; - } - elseif ($_POST["percentatges"] == "si") - { - settype($_POST["percent_altres"][$i], "double"); - $total_a_pagar = $preu_per_compradors * $_POST["percent_altres"][$i] / 100; - } - else + if (isset($_POST["eparticipat"][$i][$j["id"]])) { - settype($_POST["tocapagar_altres"][$i], "double"); - $total_a_pagar = $_POST["tocapagar_altres"][$i]; - } - - if ($_POST["pagat_altres"][$i] != 0 || $total_a_pagar != 0) - { - $persona = $_POST["altres"][$i]; - $query = "INSERT INTO compradors (data,persona,pagat,toca_pagar) VALUES(FROM_UNIXTIME($data)," . $persona . ",". - $_POST["pagat_altres"][$i] . ", $total_a_pagar);"; + $query = "INSERT INTO compradors_excepcions (ex_id,persona,toca_pagar) VALUES($ex_id," . $j["id"] . ",". $preu_per_cap.");"; if ($touchdb) $resultat = mysql_query($query, $connexio); else echo $query . "
"; } } - - - // *** No s'hauria de deixar continuar si peta la compra!!!! (de fet és el que fa. O NO?) - } // Fi de si la inserció de compres va bé. - // Què cutre que és això. ** - echo "Si no hi ha cap missatge d'error, tot ha anat bé! La compra ha estat afegida.
"; - - } - else + for ($j=0;$j<$_POST["num_altres_excepcions"];$j++) + { + if (isset($_POST["eparticipat_altres"][$i][$j])) + { + $persona = $_POST["ealtres"][$i][$j]; + $query = "INSERT INTO compradors_excepcions (ex_id,persona,toca_pagar) VALUES($ex_id," . $persona . ",". $preu_per_cap.");"; + if ($touchdb) + $resultat = mysql_query($query, $connexio); + else + echo $query . "
"; + } + } + } + } // Fi del for + // Afegim el que han pagat i el que els toca pagar a cada habitant + // Participen els habitants + $num_altres + + // Comptem quans participen si hi ha checkboxes + if ($_POST["percentatges"] == "checkboxes") { - ?> -

ERROR: No s'ha pogut connectar a la base de dades! - Segurament degut a una contrassenya incorrecta.

- "; + $participants = 0; + foreach($habitants as $j) + if (isset($_POST["checkbox"][$j["id"]])) + $participants++; + for ($j=0;$j<$_POST["num_altres"];$j++) + if (isset($_POST["checkbox_altres"][$j])) + $participants++; + } + + // Els habitants que compren + foreach($habitants as $i) + { + $total_a_pagar = 0; + settype($_POST["pagat"][$i["id"]], "double"); + if ($_POST["percentatges"] == "checkboxes") + { + if(isset($_POST["checkbox"][$i["id"]])) + $total_a_pagar = $preu_per_compradors / $participants; + } + elseif ($_POST["percentatges"] == "si") + { + settype($_POST["percent"][$i["id"]], "double"); + $total_a_pagar = $preu_per_compradors * $_POST["percent"][$i["id"]] / 100; + } + else + { + settype($_POST["tocapagar"][$i["id"]], "double"); + $total_a_pagar = $_POST["tocapagar"][$i["id"]]; + } + + if ($_POST["pagat"][$i["id"]] != 0 || $total_a_pagar != 0) + { + $query = "INSERT INTO compradors (data,persona,pagat,toca_pagar) VALUES(FROM_UNIXTIME($data)," . $i["id"] . ",". + $_POST["pagat"][$i["id"]] . ", $total_a_pagar);"; + if ($touchdb) + $resultat = mysql_query($query, $connexio); + else + echo $query . "
\n"; + } } + // Els altres que compren + for($i=0; $i < $_POST["num_altres"]; $i++) + { + $total_a_pagar = 0; + settype($_POST["pagat_altres"][$i], "double"); + if ($_POST["percentatges"] == "checkboxes") + { + if(isset($_POST["checkbox_altres"][$i])) + $total_a_pagar = $preu_per_compradors / $participants; + } + elseif ($_POST["percentatges"] == "si") + { + settype($_POST["percent_altres"][$i], "double"); + $total_a_pagar = $preu_per_compradors * $_POST["percent_altres"][$i] / 100; + } + else + { + settype($_POST["tocapagar_altres"][$i], "double"); + $total_a_pagar = $_POST["tocapagar_altres"][$i]; + } + + if ($_POST["pagat_altres"][$i] != 0 || $total_a_pagar != 0) + { + $persona = $_POST["altres"][$i]; + $query = "INSERT INTO compradors (data,persona,pagat,toca_pagar) VALUES(FROM_UNIXTIME($data)," . $persona . ",". + $_POST["pagat_altres"][$i] . ", $total_a_pagar);"; + if ($touchdb) + $resultat = mysql_query($query, $connexio); + else + echo $query . "
"; + } + } + + // Què cutre que és això. ** + echo "Si no hi ha cap missatge d'error, tot ha anat bé! La compra ha estat afegida.
"; + } ?>