De database bevat produkten zonder veldwaarde en word opgehaald met :
<?php
$products_extra_fields_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " WHERE products_id=" . (int)$products['products_id']);
while ($products_extra_fields = tep_db_fetch_array($products_extra_fields_query)) {
$extra_fields_array[$products_extra_fields['products_extra_fields_id']] = $products_extra_fields['products_extra_fields_value']; // VALUE
}

// $extra_fields_names_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_EXTRA_FIELDS. " WHERE (languages_id='0' or languages_id='".(int)$languages[$i]['id']."') and products_extra_fields_id in (120,156) ORDER BY products_extra_fields_order");
$extra_fields_names_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_EXTRA_FIELDS. " WHERE (languages_id='0' or languages_id='".(int)$languages[$i]['id']."') ORDER BY products_extra_fields_order");
while ($extra_fields_names = tep_db_fetch_array($extra_fields_names_query)) {
$extra_field_name[$extra_fields_names['products_extra_fields_id']] = $extra_fields_names['products_extra_fields_name'];
if ($extra_fields_array[$extra_fields_names['products_extra_fields_id']] != '')
echo '<B>'.$extra_fields_names['products_extra_fields_name'].':
</B>&nbsp;'.stripslashes($extra_fields_array[$extra_fields_names['products_extra_fields_id']]).'<BR>'."\n"

}
echo '&nbsp;';
?>
Moet er in het SELECT statement een optie komen om de lege veldwaarden voor bepaalde produkten in de resultaatlijst(resultset) t ekrijgen?
die komen er standaard in. mysql haalt gewoon de hele set resultaten terug, ongeacht of daar iets in zit of niet.
Bedankt
Probleem dat is dat produkten met een leeg veld(waarde) niet getoond worden.
Welk datatype moet je dan hier voor opgeven ? ( bij kijken op de database zag schuin staan NULL in velden van een kolom )
je wilt van een veld waar niets instaat toch iets weergeven? apart, aangezien er niets in staat! zet er of iets in, of bij die velden de standaardwaarde instellen op wat jij wilt hebben
Misschien is het een idee om dit met een (nested) left join op te lossen.
Jeroen vd op 04/05/2012 18:31:23

je wilt van een veld waar niets instaat toch iets weergeven? apart, aangezien er niets in staat! zet er of iets in, of bij die velden de standaardwaarde instellen op wat jij wilt hebben

Ja dat lijkt apart..wat moet je ermee met iets leegs ?, dat heeft te maken met door mij toegevoegde informatie aan een produkt ( heb ik het wel of niet gedaan )
Die informatie wordt in een kolom gepresenteerd.

De code die verantwoordelijk is om dit in een kolom te zetten in de vorm van een produktlijst is deze
<?php
}
echo '&nbsp;';
// END: Extra Fields Contribution
// begin Extra Product Fields
foreach ($epf as $e) { // FUNCTIE ( arrayname as $index ) JD
if ($e['language'] == $languages[$i]['id']) {
if ($e['language_active']) {
if (isset($HTTP_GET_VARS['read']) && ($HTTP_GET_VARS['read'] == 'only')) {
$value = tep_get_product_extra_value($e['id'], $pInfo->products_id, $languages[$i]['id']);
} else {
$value = tep_db_prepare_input($extra[$e['field']][$languages[$i]['id']]);
}
if (tep_not_null($value)) {
// if (tep_not_null($value)||($value == null)) { jd
echo '<b>' . $e['label'] . ': </b>';
if ($e['uses_list']) {
echo tep_get_extra_field_list_value($value, $e['show_chain']);
} else {
echo $value;
}
echo '<br>';
}
}
}
}
?>
Deze code + de databasequery hierboven laat nu juist wel de waarde van 2 velden uit de database altijd ( wat niet altijd kan, vandaar)zien van produkten, terwijl ik juist ook de produkten wil zien waar geen waarde door mij aan is toegekend
Deze code laat altijd waarden zien aan een produkt toegekend, maar dat kan in werkelijkheid niet altijd waar zijn omdat ik dat weet van bepaalde produkten uit een verzameling produkten

[size=xsmall]Toevoeging op 04/05/2012 19:26:23:[/size]

Ger van Steenderen op 04/05/2012 18:42:11

Misschien is het een idee om dit met een (nested) left join op te lossen.

Als je hiermee de lege veldwaarde boven water mee krijgt?.. het zijn twee tabellen
en die join is dan om de tabellen te koppelen?
Wacht.. ik heb ook nog een andere database code die hetzelfde doet , maar alleen voor 1 produkt en daar zit die join(niet genest ws want er zit geen join in de join) ook in in
<?php
$products_id = (int)$HTTP_GET_VARS['products_id'];

