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>
@Ad
Ik denk dat de layout van de html minder van belang is, dan het feit dat voornaam, achternaam, emailadres, telefoonnummer etc elk op een volgende regel terecht komen in de browser.


Probleem is hier, dat de tabel key-value paren bevat in plaats van complete records, waar TS met de opbouw van query en loop vanuit gaat.


@Tim
Mijn code gaat mogelijk de mist in als er een lege waarde voor een veld is.

Gaat
<?php
$keyvaluepair = 'veldje=';
list($key, $value) = explode('=', $keyvaluepair);
?>

eigenlijk goed?

Ik kan me niet voorstellen waarom het = teken zou onbreken.

Maar een var_dump($keyvaluepair); op de regel voor "list" brengt misschien duidelijkheid
@Ariën en Ivo,

Ik krijg geen data terug...maar geen foutmelding meer in ieder geval :-):

<?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) {
		$keyvaluepair = 'veldje=';
       list($key, $value) = explode('=', $keyvaluepair);

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

}
?>


ook dit nog even getest om het eea uit te sluiten.

<?php

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

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

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

function getValueFromRowDataEmail($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){

$field = 'Voornaam'; $valuename = getValueFromRowDataName($row_data, $field);
$field = 'Achternaam'; $valuefamname = getValueFromRowDataFamName($row_data, $field);
$field = 'E-mail'; $valueemail = getValueFromRowDataEmail($row_data, $field); 


echo"<td>".$row_data['registration_id']."</td>"; 
echo"<td>".$valuename."</td>";
echo"<td>".$valuefamname."</td>";
echo"<td>".$valueemail."</td>";

}

?>


Wat je ziet bij de laatste code is dat hij ook Td's gaat overslaan. Dus het zit in de Query of het zit in de functie.

@Ad, dank voor je reactie. Maar idd wat Ivo aangeeft zit het niet in de html, maar heb je advies wel gebruikt om de td mee te nemen in de echo ipv er buiten.
Tim Groot op 15/11/2023 10:23:11

@Ariën en Ivo,

Ik krijg geen data terug...maar geen foutmelding meer in ieder geval :-):


Gebruik dan ook geen oude mysql_error(). En or die() is niet echt netjes. Want als en apparaat iets fout doet, dan gooi je die niet meteen op de schroothoop.

En heb je al mijn mogelijke oplossing gezien?
**quoteknip**

Moet er weer een beetje inkomen. Ik ga kijken naar de foutafhandeling. Thanks!
Ja, jou code gaf geen resultaat en geen fout. Hij kwam in het else stukje terecht.

$keyvaluepair = 'veldje=';

dat moet er weer uit.

Wat zie je als je op regel 8 toevoegt:

var_dump($row_data);
@Ivo, het gaat de goede kant op lijkt het:

Op regel:

<?php
list($key, $value) = explode('=', $keyvaluepair);
?>

Geeft hij nog een Notice: Undefined offset: 1

Maar hij geeft wel de data in een bulk terug:
array(4) { ["registration_id"]=> string(2) "12" [0]=> string(2) "12" ["combined_key_values"]=> string(808) "Voornaam=Piet, Achternaam=Snot, E-mail=**@hotmail.com, Straat+huisnummer=**, Postcode=**,etc etc


Totaalcode op dit moment
<?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()) {
    var_dump($row_data);
    $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;
    }

}
?>
ok.

Maar er is dus minstens 1 combinatie als Voornaam=Piet die geen = teken lijkt te hebben.

Ik denk dat je dus even zelf dat stuk "etc, etc" moet lezen om te zien welke dat is.

of je voegt tussen regel 11 en 12 toe:

echo 'splitting '. $keyvaluepair . '<br>';



Ik denk dat ie flipt op de komma in de zin:

splitting Wanneer je dit formulier gebruikt

Notice: Undefined offset: 1 

splitting ga je akkoord met de opslag en verwerking van jouw gegevens door de organisatie.=1

Oftewel deze zin: Wanneer je dit formulier gebruikt, ga je akkoord m...

Die akkoord dingen had ik in mijn code al niet meer zitten. Deze zijn onbelangrijk. Ze kunnen zich niet inschrijven als ze niet akkoord gaan.
ah

Ik ging ervanuit dat je "field" iets zou bevatten als "voornaam" "accoord" of "emailadres".

Niet dat daar een heel verhaal in zou staan. Zeker niet dat daar dan nog komma's of is-tekens in zouden staan.

Anders moet het splitten met een regex gaan gebeuren.

De scheidingskomma (separator) zou je in de query kunnen vervangen door '#@#', zodat dat niet een simpele komma is en er kleine kans is dat je tekst die combinatie ook bevat.

de explode(', ' .... ) vervang je dan overeenkomstig met explode('#@#', .... )

de list() regel

zou dan kunnen worden:

<?php
$aM = [];
$b = preg_match('#(.*)=([^=]*)#', $keyvaluepair, $aM);
$key = $aM[1];
$value = $aM[2];
?>
Geen foutmelding meer.

De code ziet er nu zo uit:
<?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()) {
    var_dump($row_data);
    $reg_id = $row_data['registration_id'];
    $values = explode('#@#', $row_data['combined_key_values']);
    foreach($values as $keyvaluepair) {
		echo 'splitting '. $keyvaluepair . '<br>';
       $aM = [];
$b = preg_match('#(.*)=([^=]*)#', $keyvaluepair, $aM);
$key = $aM[1];
$value = $aM[2];

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

}
?>


Met het volgende resultaat:

array(4) { ["registration_id"]=> string(2) "12" [0]=> string(2) "12" ["combined_key_values"]=> string(850) "Voornaam=Voornaam#@# Achternaam=Achternaam#@# E-mail=E-mail#@# Straat+huisnummer=Adres#@# Postcode=postcode#@# etc etc


splitting Voornaam=voornaam
splitting Achternaam=voornaam
splitting E-mail=E-mail
splitting Straat+huisnummer=Adres
splitting Postcode=postcode

etc etc

Reageren