String parsen

kesnw

Erfahrenes Mitglied
Hi,

ich speichere in eine Variable ($var) einen String mit 4 Stellen ab, z.B. so:

$var = "1001";

Ich möchte nun z.B. in die 2. Stelle des Strings eine 1 schreiben, also:

$var = "1101";

Geht so etwas?

KAI
 
Ok, das sieht gut aus.

Jetzt aber folgendes Problem:

Ich möchte das Ganze für eine Sessionvariable machen, sieht das dann so aus:

<php>
$_SESSION['zert'] = "1001";
$_SESSION['zert'][1] = "1";
echo $var;
</php>

Komisch ist bei dieser Variante, dass die Ausgabe des Variableninhaltes "Array" ist und nicht wie gewünscht "1101".

Warum? Wie mache ich das richtig?

KAI
 
Versuchs besser mit geschweiften Klammern {} die funktionieren im gegensatz zu den eckigen auch noch in den nächsten PHP-Versionen!
PHP:
$_SESSION['zert']{1} = "1";

Ps: Die Ausgabe Array deswegen, weil bei allen nicht in String parsbaren Variablentypen (darunter auch Array) der Veriablentyp zurückgegeben wird (vorausgesetzt natürlich, dass man nicht auf ein Element des Arrays zugreift).
Array deswegen, weil PHP bei manchen Fällen die eckigen Klammern als Array interpretiert und so automatisch ein Array daraus macht.
Um Arrays anzulegen sollte aber immer array genutzt werden.
 
Ok, das Problem hab ich jetzt gelöst. Es geht nun um was anderes:

Ich habe ein Formular mit 4 Checkbuttons. Das Ergebnis, also welche Buttons angeklickt würden möchte ich nun so abfragen:

PHP:
if($_POST['submit'] == "Weiter") { 
/// START ZERTIFIKAT
		
$_SESSION['zert'] = "0000";
if ($_POST['zertifikat'] == "iso9000") {
$_SESSION['zert']{0} = "1";
}

if ($_POST['zertifikat'] == "iso14001") {
$_SESSION['zert']{1} = "1";
}
	
if ($_POST['zertifikat'] == "fda") {
$_SESSION['zert']{2} = "1";
}
	
if ($_POST['zertifikat'] == "gmp") {
$_SESSION['zert']{3} = "1";
}
	
//// END ZERTIFIKAT
}

Das Formular sieht so aus:
Code:
<form action="speichern/speichern_quality.php" method="POST">
<table allign="left">
<tr>
<td valign="top" width="200">
Über welche Zertifikate verfügt <? echo $_SESSION['name']; ?>?
</td>
<td width="40">
</td>
<td width="40" valign="top">
ISO 9000
</td>
<td width="40" valign="top">
ISO 14001
</td>
<td width="40" valign="top">
FDA
</td>
<td width="40" valign="top">
GMP
</td>
<td width="160">
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
<input type="checkbox" name="zertifikat" value="iso9000" <? echo $iso9; ?>>
</td>
<td>
<input type="checkbox" name="zertifikat" value="iso14001" <? echo $iso14; ?>>
</td>
<td>
<input type="checkbox" name="zertifikat" value="fda" <? echo $fda; ?>>
</td>
<td>
<input type="checkbox" name="zertifikat" value="gmp" <? echo $gmp; ?>>
</td>
</tr>
<table>
<br><br>
<table allign="left">
<tr>
<td><input type="submit" name="submit" value ="Zurück"></td>
<td><input type="submit" name="submit" value ="Werte zurücksetzen"></td>
<td><input type="submit" name="submit" value ="Weiter"></td>
</tr>
</table>
</form>

Ich möchte also in einer Variable abspeichern welche Checkboxen gewählt wurden, etwa "1010" für die 1. und 3. Checkbox usw. Momentan speichert er nur die zulatz ausgewählte ab, habe ich also die 1. und 3. angeklickt speichert er nur "0010" ab...

Hat etwas mit der Abfrage zu tun, muss nicht unbedingt if sein, kann auch mit switch gehen, hab allerdings grade einen Hänger...

DANKE
 
Zuletzt bearbeitet:
Liegt daran, dass die alle den gleichen Namen tragen ($_POST['zertifikat'] kann nicht "iso14001" und "fda" gleichzeitug sein) und dass die Checkboxen nicht per value, sondern mit == "on" ausgelesen werden.

Ich bin mir nicht sicher, aber die Werte werden glaub ich nur übermittelt, wenn die Checkbox abgehakt ist. In dem Fall reich folgendes (die Namen der Checkboxen müssen hier durchnummeriert sein (zertifikat1, zertifikat2, usw.):
PHP:
$zert = "";
for ($i=1; $i<=4, $i++) {
    $zert .= (isset($_POST['zertifikat'+$i]))?"1":"0";
}
 
Danke, das hat leider nicht so funktioniert, habe es jetzt folgendermassen gemacht:

PHP:
//// START ZERTIFIKAT
$_SESSION['zert']="0000";
for ($i=1; $i<=4; $i++) {
   if ($_POST['zertifikat'+$i] == "on") {
   $_SESSION['zert'][$i-1] = "1";
} else {
   $_SESSION['zert'][$i-1] = "0";
}
}
//// END ZERTIFIKAT

Wie sprincht man die Checkboxen an? Mit =="on" scheint es nicht zu gehen...

DANKE!
 
Das Zeugs in der else-Klausel is überflüssig, da die Zahl ja sowieso schon 0 ist.
Ps: Benutz geschweifte Klammern! {}
Sorry übrigens wegen dem hier: $_POST['zertifikat'+$i], war im Gedanken noch bei JavaScript :)

So gehts 100% (getestet)
PHP:
<?php

if (!isset($_POST['step'])) {
	?>
	<form action="checkbox.php" method="post">
		<input type="hidden" name="step" value="2">

		<input type="checkbox" name="zertifikat1">Zertifikat 1
		<br>
		<input type="checkbox" name="zertifikat2">Zertifikat 2
		<br>
		<input type="checkbox" name="zertifikat3">Zertifikat 3
		<br>
		<input type="checkbox" name="zertifikat4">Zertifikat 4
		<br>
		<br>
		<input type="submit" value=" Weiter ">
	</form>
	<?php
} else {
	$zert = "";
	for ($i=1; $i<=4; $i++) {
		$zert .= (isset($_POST['zertifikat'.$i]))?"1":"0";
	}

	echo $zert;
}
?>
 
Zurück