warum UPDATE nur einmal in while schleife

Maniac

Erfahrenes Mitglied
Moin zusammen,

Ich habe ein komisches Phänomen.
Ich habe eine while-schleife in der ich einen bestimmten Code ausführe und als letztes einen UPDATE Befehl für die DB mache. Dieser Update Befehl wird aber nur genau einmal ausgeführt und das beim letzten item der Schleife.

hier der Code:

PHP:
$db->query("SELECT * FROM spielplan");
				while($res = $db->fetch_array())
				{	
					
					$tag   = $_POST['tag'] -7;
					$monat = $_POST['monat'];
					$jahr  = $_POST['jahr'];
					
						if($res['spieltag'] == $montag)
						{
							$tag = ($tag + 0) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $dienstag)
						{
							$tag = ($tag + 1) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $mittwoch)
						{
							$tag = ($tag + 2) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $donnerstag)
						{
							$tag = ($tag + 3) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $freitag)
						{
							$tag = ($tag + 4) + (7 * $res['spieltagNr']);
						}
					$datum = dat($tag,$monat,$jahr);
					
					$sql = "UPDATE spielplan SET datum='".$datum."' WHERE spielnr='".$res['spielnr']."' ";
					$db->query($sql);
					echo $sql."<br />";
}
 
Moin zusammen,

Ich habe ein komisches Phänomen.
Ich habe eine while-schleife in der ich einen bestimmten Code ausführe und als letztes einen UPDATE Befehl für die DB mache. Dieser Update Befehl wird aber nur genau einmal ausgeführt und das beim letzten item der Schleife.

hier der Code:

PHP:
$db->query("SELECT * FROM spielplan");
				while($res = $db->fetch_array())
				{	
					
					$tag   = $_POST['tag'] -7;
					$monat = $_POST['monat'];
					$jahr  = $_POST['jahr'];
					
						if($res['spieltag'] == $montag)
						{
							$tag = ($tag + 0) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $dienstag)
						{
							$tag = ($tag + 1) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $mittwoch)
						{
							$tag = ($tag + 2) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $donnerstag)
						{
							$tag = ($tag + 3) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $freitag)
						{
							$tag = ($tag + 4) + (7 * $res['spieltagNr']);
						}
					$datum = dat($tag,$monat,$jahr);
					
					$sql = "UPDATE spielplan SET datum='".$datum."' WHERE spielnr='".$res['spielnr']."' ";
					$db->query($sql);
					echo $sql."<br />";
}

versuche es mal so :
PHP:
$i=0;

$db->query("SELECT * FROM spielplan");
				while($res = $db->fetch_array())
				{	
					
					$tag   = $_POST['tag'] -7;
					$monat = $_POST['monat'];
					$jahr  = $_POST['jahr'];
					
						if($res['spieltag'] == $montag)
						{
							$tag = ($tag + 0) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $dienstag)
						{
							$tag = ($tag + 1) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $mittwoch)
						{
							$tag = ($tag + 2) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $donnerstag)
						{
							$tag = ($tag + 3) + (7 * $res['spieltagNr']);
						}
						elseif($res['spieltag'] == $freitag)
						{
							$tag = ($tag + 4) + (7 * $res['spieltagNr']);
						}
					$datum = dat($tag,$monat,$jahr);
					
					$sql[$i] = "UPDATE spielplan SET datum='".$datum."' WHERE spielnr='".$res['spielnr']."' ";
					$db->query($sql[$i]);
					echo $sql."<br />";
$i++;
}
 
leider auch nicht.....

Warum wird der Befehl denn nur einmal in der Schleife ausgeführt? das ist erst seit ich das Script auf eine DB-Klasse umgestellt hab. Ohne die Klasse ging es vorher ohne Probleme.
 
Die Klasse kommt mir bekannt vor. Wird denn die while-schleife auch mehr als einmal ausgeführt und eine frage habe ich zu dem :$datum = dat($tag,$monat,$jahr);
lass dir mal wirklich ausgeben echo $sql[$i]; in der Schleife
 
Die Klasse ist von hier und ein wenig umgebaut. Bin eigentlich sehr zufrieden damit bis auf diesen einen Fehler halt.
Die Schleife hat 240 durchläufe, und nur der Letzte wird upgedatet.
 
Ich habe sowas in der Art auch mal gemacht, habe dies dann über eine externe Funktion gelöst´. die die klasse dann oft genug aufrief
 
