Variablen einer if-Schleife merken

DrBonsai

Mitglied
Hallo, guten Abend,

heute habe ich folgendes Problem:

Ich kreire dynamisch eine Tabelle (eigentlich mehrere Tabellen, je nachdem wie viele Produkte gewählt wurden)

PHP:
//$string_quantity_sources wird per inlcude übergeben
$tables = ceil ($string_quantity_sources / 3);  
	// Erste Zeile
	for ($t=1; $t<=$tables; $t++)
		{
	echo "<form method='POST' action=''>
			<table border='1' cellspacing='0' cellpadding='0' style='table-layout:fixed'>\n
				<tr>\n
					<td colspan='7' style='width:700px'><h3>Calculo:</h3></td>\n
				</tr>\n
				<tr align = 'center'>\n
					<td>&nbsp;</td>\n ";
					for ($i = ((($t -1)* 3) +1); $i<= ($t * 3); $i++)
                                         {
                                         // aktuelles Produkt ermitteln
					$id = $_REQUEST['ref']; $order_number = $_REQUEST['n']; include_once '../../funcoes/fonte/db_ref.php';
					$source= "SELECT `fonte` FROM `gc_sources` WHERE `id` LIKE '$id' AND `order_number` = '$order_number' AND `row` = '$i'";	
					$query_source=mysql_query($source);
					while($source_array = mysql_fetch_assoc($query_source)) 
						{
						$string_source = ($source_array['fonte']); 
						}
					if ($i <= $string_quantity_sources)		
						{
						echo "
						<td colspan = '2'>".$string_source."</td> 
						";
						}
						else
						{
						echo "
						<td colspan = '2'>&nbsp;</td> 
						";						
						}
}
	for ($y=1; $y<=$years; $y++)
				{
				echo "
				<tr align = 'center'>\n
					<td style: width = '100px'>&nbsp;</td>\n ";
				for ($i = ((($t -1)* 3) +1); $i<= ($t * 3); $i++)
					{
//Variablen erstellen DIE ICH MIR MERKEN MÖCHTE (...) (SQL-Abfrage und Verrechnung mit anderen Variablen
				if ($i <= $string_quantity_sources)		
						{
						echo "
						<td>";  if ($y == 1) { echo round($string_initial_cost + ($price_actual_year * $month_first_year /12 ),2) ; } else { echo $price_actual_year; }  // oben erstellte Variableecho "</td> 
						<td>".$amortization."</td>   // oben erstellte Variable
						";
						}
						else
						{
						echo "
						<td>&nbsp;</td> 
						<td>&nbsp;</td> 
						";						
						}
					}
				echo "	
				</tr> ";
				}
			echo "
				
				</table>\n
				<br/>
				</form>";		
		}
	}

So:
die innerhalb der Schleife erstellten Variablen brauche ich aber weiterhin, um sie miteinander zu vergleichen. (Wenn es genauer sein soll: Ich muss jede zweite Spalte, beginnend mit der ersten von der ersten bis zur aktuellen Zelle addieren, und von der Summe der ersten bis zur aktuellen Zelle in der ersten Spalte subtrahieren, und das Ergebnis dann in dir rechts davon liegende Spalte schreiben)

Mein Problem ist, dass ich nicht weiß, wie ich mir die Variablen merke und addieren kann. Habe schon sowas probiert:
PHP:
	if ($i == 1)
						{
						if ($y == 1)
							{
							$total_price_first_colum = round($string_initial_cost + ($price_actual_year * $month_first_year /12 ),2);
							}
							else
								{
								$total_price_first_colum = $total_price_first_colum + $price_actual_year;								
								}
						}
					//remember actual colum
					if ($y == 1)
							{
							$total_price_actual_colum = round($string_initial_cost + ($price_actual_year * $month_first_year /12 ),2);
							}
							else
								{
								$total_price_actual_colum = $total_price_actual_colum + $price_actual_year;								
								}
Problem: $total_price_actual_colum ist dann ja immer die Summe aus allen vorangegangen Zeilen UND Spalten. Ich brauch aber die Summe aus der jeweils aktuellen Spalte. Ist das verständlich?

Deswegen meine Frage: Gibt es eine Möglichkeit Variablen so zu definieren, dass sie auch außerhalb der if-Schleife verfügbar sind?

Ohne Session-Variablen zu verwenden?

Schönes WE,

mfg,
David
 
Es gibt in PHP keinen Gültigkeitsbereich wie z.B. in C++ und ähnlichen Sprachen.

Ich geb zu, ich hab mir deinen oberen Code nicht wirklich angeschaut, weil er doch ziemlich durcheinander und unübersichtlich ist. Aber eine Variable wird, sobald deffiniert, im ganzen Script zur verfügung stehen (außer sie werden gelöscht oder du befindest dich in einer Funktion, dort gibt es Sichtbereiche).

Kannst du deine Additionen nicht schon per SQL erledigen und nur noch speichern?
 
@Napofis Hättest du meinen ganzen Beitrag gelesen wäre dir folgender Satz aufgefallen

Aber eine Variable wird, sobald deffiniert, im ganzen Script zur verfügung stehen (außer sie werden gelöscht oder du befindest dich in einer Funktion, dort gibt es Sichtbereiche)

