Goedemorgen,

Ik heb een functie geschreven die het de op basis van de 'Field' de 'Value' gebruikt.
De Value heb ik nodig om de tabel te vullen.
Echter krijgt elke echo een nieuwe regel en 1 <td> verder

Naam --- Achternaam ---- leeftijd
---------------------------------
Naam
---------Achternaam
-------------------------leeftijd



Enig idee?

<table width="100%"  border="1">
<tr>
<td>id</td>
<td>Voornaam</td>
<td>Achternaam</td>
<td>E-mail</td>
<td>Straat + Huisnummer</td>
<td>Postcode</td>
<td>Telefoonnummer 1</td>
<td>Telefoonnummer 2</td>
<td>Geboortedatum</td>
<td>Geslacht</td>
<td>School</td>
<td>Groep</td>
<td>Huisarts</td>
<td>Bijzonderheden</td>
<td>Samen met 1</td>
<td>Samen met 2</td>
<td>Samen met 3</td>
<td>Niet samen met</td>
</tr>

<?php

$query_data	=	$conn->query("SELECT * FROM wp_mollie_forms_registration_fields ORDER BY registration_id")or die(mysql_error());

function getValueFromRowData($row_data, $field) {
    if (isset($row_data['field']) && $row_data['field'] == $field) {
        return $row_data['value'];
    }
 
    return null;
}

while ($row_data = $query_data->fetch()) {
//foreach($query_data as $row_data){
	
?>
<tr>
<td><?php echo $row_data['registration_id'];?></td>
<td><?php $field = 'Voornaam'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Achternaam'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'E-mail'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Straat+huisnummer'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Postcode'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Telefoonnummer nood1'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Telefoonnummer nood2'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Geboortedatum'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Geslacht'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'School'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Groep'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Huisarts'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Bijzonderheden'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Samen met 1'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Samen met 2'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Samen met 3'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
<td><?php $field = 'Niet samen met'; $value = getValueFromRowData($row_data, $field); echo "{$value}";?></td>
</tr>

<?php

}

?>
	
	</table>
Kijk eens hoe je HTML-source eruit ziet volgens je browser.

<tr>
<td>id</td>
<td>Voornaam</td>
<td>Achternaam</td>
<td>E-mail</td>
<td>Straat + Huisnummer</td>
<td>Postcode</td>
<td>Telefoonnummer 1</td>
<td>Telefoonnummer 2</td>
<td>Geboortedatum</td>
<td>Geslacht</td>
<td>School</td>
<td>Groep</td>
<td>Huisarts</td>
<td>Bijzonderheden</td>
<td>Samen met 1</td>
<td>Samen met 2</td>
<td>Samen met 3</td>
<td>Niet samen met</td>
</tr>
<tr>
<td>12</td>
<td>Piet</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>12</td>
<td></td>
<td>Hein</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>


Volgens mij ziet de basis er goed uit, er zit alleen iets in die lus of functie verwacht ik
- Ariën - op 14/11/2023 14:03:55

Ik zie dan dit:
[img]https://i.ibb.co/ZK3cYBP/afbeelding.png[/img]

Wat verwacht jij dan precies? Want ik zie geen hinderlijke regels



Alles zou op dezelfde regel moeten komen. Nu springt hij naar de volgende regel en dan elke keer 1 <td> verder.

- Ariën - op 14/11/2023 14:03:55

Waarom gebruik je geen
<?php
echo $value; // <-- deze regel!
?>


Ja, ik zou gewoon dit kunnen doen:
<?php $field = 'Voornaam'; $value = getValueFromRowData($row_data, $field); echo $value;?>


Mollieform zet helaas niet alles in 1 rij.
Ik moet dus de data halen uit verschillende rijen. Opzich kan ik dat mooi opvangen met deze functie die ik gemaakt heb. Ik haal dus 'field' en koppel daar de 'Value' aan. Als je een ander idee hebt, dan hoor ik het graag.

De databasetabel is als volgt:

