Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Array-Filterung

Empfohlene Antworten

Veröffentlicht

Hallo, Leute!

Ich scheine vor einem unlösbaren Problem zu stehen.

Gibt es eine Möglichkeit Variablen aus einem Array darzustellen, die einen Wert besitzen und die, die leer sind, rauszufiltern?

Hier ist das Problem:

Ich habe zwei Seiten:

* seite1.php

* seite2.php

auf seite1.php gibt es vier eingabefelder

<?
...
<input type="text" name="feld1">,
<input type="text" name="feld2">,
<input type="text" name="feld3">,
<input type="text" name="feld4">
...
?>[/PHP]

- also mit der bezeichnung $feld1, $feld2, $feld3 und feld vier.

$feld1 und $feld3 beinhalten jeweils eine zeichenkette ("Wohnung" und "Haus" oder sowas); $feld2 und $feld4 sind jeweils leer.

Beim Aufruf der seite2.php sollen $feld1 bis $feld4 übergeben werden.

Die Felder, die eine Zeichenkette beinhalten, sollen nacheinander ausgegeben werden. Die, deren Eingabefelder leer waren, demzufolge nicht.

Die Ausgabe sollte folgendermaßen aussehen:

1. Wohnung

2. Haus

Hat jemand ne Idee, wie das umzusetzen geht?

Vielen Dank im Voraus!

Marcus

ist unlösbar :rolleyes:

für alle variablen

schau ob leer, wenn leer mach nix und wenn gefüllt gib in hashtable....

gib hashtable aus

if(!empty($feld1)) {
$felder[] = $feld1;
}
if (!empty($feld2)) {
$felder[] = $feld2;
}
if (!empty($feld3)) {
$felder[] = $feld3;
}
if (!empty($feld4)) {
$felder[] = $feld4;
}

$i = 1;
foreach($felder AS $feld) {

echo $i.'. '.$feld.'<br>';

$i++;
}[/PHP]

Danke für den Tipp, ZuVieL!

Es funzt.

Mittlerweile stehe ich vor einem neuen Problem.

Jedem Eingabefeld (text)

<input type="text" name="feld1">,
<input type="text" name="feld2">,
<input type="text" name="feld3">,
<input type="text" name="feld4">[/PHP]

ist ein ein Eingabefeld zugeordnet, das jeweils Zahlen beinhaltet

[PHP]<input type="text" name="zahl1">,
<input type="text" name="zahl2">,
<input type="text" name="zahl3">,
<input type="text" name="zahl4">

Diese Zahlenwerde sollen den entsprechenden text-Eingabefeldern zugeordnet werden.

"$zahl" is der jeweilige Zahlenwert, der an dieser Stelle ausgegeben werden soll (s. unten).

Brauche ich hierfür eine Schleife?

Wenn ja, wie muss das Konstrukt aussehen?

						$i = 1;
foreach($felder AS $bezeichnung) {
echo '<tr><td align="right">'.$i.'.</td>
<td></td>
<td align="right">'.$bezeichnung.'</td>
<td></td>
<td align="right">';

echo $zahl;

echo '</td>
<td></td>
<td align="right">Einzelpreis</td>
<td></td>
<td align="right">Gesamtpreis</td>
<td></td>';

$i++;
}[/PHP]

Vielen Dank vorab!

<input type="text" name="feld[1]">,

<input type="text" name="feld[2]">,

<input type="text" name="feld[3]">,

<input type="text" name="feld[4]"> 
<input type="text" name="zahl[1]">,

<input type="text" name="zahl[2]">,

<input type="text" name="zahl[3]">,

<input type="text" name="zahl[4]"> 


foreach($_POST['feld'] as $id => $text)
{
$zahl = $_POST[$id];
.....
}
[/PHP]

es sei gesagt das du prüffunktionen brauchst, als is_int(), isset(), !empty

um sicher zu sein das niemand dein Formular manipuliert.

von endlosen if(...) else... rate ich dir ab, sehr unflexibel. Innerhalb einer schleife geht es besser.

<input type="text" name="feld[1]">,

<input type="text" name="feld[2]">,

<input type="text" name="feld[3]">,

<input type="text" name="feld[4]"> 
<input type="text" name="zahl[1]">,

<input type="text" name="zahl[2]">,

<input type="text" name="zahl[3]">,

<input type="text" name="zahl[4]"> 


foreach($_POST['feld'] as $id => $text)
{
$zahl = $_POST[$id];
.....
}
[/PHP]