Also ist ja nicht so, dass ich es nicht wüsste und nicht erwähnen würde. Aber in seinem Fall war es uninteressant, da er hier nicht von Funktionen erzählt, sondern einen Schlangencode hat. Somit ist das in einen Nebensatz (bzw Klammer) gefallen.

e/ Ich geb zu, ist etwas ungeschickt ausgedrückt. Ich hätte es etwas weiter ausformulieren können..
 
Ich hab schon alles gelesen aber diese Aussage konnte ich einfach nicht so stehen lassen, sry.

Ich hab jetzt versucht mich durch den Code zu arbeiten, aber der ist echt übel Formatiert!
Da erkennt man gar nichts.
Es gab doch mal eine Art Norm/Richtlinie für sowas, wie hies die gerade noch?
 
Egal. Vielleicht nächstes mal den Post nicht mit "WTF?" einleiten ;)


Es gibts zum Beispiel den Coding Standard.

Viele gehen auch nach dem Standard von C++, da dieser sehr weit verbreitet ist.
 
Zuletzt bearbeitet:
Ich hab das aus meinen Lehrbüchern übernommen und so hab ich den obrigen Code mal Formatiert aber ehrlich gesagt ich versteh sein Problem immer noch nicht wirklich.

Hier die Formatierte Version soweit wie möglich, viel Spaß....

PHP:
//$string_quantity_sources wird per inlcude übergeben
$tables = ceil ($string_quantity_sources / 3);

// Erste Zeile
for ($t=1; $t<=$tables; $t++) {
	echo "<form method='POST' action=''>
		<table border='1' cellspacing='0' cellpadding='0' style='table-layout:fixed'>\n
		<tr>\n<td colspan='7' style='width:700px'><h3>Calculo:</h3></td>\n</tr>\n
		<tr align = 'center'>\n<td>&nbsp;</td>\n ";
				for ($i = ((($t -1)* 3) +1); $i<= ($t * 3); $i++) {
					// aktuelles Produkt ermitteln
					$id = $_REQUEST['ref'];
					$order_number = $_REQUEST['n']; 
					include_once '../../funcoes/fonte/db_ref.php';
					
					$source= "SELECT `fonte` FROM `gc_sources` WHERE `id` LIKE '$id' AND `order_number` = '$order_number' AND `row` = '$i'";
					$query_source=mysql_query($source);
					while($source_array = mysql_fetch_assoc($query_source)) {
						$string_source = ($source_array['fonte']);
					}
					
					if ($i <= $string_quantity_sources) {
						echo "<td colspan = '2'>".$string_source."</td>";
					} else {
						echo "<td colspan = '2'>&nbsp;</td>";
					}
				}
				
				for ($y=1; $y<=$years; $y++) {
					echo "<tr align = 'center'>\n<td style: width = '100px'>&nbsp;</td>\n ";
					for ($i = ((($t -1)* 3) +1); $i<= ($t * 3); $i++) {
						//Variablen erstellen DIE ICH MIR MERKEN MÖCHTE (...) (SQL-Abfrage und Verrechnung mit anderen Variablen
						if ($i <= $string_quantity_sources) {
							echo "<td>";
							if ($y == 1) {
								echo round($string_initial_cost + ($price_actual_year * $month_first_year /12 ),2);
							} else {
								echo $price_actual_year;
							}  // oben erstellte Variable
							echo "</td><td>".$amortization."</td>";   // oben erstellte Variable
						} else {
							echo "<td>&nbsp;</td><td>&nbsp;</td>";
						}
					}
					echo "</tr> ";
				}
				echo "</table>\n<br />
			</form>";
		}
	}
 
Das mit der Formatierung des Codes ist so eine Sache für sich.

Ich nehme mir immer vor, schön sauber zu schreiben. Aber nach einer Weile habe ich wieder ne üble Unordnung im Code...

Also nochmal mein Problem:

Meine Variablen werden bei jedem Schleifendurchlauf definiert, in die Tabelle geschrieben und beim nächsten Durchlauf neu definiert. Damit ist der alte Wert weg und kann nicht mehr weiter benutzt werden.
Allerdings muss ich diese Werte später noch verwenden und miteinander verrechnen. Daher benötige, ich eine möglichkeit mir irgendwie sämtliche Werte zu merken.
 
Vielleicht helfen dir ja Array's weiter. Einfach ein $Data-Array anlegen, und darin immer die Werte speichern die du übernehmen willst

PHP:
for($i = 0; $i < 5; ++$i) {
    $Data[] = $i;
    // Andere Operationen
}
echo "<pre>";
print_r($Data);
echo "</pre>";
 
...
Meine Variablen werden bei jedem Schleifendurchlauf definiert, in die Tabelle geschrieben und beim nächsten Durchlauf neu definiert. Damit ist der alte Wert weg und kann nicht mehr weiter benutzt werden.
Allerdings muss ich diese Werte später noch verwenden und miteinander verrechnen.
....

Dann gib Ihn doch einen anderen Namen oder bilde Zwischensummen.
Oder noch besser mach es so wie CookieBuster sagt und pack sie in ein Array.
Dann bekommst du auch Ordnung in dein Script, das bedeutet, ich stell mir den Rest des Scriptes auch so vor wie deine Auszüge.

So wirst du auch weniger Fehler machen.
Aber was noch viel wichtiger ist, versuch den Code mal nach ein bis zwei Jahren zu warten .... du wirst verzweifeln!

Ordnung hat nur Vorteile.
 
Zurück