PHP:
class sql
	{
	//::::: variables :::::
		var $connection;
		var $query;
		var $result;
	//::::: edit here the value : 1 = show errors on the site; 0 = show errors only in the source-code :::::
		var $show_errors = 1;
		var $host = "localhost";
		var $user = "root";
		var $passwd = "";
		var $db = "dart";	

	//::::: Konstructor :::::
		function sql()
		{
			$this->connect($this->host, $this->user, $this>passwd, $this->db);
		}
	//::::: Connect :::::
		function connect()
		{
			@$this->connection = mysql_connect($this->host, $this->user, $this->passwd);
			if ($this->connection)
			{
				$this->sel_db($this->db);
			}
			else 
			{
				$this->make_error(2, "Kann nicht zur Datenbank verbinden!", mysql_errno(), mysql_error());
			}
		}
	//::::: Select database :::::
		function sel_db($db)
		{
			if (@!mysql_select_db($this->db, $this->connection))
			{
				$this->make_error(2, "Kann die Datenbank nicht ausw&auml;hlen! ".$this->db, mysql_errno($this->connection), mysql_error($this->connection));
			}
		}
	//::::: query :::::
		function query($str, $get = 0)
		{
			if(@!$this->query = mysql_query($str, $this->connection))
			{
				$this->make_error(2, "Kann die Abfrage nicht starten: ".$str, mysql_errno($this->connection), mysql_error($this->connection));
			}
			else
			{
				if($get == 1)
				{
					return $this->query;
				}
			}
		}
		
	//::::: fetch array :::::
	function fetch_array($query = 0)
		{
			if ($query == 0)
			{
				if (@$this->result = mysql_fetch_array($this->query))
				{
					return $this->result;
				}
			}
			else
			{
				if (@$this->result = mysql_fetch_array($query))
				{
					return $this->result;
				}
			}
		}
	//::::: fetch object :::::
		function fetch_obj($query = 0)
		{
			if ($query == 0)
			{
				if (@$this->result = mysql_fetch_object($this->query))
				{
					return $this->result;
				}
			}
			else
			{
				if (@$this->result = mysql_fetch_object($query))
				{
					return $this->result;
				}
			}
		}
		
	//::::: fetch assoc ::::: 
		function fetch_assoc($query = 0) 
		{ 
			if ($query == 0) 
			{ 
				if (@$this->result = mysql_fetch_assoc($this->query)) 
				{ 
					return $this->result; 
				} 
			} 
			else 
			{ 
				if (@$this->result = mysql_fetch_assoc($query)) 
				{ 
					return $this->result; 
				} 
			} 
		}  
		
	//::::: num_rows ::::::
		function num_rows($query = 0)
		{
			if ($query == 0)
			{
				if (@$this->result = mysql_num_rows($this->query))
				{
					return $this->result;
				}
			}
			else
			{
				if (@$this->result = mysql_num_rows($query))
				{
					return $this->result;
				}
			}
		}
	//::::: Error function :::::
		function make_error($mode, $desc, $errno, $error)
		{
			/*::::: error modes :
				1 = Light Error
				2 = Critical Error
			:::::*/
			switch($mode)
			{
				case 1:
					$mod = "Leichter Fehler :"; break;
				case 2:
					$mod = "Kritischer Fehler :"; break;
				default:
					$mod = "Fehler :"; break;
			}
			if ($this->show_errors == 1)
			{
				$err_msg = "<span style=\"color: #FF0000; font-weight: bold; font-size: 14pt;\">".$mod."</span><br />";
				$err_msg .= "Beschreibung: <b>".$desc."</b><br />";
				$err_msg .= "MySQL error nummer: <b>".$errno."</b><br />";
				$err_msg .= "MySQL error Beschreibung: <b>".$error."</b><br />";
				$err_msg .= "Zeit: <b>".date("d.m.y :: H:i:s")."</b<br />";
				$err_msg .= "<b>Bitte wenden Sie sich an den Administrator!<br /><a href=\"mailto: marcus.wolf@impuls-systems.de\">.:Administrator:.</a></b><br />";
				die ($err_msg);
			}
			elseif ($this->show_errors == 0)
			{
				$err_msg = $mod."\n";
				$err_msg .= "Description: ".$desc."\n";
				$err_msg .= "MySQL error nummer: ".$errno."\n";
				$err_msg .= "MySQL error description: ".$error."\n";
				$err_msg .= "Time: ".date("d.m.y :: H:i:s")."\n";
				$err_msg .= "Please contact the Administrator! :: Bitte wenden Sie sich an den Administrator! admin@sintima.de \n";
				die ("<!--".$err_msg."//-->");
			}
		}
	}

aufrufen tu ich sie in einer seperaten datei mit folgendem Befehl:

PHP:
require_once "classes.inc.php";
$db = new sql();
 
Hi,

lass $db->query() mal die Result-Resource zurückgeben und übergebe diese dann $db->fetch_array(). Hab's jetzt nur überflogen, aber eigentlich dürfte das Update nur beim ersten Datensatz funktionieren. Danach ist die Variable $query der Klasse neu gesetzt und fetch_array dürfte eigentlich nichts mehr liefern.

PHP:
$result = $db->query("SELECT * FROM spielplan", 1);
                while($res = $db->fetch_array($result))
                {    
...

LG
 
Zurück