PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Vergleich mit bestimmtem Array Teilelement


ooAlbert
2006-08-21, 11:04:06
Hi,

ich möchte einen vergleich anstellen mit einer variable und etwas aus einem POST Array, das Problem es wird immer der letze Wert des Array Segemnst benutzt aber ich brauche den Idex genau davor :)

zb:
Inhalt:
$_POST[abc][3][Test]

if($id==$_POST[abc]){}

Ich möchte, das er die Zahl in $id mit dem Index [3] vergleicht und bei Übereinstimmung etwas tut aber wie sprech ich den Index an?

$_POST[abc][] geht nicht... und nur $_POST[abc] auch nicht, da dann das letze element verglichen wird.

hat da wer eine idee zu?

mfg

Gast
2006-08-21, 12:25:36
$_POST ist kein mehrdimensionales Array, ich verstehe nicht ganz was du willst.

MadMan2k
2006-08-21, 12:27:23
mit name="bla[]" kannst du es zu einem machen

ooAlbert
2006-08-21, 14:02:06
ja genau deshalb ist mein POST auch mehrdimensional :)

<input type=checkbox name=Auswahl[] value=an>

wenn man das absendet und es die 3. auswahl wäre steht in dem [] eine 3, so wie oben und ich möchte, das diese 3 verglichen wird mit einer anderen integervariable ob diese identisch sind :)

Dummerweise wird aber nur das letzeglied verglichen in dem valle das was für "value" eingetragen wird.

Hardwaretoaster
2006-08-21, 14:15:47
Ich verstehe immer noch nicht, warum du es mehrdim. willst...

MadMan2k
2006-08-21, 14:28:09
und ich versteh nicht so ganz ob du key oder value vergleichen willst...
vielleciht hilft dir das die frage besser zu formulieren:
http://de2.php.net/manual/en/language.types.array.php

ooAlbert
2006-08-21, 15:05:22
das ist doch vollkommen egal warum ich den wert auslese ... im endeffekt ist die [3] nur ein index der direkt auf eine zeile in einer tabelle zeigt.

es geht nur darum kann man solch einen unterteil des arrays vergleichen oder geht der dann zwangsweise bis ganz zum endwert?

anders gesprochen wenn ich dem sage:
$ID++;
echo "<input type=checkbox name=Auswahl[] value=$ID>";

...

würde ich die vergleichen können da es ja das letze element ist in dem arrystrang.

ich brauchs aber so:
$ID++;
echo "<input type=checkbox name=Auswahl[$ID] value=an>";

und da kann ich nur "an" vergleichen aber nicht die $ID, welche eine ebene höher stünde.

ethrandil
2006-08-21, 15:18:20
if($_POST[abc][3] == 'an') ?

- eth

ooAlbert
2006-08-21, 23:48:44
ne,

