alexsb
hmm
|
Folgendes:
Ich lasse eine schleife Laufen die die varieble $x immer um eins erhöht, bis diese die Größe $y erreicht also:
for ($x = "1"; $x <= $y; $x++)
Jetzt gebe ich das ganze in eine Sql query:
$sql="INSERT INTO table (x) VALUES ($x)";
mysql_query($sql);
ich möchte aber das beim Letzten Durchlauf (in diesem Fall den 17ten) $x nicht 16 ist sonder 16C
Das Frag ich mit if ab, also:
if ($x < $y) { blabla } else if ($x == $y) { $x = $x+"c"; }
Das geht aber nicht! ich kann zu Integer Variablen keine Strings dazuzählen, wie kann ich das lösen?
|
bernhard
Little Overclocker
|
> for ($x = "1"; $x <= $y; $x++) $x muß/sollte hier kein String sein. >ich möchte aber das beim Letzten Durchlauf [...] Dieser Spezialfall sollte dann aber nicht innerhalb der Schleife behandelt werden, denn der nachfolgende Test "16c"<=$y ist nicht das, was ich unter sauberem Programmieren verstehe. Simpler Vorschlag: for ($x=1;$x<$y;$x++) {
do_something($x);
}
$x.="c";
do_something($x);
|
alexsb
hmm
|
for ($PortNummer = "1"; $PortNummer <= $Anzahl; $PortNummer++) { if ($Portnummer < $Anzahl) { $sqlinsert2="INSERT INTO t_porthub (rHubNr, PortNummer, rArtHubNr, ZielPort, Länge, Bemerkung, ZielRaum, ZielNV, ZielPanel) VALUES ('$rHubNr','$PortNummer','$arthub','-','-','-','-','-','-')"; } else if ($PortNummer == $Anzahl) { $PortNummer = $PortNummer - "1" + "c"; $sqlinsert2="INSERT INTO t_portpatch (rPatchNr, PortNummer, rArtPatchNr, ZielSteckRaum, ZielPatchRaum, Länge, Dämpfung, Bemerkung, ZielSteckNV, ZielSteckPort, ZielPatchDose, ZielSteckPanel, ZielPatchPanel, ZielPatchNv, ZielPatchPort) VALUES ('$rPatchNr','$PortNummer','$artpatch','-','-','-','-','-','-','-','-','-','-','-','-')"; echo "Hieristsie:".$PortNummer; $PortNummer = $PortNummer + "1" - "c"; } */ echo $sqlinsert2; echo "<br>"; echo $PortNummer; echo "<br>"; echo $sqlinsert2; mysql_query($sqlinsert2); }
So hab i mir das gedacht! Also das der Vergleich net hinhaut des war mir klar! Werds aber mal so probieren
|
alexsb
hmm
|
ok, die obige war g.f. (GrundFalsch), hier kommt jetzt eine Version bei der ich nicht verstehe warum er nicht ins else if geht?
for ($PortNummer = "1"; $PortNummer <= $Anzahl; $PortNummer++) { if ($Portnummer < $Anzahl) { $sqlinsert2="INSERT INTO t_porthub (rHubNr, PortNummer, rArtHubNr, ZielPort, Länge, Bemerkung, ZielRaum, ZielNV, ZielPanel) VALUES ('$rHubNr','$PortNummer','$arthub','-','-','-','-','-','-')"; } else if ($PortNummer == $Anzahl) { $PortNummerersatz = $PortNummer; $PortNummer = $PortNummer - 1; $PortNummer."c"; $sqlinsert2="INSERT INTO t_portpatch (rPatchNr, PortNummer, rArtPatchNr, ZielSteckRaum, ZielPatchRaum, Länge, Dämpfung, Bemerkung, ZielSteckNV, ZielSteckPort, ZielPatchDose, ZielSteckPanel, ZielPatchPanel, ZielPatchNv, ZielPatchPort) VALUES ('$rPatchNr','$PortNummer','$artpatch','-','-','-','-','-','-','-','-','-','-','-','-')"; echo "Hieristsie:".$PortNummer; $PortNummer = $PortNummerersatz; } echo $sqlinsert2; echo "<br>"; echo $PortNummer; echo "<br>"; echo $sqlinsert2; mysql_query($sqlinsert2); }
|
bernhard
Little Overclocker
|
> if ($Portnummer < $Anzahl) Variablennamen sind in PHP case sensitive! Ex falso quodlibet. > $PortNummer."c"; Diese Zeile ist wirkungslos. > $PortNummerersatz = $PortNummer; Diese Herumschupferei mit anschaun zu müssen, tut weh. Warum willst Du zwanghaft die Zählvariable verbiegen? Ein $tempNummer=($PortNummer-1)."c"; reicht. Wie schon zuvor erwähnt, kann das Anwenden von comparison operators auf strings kuriose bis schlimme Folgen haben. _Bitte_ verwende einen numerischen Datentyp. <?
$Anzahl=17;
for($PortNummer=1;$PortNummer<=$Anzahl;$PortNummer++) {
if($Portnummer<$Anzahl) {
$query="INSERT INTO foo (bar) VALUES ($PortNummer);
} else {
$tempNummer=($PortNummer-1)."c";
$query="INSERT INTO foo (bar) VALUES ($tempNummer);
}
mysql_query($query);
}
?>
|
Vir@s
Code Monkey
|
Diese Herumschupferei mit anschaun zu müssen, tut weh. Warum willst Du zwanghaft die Zählvariable verbiegen? [/code] Deshalb wird es auch in den meisten OpenSource Programmen so gemacht - und das verändern einer Zählvariable dient dazu um die Schleife dynamisch zu verändern. Geb dir zwar Recht, dass es hier nicht wirklich nötig ist, allerdings ist der Gedanke selbst nicht so abwegig.
|
bernhard
Little Overclocker
|
> und das verändern einer Zählvariable dient dazu um die Schleife dynamisch zu verändern.
s/dynamisch zu verändern/schwer debug- und lesbar zu machen/
Ich behaupte kühn, daß man in 99% der Fälle mit den statements continue und break das Auslangen finden kann, obwohl sogar diese bereits Anfänge von Spaghetti code darstellen.
|
Vir@s
Code Monkey
|
Natürlich ist es möglich - und ich verwendete sowieso meistens nur break - allerdings ist es nicht so weit hergeholt, wenn man die Schleife so verändert in dem man die Zählvariable verändert.
Natürlich ist das wieder eine pot. Fehlerquelle.
|
bernhard
Little Overclocker
|
> allerdings ist es nicht so weit hergeholt, wenn man die Schleife so verändert in dem man die Zählvariable verändert.
Obwohl es - und ich kann das nur nochmals betonen - alles andere als guter Stil ist, ist es nicht abwegig, doch das stand auch nie in Frage.
Im konkreten Fall wird die Zählvariable ja nur temporär verbogen, um nachher wieder durch ein "backup" zurückgesetzt zu werden. _Das_ ist unnötig (außer man will den Variablennamen unbedingt beibehalten).
|
Vir@s
Code Monkey
|
Jep - bestreite ich auch ned - würd es auch nicht so machen Hatte nur den Eindruck du meinst, dass dies ein vollkommender Blödsinn ist.
|