$extra_fields_query = tep_db_query("
SELECT pef.products_extra_fields_status as status, pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
LEFT JOIN ". TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS ." ptf
ON ptf.products_extra_fields_id=pef.products_extra_fields_id
WHERE ptf.products_id=". (int) $products_id ." and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='".$languages_id."')
ORDER BY products_extra_fields_order");

while ($extra_fields = tep_db_fetch_array($extra_fields_query)) {
if (! $extra_fields['status']) // show only enabled extra field
continue;
echo /* Advance software search bof */ '<tr>==> uitvoer..hier weggelaten

?>

[size=xsmall]Toevoeging op 04/05/2012 19:39:08:[/size]

Waarin verschillen de twee database queries..beide halen dezelfde waarden op?
- 2 losse tabellen --> voor meer dan één produkt ..uitvoer met <?phpforeach ($epf as $e) ?> in produktlijst
- 2 gekoppelde tabellen(met join) --> 1 produkt .. op de produktinvoerbladzijde kan de veldwaarden van de database ingevoerd worden, dus invoer met uitvoer (tekst ) op produktbladzijde

Zit de fout toch in <?phpforeach ($epf as $e) ?> functie?

[size=xsmall]Toevoeging op 04/05/2012 20:32:48:[/size]

Het moet wel dat de foreach () functie niet goed werkt
- Als het 1e produkt veldwaarden heeft word deze door foreach()goed in de produktlijst gezet in de kolom ( dit geld voor alle produkten die een veldwaarde hebben )
- Zou het 2e produkt geen veldwaarde hebben toegewezen door mij, dan geeft de foreeach() functie de veldwaarde van het 1e produkt voor het 2e produkt in de produktlijst in een kolom

Wat kan je hieruit concluderen?




Hoe heet het veld wat gecontroleerd moet worden?

De denkwijze is namelijke verkeerd, je moet eerst alle producten nagaan of de id terug te vinden is in TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS met het id van het juiste veld.

Resultaat is wel of niet ingevuld.
Bedankt!
Ja,de goede denkwijze betekent dat je ermee werkt( ik niet dus in de dagelijkse praktijk,maar alles valt te leren)
Het zijn 2 velden in 2 tabellen
Die waardes worden door mij ingevoerd per produkt
- TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS --> products_extra_fields_value
heeft een products_id en products_extra_fields_id
- TABLE_PRODUCTS_EXTRA_FIELDS--> products_extra_fields_name en heeft een products_extra_fields_id een language_id

Zou het kunnen dat er pas een product_id word ingevoerd in de tabel TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS als er een veldwaarde wordt ingevoerd voor een produkt.?
Dit zou betekenen dat produkten waarvan de product_id niet in de tabel TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS staat deze geen veldwaarde heeft
Oke nu zit je denkwijze goed, alleen het volgende: Wil je van alle extra fields velden controleren of deze ingevuld zijn ?

Je laatste edit klopt precies!, ik ben bezig met een stukje code voor je ;)

Voor niet alle produkten heb ik een products_extra_fields_value ingevoerd,dus er zijn volgens mij nog veel produkten die niet in de tabel products_to_products_extra fields staan..als je dat bedoeld
voor elke products_id is er een products_extra_fields_id te vinden zo te zien..er is niets leeg
Het zijn dus nog niet alle produkten
Wanneer er een waarde wordt ingevoerd, komt deze in de tabel te staan.
Dus als er géén waarde is voor een `Extra Field` komt deze niet voor in extra_fields_to_products!

Je begon goed, zet alle waardes in een array.
Loop daarna alle beschikbare Extra Fields langs en kijk of deze een waarde heeft uit de array.
Als dit zo is laat hij dit zien, anders zet hij `Extra Veld: Leeg!` neer!

Ik heb hem niet getest maar:

<?php
$products_extra_fields_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " WHERE products_id=" . (int)$products['products_id']);
while ($products_extra_fields = tep_db_fetch_array($products_extra_fields_query)) {
$extra_fields_array[$products_extra_fields['products_extra_fields_id']] = $products_extra_fields['products_extra_fields_value']; // VALUE
}
$extra_fields_names_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_EXTRA_FIELDS. " WHERE (languages_id='0' or languages_id='".(int)$languages[$i]['id']."') ORDER BY products_extra_fields_order");
while ($extra_fields_names = tep_db_fetch_array($extra_fields_names_query)) {
$extra_field_name[$extra_fields_names['products_extra_fields_id']] = $extra_fields_names['products_extra_fields_name'];

if(in_array($extra_fields_names['products_extra_fields_id'], $extra_fields_array)){
echo '<B>'.$extra_fields_names['products_extra_fields_name'].': </B>&nbsp;'.stripslashes($extra_fields_array[$extra_fields_names['products_extra_fields_id']]).'<BR>'."\n"
}else{
echo '<B>'.$extra_fields_names['products_extra_fields_name'].': </B>&nbsp;Leeg!<BR>'."\n"
}

}
echo '&nbsp;'; ?>

Reageren