URL: https://www.overclockers.at/coding-stuff/php_string_zu_integer_addieren_32780/page_1 - zur Vollversion wechseln!
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?
> 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:
Code:for ($x=1;$x<$y;$x++) { do_something($x); } $x.="c"; do_something($x);
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
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);
}
> 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.
Code:<? $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); } ?>
OK!
Danke!
Zitat von bernhardDiese Herumschupferei mit anschaun zu müssen, tut weh. Warum willst Du zwanghaft die Zählvariable verbiegen?
[/code]
> 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.
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.
> 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).
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.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025