CREATE TABLE `wp_mollie_forms_registration_fields` (
  `registration_id` mediumint(9) NOT NULL,
  `type` varchar(255) DEFAULT NULL,
  `field` varchar(255) DEFAULT NULL,
  `value` longtext DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

Geeft die query de resultaten in 1 record per transactie terug?


of zijn het steeds key-value paren? In dat laatste geval zou ik er er eerst een array van bouwen en dan pas naar het weergeven kijken.

Maar je moet dan wel je registration_id erbij betrekken

[size=xsmall]Toevoeging op 14/11/2023 16:29:34:[/size]

Je zou iets kunnen doen als


SELECT 
    registration_id,
    GROUP_CONCAT(CONCAT(field, '=', value) SEPARATOR ', ') AS combined_key_values
FROM 
    wp_mollie_forms_registration_fields
GROUP BY 
    registration_id;


Maar dan moet je alsnog aan de gang om dit uit elkaar te peuteren

<?php
$allRows = [];
while ($row_data = $query_data->fetch()) {

$reg_id = $row_data['registration_id'];
$values = explode(', ', $row_data['combined_key_values'];
foreach($values as $keyvaluepair) {
list($key, $value) = explode('=', $keyvaluepair);

$allRows[$reg_id][$key] = $value;
}

}
?>

En daarna kun je met een foreach elke inhoud van $allRows weergeven.

edit: een } verplaatst
He Ivo,

Thanks!
Ik snap niet zo goed wat je zegt. Volgens mij kan ik het er zo uit laten komen als ik zou willen toch? De registration ID wil ik in ieder geval bundelen en uiteindelijk wil ik die met een druk op de knop netjes gaan wegzetten in een nieuwe tabel zodat straks de vrijwilligers de deelnemers kunnen aanpassen ed. Daarom dat ik er al een variable aan wilde hangen zodat ik het straks mooi weg kan zetten.
Volgens mij is het een mooi stukje code wat je hebt gemaakt, maar ik krijg nog niet het resultaat en kan ik het dan straks mooi wegzetten?


<?php
$query_data	=	$conn->query("SELECT registration_id, GROUP_CONCAT(CONCAT(field, '=', value) SEPARATOR ', ') AS combined_key_values
FROM wp_mollie_forms_registration_fields GROUP BY registration_id")or die(mysql_error());

$allRows = [];
while ($row_data = $query_data->fetch()) {
    
    $reg_id = $row_data['registration_id'];
    $values = explode(', ', $row_data['combined_key_values']);
    foreach($values as $keyvaluepair) {
       list($key, $value) = explode('=', $keyvaluepair);

       $allRows[$reg_id][$key] = $value;
    }

}
?>


Ik krijg de volgende foutmelding:
Notice: Undefined offset: 1


op lijn? Ik vermoed dat het hier lijn 13 is?

       $allRows[$reg_id][$key] = $value;
Zo te zien roep je een key aan met een nummer die niet bestaat in de array.

https://www.stechies.com/notice-undefined-offset-error-php/

Mogelijke oplossing:


<?php
/* Hier de rest van je code */

foreach ($values as $keyvaluepair) {
        // Controleer hier of $keyvaluepair het '='-teken bevat voordat het wordt gesplitst
        if (strpos($keyvaluepair, '=') !== false) {
            list($key, $value) = explode('=', $keyvaluepair, 2);
            $allRows[$reg_id][$key] = $value;
        } else {
            // Doe hier iets als de string geen '='-teken bevat
            // bijvoorbeeld: een waarschuwing weergeven of loggen
            // echo "Ongeldige keyvaluepair: $keyvaluepair <br>";
            // of haal deze else statement weg.
        }
    }
?>


PS: or die(mysql_error()); is niet netjes, en de functie is ook verouderd.
Als je niet elke <td> -tag op een nieuwe regel wilt, dan heb je een aantal opties:
1. verander je PHP bestand zodat alle <td>'s achter elkaar staan
2. neem ook alle <td> -tags mee in je echo statement:
echo "<td>" . $row->(etc) . "</td>"; // geen enter of PHP_EOL
3. gebruik een class om HTML te bouwen zonder enters:
https://www.phphulp.nl/php/script/classes/dom-bouwen/2042/
4. gebruik een PHP-extentie om HTML te bouwen zonder enters:
https://www.php.net/manual/en/class.domdocument.php

Reageren