Door
Tim Groot
op 14-11-2023 11:29
gewijzigd op 14-11-2023 11:29
4.735 views
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
@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.
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.
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.
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.
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.
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('#@#', .... )