id's halen uit input name attribuut met str_split

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ruben

ruben

02/10/2009 09:36:00
Quote Anchor link
Hallo,

Met behulp van een switch statement genereer ik input velden binnen een formulier "productForm".

switch ($row['Par_Type']){
case text:

while ( $opt = mysql_fetch_array($resultHaalOptions, MYSQL_BOTH)){
print "<input type=\"".$row['Par_Type']."\" name=\"".$row['Par_Name'].":".$row['Par_ID'].":".$opt['Opt_ID']."\" value=\"" .$row['Opt_Value']. "\" onChange='document.getElementById(\"productForm\").submit();'>";
}
break;


Dit komt er dan bijvoorbeeld uit:


<input type="text" name="OnvKosten:10:32" value="" onChange='document.getElementById("productForm").submit();'>


De volgende stap is het opslaan van de gegevens. Deze gegevens bestaan uit een aantal onderdelen.
1. de value (geen probleem).
2. een parent en een option ID (wel een probleem).

Deze Par_ID en Opt_ID stuur ik nl mee met het name attribuut van het input veld.

Als ik op de normale (bij mij bekende manier) een formulier verwerk, kom ik er niet uit.

Voorbeeld:

if($_SERVER['REQUEST_METHOD'] == 'POST' &&isset($_POST['Product:1:1']))
{
$OnvKosten = $_POST['OnvKosten:10:32'];

}


Nu wil ik graag het stukje 'OnvKosten:10:32' splitten en de onderdelen in afzonderlijke variabelen kuinnen stoppen.

Iemand een idee?
 
PHP hulp

PHP hulp

22/11/2024 18:55:49
 
Jan Willem van der Veer

Jan Willem van der Veer

02/10/2009 09:56:00
Quote Anchor link
Ik zou er dit van maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
switch ($row['Par_Type']){
  case
text:

    while ( $opt = mysql_fetch_array($resultHaalOptions, MYSQL_ASSOC)){
      print "<input type=\"".$row['Par_Type']."\" name=\"".$opt['id']."\" value=\"" .$row['Opt_Value']. "\" onChange='document.getElementById(\"productForm\").submit();'>";
    }

  break;
?>


Ik neem gewoon aan dat je in die tabel met opties toch ook wel minimaal één kolom met de id hebt? In dat geval hoef je alleen de ID door te geven. Aan de hand daarvan kun je gewoon de rest van de info ophalen (indien nodig).
Gewijzigd op 01/01/1970 01:00:00 door Jan Willem van der Veer
 
Ruben

ruben

02/10/2009 10:30:00
Quote Anchor link
Uhm,

Nou, ik heb niet het hele verhaal verteld.
Ik schrijf de informatie weg in verschillende tabellen die later als filter voor het tonen van opties gaan werken.

Ik moet i.i.g. uit een input veld naast de value (en dat kan een reeds gedefinieerde waarde zijn, maar ook iets wat je invult) ook de Par_ID en de Opt_ID wegschrijven samen met een Product_ID (ik ben namenlijk aan een Product opties aan het toevoegen).
Het wegschrijven gebeurd in een drietal tabellen te weten:
- Product
- HuidigeOpties
- HuidigeAttributen

In elke tabel schrijf het Product_ID en vervolgens de optie-parent, de optie, het optie-attribuut en de meegegeven optiewaarde.

bijv:

tbl_HuidigeAttributen

HuidAtt_ID | Prod_ID | Opt_Par_ID | Att_ID | Att_Value

hierin schrijf ik dan b.v. weg:

(autonr) | 53 | 3 | 7 | achterdeur


Ik heb dus meerdere id's nodig om weg te kunnen schrijven. Die geef ik met het name attribuut mee, maar hoe krijg ik ze er weer uit?
 
Jan Koehoorn

Jan Koehoorn

02/10/2009 10:35:00
Quote Anchor link
Je kunt ze beter in een hidden field stoppen als value. Dan weet je tenminste van tevoren de name. Na verzenden kun je dan met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $ids
= explode (':', $_POST['name_van_het_hidden_field']);
?>

De waarden ophalen.
 
Ruben

ruben

02/10/2009 10:43:00
Quote Anchor link
Ja, dat is een idee.
Dat ga ik even proberen.

Er is geen directe manier om het name attribuut als waarde uit te lezen

dus het stukje ['name_van_het_hidden_field'] tussen de rechte haken?

het punt is n.l. ook dat de input velden en hun namen dynamisch worden opgebouwd en er nogal wat variaties zijn. Per product is de inhoud van het formulier voor een groot deel totaal verschillend.
Maar dat is weer een ander probleem :-)
 
Ruben

ruben

02/10/2009 11:42:00
Quote Anchor link
de hiddenfield truc lijkt de beste oplossing.

Enorm bedankt voor de snelle reacties!
 
Ruben

ruben

06/10/2009 11:25:00
Quote Anchor link
Op php.net vond ik het volgende voorbeeld:

$query_string = "";
if ($_POST) {
$kv = array();
foreach ($_POST as $key => $value) {
$kv[] = "$key=$value";
}
$query_string = join("&", $kv);
}
else {
$query_string = $_SERVER['QUERY_STRING'];
}
echo $query_string;


Deze methode geeft mij de mogelijkheid elk key/value paar afzonderlijk als record weg te schrijven in een tabel als HuidigeAttributen.
Dat geeft allerlei voordelen.
De opties die ik aan een product hang zijn daarmee volledig variabelbaar zonder dat ik ze van te voren vast hoef te leggen in de wegschrijftabel.

Daarom is voor mij wel van belang dat ik de optie_id's en optie_values stop in het name/value pair van het input field.

Miscchien is mijn vraag nu iets heldeder.
Gewijzigd op 01/01/1970 01:00:00 door ruben
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.