He afegit una comprovació alhora d'afegir una compra nova.
authorviric@llimona
Wed, 08 Nov 2006 22:38:58 +0100
changeset 8 8d76ba374dee
parent 7 43323a4bccdd
child 9 e3ddfccc8d4f
He afegit una comprovació alhora d'afegir una compra nova.
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 @@
 
 <H2>Excepcions</H2>
 <p>Empleneu les necessàries. S'agafaran si hi ha algo a
-	<STRONG>Article</STRONG>):</p>
+	<STRONG>Article</STRONG>:</p>
 
 <TABLE BORDER=0>
 <TR>
@@ -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 "<p><strong>ERROR!</strong> " . $error . "</p>\n";
+	echo "<p>Prem \"Enrera\" al navegador per a corregir la compra.</p>\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 . "<BR>";
+			// 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)
-		{
-?>
-			<p> <STRONG>ERROR:</STRONG> Error al actualitzar les dades a
-				<STRONG>compres</STRONG>! </p>
-<?php
-			echo mysql_errno().": ".mysql_error()."<BR>";
+	$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 . "<BR>";
+		$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 . "<BR>";
-						$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 . "<BR>";
-						}
-					}
+	/* 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 . "<BR>";
-						}
-					}
-				}
-			}	// 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 . "<BR>";
+
+	// Comprovem el resultat de l'inserció a "compres"
+	if (!$resultat)
+	{
+		$error = "Error al actualitzar les dades a <strong>compres</strong>:\n" . mysql_errno() . ": " . mysql_error()."<br>";
+		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 . "<BR>";
+
+			// 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 . "<BR>\n";
-				}
+				$resultat = mysql_query($query, $connexio);
+				$ex_id = mysql_result($resultat, 0, "id");
+			}
+			else
+			{
+				echo $query . "<BR>";
+				$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 . "<BR>";
 				}
 			}
-			
-
-			// *** 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.<BR>";
-			
-	}
-	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 . "<BR>";
+				}
+			}
+		}
+	}	// 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")
 	{
-	?>
-		<p> <STRONG>ERROR:</STRONG> No s'ha pogut connectar a la base de dades!
-		Segurament degut a una contrassenya incorrecta. </p>
-	<?php
-			echo mysql_errno().": ".mysql_error()."<BR>";
+		$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 . "<BR>\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 . "<BR>";
+		}
+	}
+		
+	// Què cutre que és això. **
+	echo "Si no hi ha cap missatge d'error, tot ha anat bé! La compra ha estat afegida.<BR>";
+		
 }
 ?>