While loop

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Hallo allemaal,

      Ik ben op zoek naar een manier om in mijn while loop een string met een nummer te kunnen maken.
      Zodat ik meerdere string items kan maken.
      $string1
      $string2
      ...

      Waarna ik later de data kan toevoegen. Wie kan mij opweg helpen om met een while loop dit te kunnen maken?
    • Dit zou je kunnen doen met een variabele naam met behulp van een dubbele string ($$):

      PHP Source Code

      1. $i = 1;
      2. while (whatever) {
      3. $varName = 'string'.$i++; // post increment
      4. $$varName = 'something'; // let op de dubbele $
      5. }
      Maar hier kleven wel wat een aantal nadelen aan, zo "vervuil" je de huidige scope met een heleboel (soortgelijke) variabele( name)n. Daarbij programmeer je mogelijk informatie in de naam van de variabele (hard coding). Wat voor betekenis hebben deze 1, 2 et cetera?

      Zou het niet gewoon veel beter zijn om bijvoorbeeld één array te maken? Met dit volgnummer in de index ofzo? Wat voor bestaansrecht hebben al deze losse variabelen?

      Het kan dus wel, alleen zou ik deze aanpak niet aanraden. Je kunt beter investeren in een wat elegantere datastructuur. Hier zijn arrays bij uitstek voor geschikt.

      The post was edited 2 times, last by FangorN ().

    • FangorN wrote:

      Dit zou je kunnen doen met een variabele naam met behulp van een dubbele string ($$):

      PHP Source Code

      1. $i = 1;
      2. while (whatever) {
      3. $varName = 'string'.$i++; // post increment
      4. $$varName = 'something'; // let op de dubbele $
      5. }
      Maar hier kleven wel wat een aantal nadelen aan, zo "vervuil" je de huidige scope met een heleboel (soortgelijke) variabele( name)n. Daarbij programmeer je mogelijk informatie in de naam van de variabele (hard coding). Wat voor betekenis hebben deze 1, 2 et cetera?

      Zou het niet gewoon veel beter zijn om bijvoorbeeld één array te maken? Met dit volgnummer in de index ofzo? Wat voor bestaansrecht hebben al deze losse variabelen?

      Het kan dus wel, alleen zou ik deze aanpak niet aanraden. Je kunt beter investeren in een wat elegantere datastructuur. Hier zijn arrays bij uitstek voor geschikt.
      Fangorn,

      In heb een post formulier waar de volgende waardes in staan:
      item1 qty1 price1

      Dit kan vermeerderd worden door een javascript. Onbeperkt aantal lijnen.
      Er is een counter bij de javascript die de aantal lijnen telt en via het post form meegaat.

      Zo kan ik via de while loop alles lezen en beveiligen.

      Of is er hiervoor een betere oplossing?
    • Zoals @D.Oomens al min of meer aangeeft: formulierelementen in HTML kennen ook array-structuren. Dit bereik je door een paar rechte haken achter de naam toe te voegen.

      Als elk item een id, hoeveelheid, prijs et cetera kent dan maak je voor elk van deze elementen een apart array:

      HTML Source Code

      1. <input type="text" name="item[]" value="<id hier>">
      2. <input type="text" name="quantity[]" value="">

      Prijs is afleidbaar, en weet je zelf al, die hoef je dus niet eerst in een formulier te stoppen, en er vervolgens weer uit te halen. Je zou wel een readonly prijs(tekst) op kunnen nemen in het formulier, zodat de invuller kan zien wat alles (totaal) kost.

      Bij de verwerking van het formulier (nadat je deze hebt gevalideerd uiteraard) itereer je over het item (sub)array, en gebruik je hierbij de index om de andere bijbehorende data te verzamelen, bijvoorbeeld zoiets:

      PHP Source Code

      1. // aanname: data is gevalideerd en is niet leeg
      2. foreach ($_POST['item'] as $index => $id) {
      3. $quantity = $_POST['quantity'][$index];
      4. // etc.
      5. }

      EDIT: je zou zelfs kunnen volstaan met het enkel doorgeven van een quantity, waarbij de key het item id is:

      HTML Source Code

      1. <input type="text" name="quantity[<item id hier>]" value="...">

      En dan wordt de loop:

      PHP Source Code

      1. // aanname: data is gevalideerd en is niet leeg
      2. foreach ($_POST['quantity'] as $productId => $quantity) {
      3. // etc.
      4. }

      The post was edited 6 times, last by FangorN ().

    • FangorN wrote:

      Dit zou je kunnen doen met een variabele naam met behulp van een dubbele string ($$):

      PHP Source Code

      1. $i = 1;
      2. while (whatever) {
      3. $varName = 'string'.$i++; // post increment
      4. $$varName = 'something'; // let op de dubbele $
      5. }
      Maar hier kleven wel wat een aantal nadelen aan, zo "vervuil" je de huidige scope met een heleboel (soortgelijke) variabele( name)n. Daarbij programmeer je mogelijk informatie in de naam van de variabele (hard coding). Wat voor betekenis hebben deze 1, 2 et cetera?

      Zou het niet gewoon veel beter zijn om bijvoorbeeld één array te maken? Met dit volgnummer in de index ofzo? Wat voor bestaansrecht hebben al deze losse variabelen?

      Het kan dus wel, alleen zou ik deze aanpak niet aanraden. Je kunt beter investeren in een wat elegantere datastructuur. Hier zijn arrays bij uitstek voor geschikt.
      Dit heeft me uitendelijk kunnen helpen!
      Waarvoor dank.

      Mijn oplossing (deel van het script):

      Source Code

      1. $counter = mysql_real_escape_string(strip_tags($_POST['counter']));
      2. $x = 1;
      3. while($x <= $counter) {
      4. $price = 'item'.$x.'_price';
      5. $$price = convertToValidPrice($_POST['item'.$x.'_price']);
      6. $qty = 'item'.$x.'_qty';
      7. $$qty = mysql_real_escape_string($_POST['item'.$x.'_qty']);
      8. $name = 'item'.$x.'_name';
      9. $$name = mysql_real_escape_string($_POST['item'.$x.'_name']);
      10. $x++;
      11. }
      Display All
      Ik ga dit nu verwerken in mijn formulier & uiteraard de nodige veiligheid bijbouwen.