es sei gesagt das du prüffunktionen brauchst, als is_int(), isset(), !empty

um sicher zu sein das niemand dein Formular manipuliert.

von endlosen if(...) else... rate ich dir ab, sehr unflexibel. Innerhalb einer schleife geht es besser.

Danke, aber wo muss bzw. wie muss ich das denn jetzt genau einbinden?

Ich habe leicht den Überblick verloren. :s

vielleicht noch mal das beispiel, um es sich plastischer vorzustellen:

seite1.php

<tr>

		<td valign="top">Bezeichnung:</td>

		<td></td>

		<td><input name="bezeichnung" style="width: 250px;"><br>

		       <input name="bezeichnung1" style="width: 250px;"><br>

		       <input name="bezeichnung2" style="width: 250px;"><br>

			<input name="bezeichnung3" style="width: 250px;"><br>

			<input name="bezeichnung4" style="width: 250px;"></td>

		<td width="10"></td>

		<td><input name="stunden" style="width: 40px;"><br>

			<input name="stunden1" style="width: 40px;"><br>

			<input name="stunden2" style="width: 40px;"><br>

			<input name="stunden3" style="width: 40px;"><br>

			<input name="stunden4" style="width: 40px;"></td>

	</tr>

seite2.php

...

<?
if(!empty($bezeichnung)) {
$felder[] = $bezeichnung;
}
if (!empty($bezeichnung1)) {
$felder[] = $bezeichnung1;
}
if (!empty($bezeichnung2)) {
$felder[] = $bezeichnung2;
}
if (!empty($bezeichnung3)) {
$felder[] = $bezeichnung3;
}
if (!empty($bezeichnung4)) {
$felder[] = $bezeichnung4;
}
if (!empty($bezeichnung5)) {
$felder[] = $bezeichnung5;
}
?>[/PHP]

...

[PHP]<tr>
<td align="right"><b>Pos.</b></td>
<td width="20"></td>
<td align="right"><b>Bezeichnung</b></td>
<td width="20"></td>
<td align="right"><b>Menge</b></td>
<td width="20"></td>
<td align="right"><b>Einzelpreis</b></td>
<td width="20"></td>
<td align="right"><b>Gesamtpreis</b></td>
<td width="10"></td>
</tr>
<tr>
<td colspan="8" height="10"></td>
</tr>

<?
$i = 1;
foreach($felder AS $bezeichnung) {
echo '<tr><td align="right">'.$i.'.</td>
<td></td>
<td align="right">'.$bezeichnung.'</td>
<td></td>
<td align="right">'.$stunden.'</td>
<td></td>
<td align="right">Einzelpreis</td>
<td></td>
<td align="right">Gesamtpreis</td>
<td></td><tr>';

$i++;
}
?>

Auf seite2.php sollen nun alle text-Felder nacheinander gelistet werden, die NICHT leer sind. Darüber hinaus sollen die entsprechenden Stunden, die zusätzlich auf seite1.php angegeben wurden, dazugeschrieben werden (s.oben $stunden).


	    <tr>

	            <td valign="top">Bezeichnung:</td>

	            <td></td>

	            <td>

	                <input name="bezeichnung[1]" style="width: 250px;"><br>

	                <input name="bezeichnung[2]" style="width: 250px;"><br>

	                <input name="bezeichnung[3]" style="width: 250px;"><br>

	                <input name="bezeichnung[4]" style="width: 250px;"><br>

	                <input name="bezeichnung[5]" style="width: 250px;">

	            </td>

	            <td width="10"></td>

	            <td>

	                <input name="stunden[1]" style="width: 40px;"><br>

	                <input name="stunden[2]" style="width: 40px;"><br>

	                <input name="stunden[3]" style="width: 40px;"><br>

	                <input name="stunden[4]" style="width: 40px;"><br>

	                <input name="stunden[5]" style="width: 40px;">

	            </td>

	        </tr>


$i = 1;
foreach($bezeichnung AS $id => $bez) {
if(!empty($bez)) {
echo '
<tr>
<td align="right">'.$i.'.</td>
<td></td>
<td align="right">'.$bez.'</td>
<td></td>
<td align="right">'.$stunden[$id].'</td>
<td></td>
<td align="right">Einzelpreis</td>
<td></td>
<td align="right">Gesamtpreis</td>
<td></td>
<tr>
';
$i++;
}//if ende
}//foreach ende[/PHP]

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.