man stelle sich vor es wird ein weiterer array in einer schleife eingelesen udn jede "zeile" hat eine ID und diese ID steht als integer in $ID. Im formular wird ebenfalls eine zeile ausgewählt und übermittelt im POST nun soll geschaut werden ob sie übereinstimmt in dem man ($ID == "$_POST[abc][]) vergleicht nut kann ich kein leerzeichen da stehen lassen udn auch keine variable einsetzen.

mithrandir
2006-08-22, 08:21:17
Damit wir hier nicht noch weiter aneinander vorbeireden. Du meinst nicht zufällig so etwas hier, oder?

<?php
$numberOfFormFields = 5;

if ( $_POST['action'] != "validate" )
{
?>

<html>
<head>
<title>Testformular - Eingabe</title>
</head>
<body>
<h1>Testformular - Eingabe</h1>
<p align="center">
<form name="testform" method="POST" action="testform.php">
<?php
for( $i = 0; $i < $numberOfFormFields; $i++ )
{
echo "<input type=\"text\" name=\"testfield[]\" maxlength=\"200\" style=\"width: 180px;\"/><br/>";
}
?>
<input type="hidden" name="action" value="validate"/>
<input type="submit" class="buttonSubmit" value="&raquo; Submit"/><br/>
</form>
</p>
</body>
</html>

<?php
}
else
{
?>

<html>
<head>
<title>Testformular - Auswertung</title>
</head>
<body>
<h1 align="center">Testformular - Auswertung</h1>
<p align="center">
<?php
$testfield = $_POST['testfield'];

for( $i = 0; $i < $numberOfFormFields; $i++ )
{
echo $i, " - ", $testfield[$i], "<br/>";
}
?>
</p>
</body>
</html>

<?php
}
?>

Jetzt ergänz mal, was du jetzt anders hast/haben möchtest.

bye, Peter

ooAlbert
2006-08-22, 09:20:57
Das ist meine erzeugte Tabelle die außerdem die besagte ID enthält und hochzählt bis alle datensätze aus der DB ausgelesen sind. Jetzt drückt da wer auf den "Bearbeiten-senden" Knopf und "db_b.php" geht auf mit dem übertragenen POST-Array.


//daten.php

echo "<form action=db_b.php method=post>";
if(mysql_num_rows($result)) { //gucken ob was im Query drinsteckt
$ID=0;
while($row = mysql_fetch_assoc($result)) {
$ID++;
if($ID){

echo"
<tr>

<td>
<input type=submit name=Bearbeiten[$ID] value=Senden>
</td>

<td>
<input type=checkbox name=Löschen[$ID] value=Senden> Ja<br>
<input type=submit value=senden>
</td>

<td>".$ID."</td>
<td>".$row['lehrgang_id'].$row['termin_id']."</td>
<td>".$row['ort']."</td>
<td>".$row['datum1']." - ".$row['datum2']."</td>

</tr>";

}
}$ergebnis = mysql_num_rows($result);
} else {
echo "Es ist nichts neues in der Datenbank vorhanden<br />\n";
}
echo" </tr>";
echo"</table></form>";



Das macht jetzt im prinzip das selbe aver es soll nur den Datensatz anzeigen der mit der $ID übereinstimmt und hier ist nun die schwierigkeit, da in der If-abfrage bis zum letzend glied also dem vorherigen VALUE geprüft wird und die jetzige $ID ist ja nur ein integer und kein Array wie das POST.


//db_b.php

if(mysql_num_rows($result)) { //gucken ob was im Query drinsteckt
$ID=0;
while($row = mysql_fetch_assoc($result)) {
$ID++;
if($ID == "$_POST[Bearbeiten]"){

echo"
<tr>

<td>".$ID."</td>
<td>".$row['lehrgang_id'].$row['termin_id']."</td>
<td>".$row['ort']."</td>
<td>".$row['datum1']." - ".$row['datum2']."</td>

</tr>";



}
}$ergebnis = mysql_num_rows($result);
} else {
echo "Es ist nichts neues in der Datenbank vorhanden<br />\n";
}
echo" </tr>";
echo"</table></form>";

mithrandir
2006-08-22, 10:21:56
Das geht ganz genau so, wie ich es oben beschrieben hatte. Warum gehst du in db_b.php nochmal SQL-Results durch? Willst du nicht eigentlich die ID auslesen und nur diesen einen Datensatz anzeigen?

Übrigens ist das hier nebenbei ziemlicher Mist:
if($ID == "$_POST[Bearbeiten]"){

Du willst ja eigentlich so etwas machen, dass du nur die Sätze mit angehakten CheckBoxen anzeigst (denk ich mal), oder? Sorry, ich versteh' dich noch immer nicht. Du weißt aber schon selber, was du machen möchtest, gell? ; - )

bye, Peter

ooAlbert
2006-08-22, 11:57:26
der ließt die db nochmal aus weil ich zur besseren ansicht nochmal gesondert diesen ausgewählten datensatz anzeigen wollte. alternative könnte der datensatz auch im POST mitgeschickt werden, weiß auch nicht was sinnvoller wäre.

wenn ichs so mache wird die if-anweisung nicht ausgeführt...(...if($ID == "$_POST[Bearbeiten]"){... ) weil ich glaube das der dann das value aus dem formular vergleicht nicht den index

firewars
2006-08-22, 22:52:54
Meinst du vielleicht $_POST['key']?

ravage
2006-08-23, 01:22:02
Vergiss was du vor hattest, starte für jeden durchgang deiner schleife ein neues formular und pack das da rein:

<input type="hidden" name="id" value="$ID">
Es werden nur die Daten des Formulars übergeben, in dem der Submit Button gedrückt wurde (berichtigt mich, wenn ich blödsinn laber)

Sollte eigentlich klappen. Auch wenn ich den ganzen ansatz etwas seltsam finde :)

ooAlbert
2006-08-23, 09:22:21
das wäre ne möglichkeit nur jetzt hab ich immer den aller letzen index im POST stehen und nicht den "gedrückten", warum das so ist weiß ich aber auch nicht...

MadMan2k
2006-08-23, 11:00:52
omg, mach doch einfach nen normalen link:
<a href="db_b.php?bearbeiten=$ID">Bearbeiten</a>

dann hast du die ID in $_GET['bearbeiten'] drin...