Extra info onder elk item laten verschijnen met een button.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jos Duis

Jos Duis

19/03/2017 11:07:56
Quote Anchor link
Ben bezig met een soort webshop.
Heb een scriptje gemaakt om alle aanbiedingen weer te geven.
Onder elk item wil ik extra informatie laten zien na het klikken van de meer info button.

Als ik bij product 1 op meer info klik komt eronder meer info.
Als ik bij product 2 op meer info klik komt onder product 1 meer info over product 1.
Dit is uiteraard niet de bedoeling, ik denk dat de oplossing ligt in het product id die als hidden veld in het formulier zit.
Kan iemand mij op weg helpen? Hieronder een deel van het scriptje die alle informatie uit een mysql database haalt.
Bij voorbaat dank voor uw hulp.

[script]
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$current_url
= urlencode($url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
$sql = ("SELECT * FROM producten WHERE aanbieding = 1");
if (!$result = $mysqli->query($sql))
{

trigger_error('Fout in query: '.$mysqli->error);
}

else
{
if ($mysqli->affected_rows > 0)
{

while ($row = $result->fetch_assoc())
{

echo '<div id="actionblok-item">';
echo '<form name="actionblok_form" method="POST" action="cart_update.php">';
echo '<table>';
echo '<input type="hidden" name="id" value="'.$row['id'].'" />';
echo '<input type="hidden" name="type" value="add"/>';
echo '<input type="hidden" name="return_url" value="{$current_url}"/>';
echo '<tr><td><img src="../'.$row['image'].'"/></td>';
echo '<td class="product-title">'.$row['name'].' </td>';
echo '<td class="new-img"><img src="../images/new.jpg"/></td></tr>';
echo '<tr><td class="product-price">'.$row['price'].'Euro</td>';
echo '<td class="product-aantal"><input type="text" size="2" maxlength="2" name="qty" value="1"/></td>';
echo '<td class="product-order"><button class="submit-order" name="submit"></button></td></tr>';
echo '<tr><td><input type="button" onclick="document.getElementById(\'productInfoPopup\').style.display=\'block\'" value="Meer info"></button></td></tr>';
echo '<tr><td><div id="productInfoPopup"><h4>Product Informatie</h4><p>'.$row['description'].'</p></div></td></tr>';
echo '</div></div></table></form></div>';
}

else
{
echo "Er zijn geen aanbiedingen vandaag.";
}
}

?>
 
PHP hulp

PHP hulp

24/04/2024 23:39:44
 
Dennis WhoCares

Dennis WhoCares

19/03/2017 13:20:33
Quote Anchor link
Hi Jos,

je zou zowiezo ipv ID productInfoPopup CLASS productIbfoPopup gebruiken aangezien je er meerdere hebt :)

bekijk eens hoe 'closest()' werkt :)
this.closest('.productInfoPopup').css.......

Hier kom je vast en zeker wel uit :)
 
Ozzie PHP

Ozzie PHP

19/03/2017 14:08:53
Quote Anchor link
>> je zou zowiezo ipv ID productInfoPopup CLASS productIbfoPopup gebruiken aangezien je er meerdere hebt :)

Nou nee, want hij heeft JUIST een unieke identifier nodig.

@Jos

Try this (niet getest):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$current_url
= urlencode($url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
$sql = ("SELECT * FROM producten WHERE aanbieding = 1");
if (!$result = $mysqli->query($sql))
{

trigger_error('Fout in query: '.$mysqli->error);
}

else
{
if ($mysqli->affected_rows > 0)
{

$i = 0;
while ($row = $result->fetch_assoc())
{

$i++;
echo '<div id="actionblok-item">';
echo '<form name="actionblok_form" method="POST" action="cart_update.php">';
echo '<table>';
echo '<input type="hidden" name="id" value="'.$row['id'].'" />';
echo '<input type="hidden" name="type" value="add"/>';
echo '<input type="hidden" name="return_url" value="{$current_url}"/>';
echo '<tr><td><img src="../'.$row['image'].'"/></td>';
echo '<td class="product-title">'.$row['name'].' </td>';
echo '<td class="new-img"><img src="../images/new.jpg"/></td></tr>';
echo '<tr><td class="product-price">'.$row['price'].'Euro</td>';
echo '<td class="product-aantal"><input type="text" size="2" maxlength="2" name="qty" value="1"/></td>';
echo '<td class="product-order"><button class="submit-order" name="submit"></button></td></tr>';
echo '<tr><td><input type="button" onclick="document.getElementById("productInfoPopup' . $i . '").style.display="block" value="Meer info"></button></td></tr>';
echo '<tr><td><div id="productInfoPopup' . $i . '"><h4>Product Informatie</h4><p>'.$row['description'].'</p></div></td></tr>';
echo '</div></div></table></form></div>';
}

else
{
echo "Er zijn geen aanbiedingen vandaag.";
}
}

?>
 
Dennis WhoCares

Dennis WhoCares

19/03/2017 14:19:48
Quote Anchor link
@ozzie, uit zn verhaal begrijp ik dat ie meerdere '#productInfoPopup' heeft, dus is het niet slim om het als ID te gebruiken
overigens zie je dat ook aan de code ;)
Oplossen met een counter kan idd, als je liever wegloopt voor t probleem
Dus nou ga je oneindig aantal css objects aanmaken om ze standaard te verbergen?

persoonlijk vind ik de .closest() een betere oplossing

Hij zal trouwens ook de andere popups willen sluiten neem ik aan, los je die ook gelijk op voor hem? :)
 
Ozzie PHP

Ozzie PHP

19/03/2017 14:23:34
Quote Anchor link
Waarom doe je zo negatief Dennis?

>> @ozzie, uit zn verhaal begrijp ik dat ie meerdere '#productInfoPopup' heeft, dus is het niet slim om het als ID te gebruiken

Jawel dus. Hij wil die popups PER PRODUCT kunnen openen, en dus heb je sowieso een unieke ID nodig en niet een class.

>> Oplossen met een counter kan idd, als je liever wegloopt voor t probleem

Je zou ook gewoon normaal kunnen communiceren in plaats van dat cynische toontje.

>> Hij zal trouwens ook de andere popups willen sluiten neem ik aan, los je die ook gelijk op voor hem? :)

Nogmaals ... je kunt ook gewoon normaal communiceren.
 
Dennis WhoCares

Dennis WhoCares

19/03/2017 14:38:59
Quote Anchor link
ik ga hier nieteens op in.
Ik wil niemand aanvallen en bedoel het ook niet zo

ben alsnog van mening dat class makkelijker is en t gebruik van closest vanuit de button
om hoofdzakelijk 'initieel' de popups te verbergen en minder code te gebruiken
 
Jos Duis

Jos Duis

19/03/2017 15:38:35
Quote Anchor link
Thanks voor de antwoorden, geen ruzie maken heren,
alle mogelijkheden en opties zijn welkom zo kan ik zelf zien wat er mogelijk is en daarvan leren en toepassen wat het handigste voor mij is.

Dennis, je bedoelt dat ik voor elk resultaat van die query hetzelfde id gebruik omdat die loop voor elk product word herhaald, dus daarom moet ik een class gebruiken? Daar heb ik nog niet aan gedacht maar het klinkt logisch bedankt.
Ik ga me verdiepen in closest() en een class gebruiken en ik ga ook de code van ozzie eens proberen.

bedankt, ik laat wel weten of het lukt!
 
Ozzie PHP

Ozzie PHP

19/03/2017 15:49:21
Quote Anchor link
Om de div te kunnen tonen (per product) heb je een unieke identifier nodig. Voor ieder product een verschillende.

Stel we hebben 10 producten en ik wil dat product 5 openklapt, dan heb je dus een unieke identifier voor product 5 nodig. Dan moet je dus een id gebruiken. Een id moet altijd uniek zijn (logisch, want het is een identifier). Die teller die ik heb ingebouwd zorgt ervoor dat je dus unieke id's hebt. Je moet dan nog wel zorgen dat standaard die div's dicht staan. Daarvoor kun je bijvoorbeeld nog een class toevoegen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$current_url
= urlencode($url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
$sql = ("SELECT * FROM producten WHERE aanbieding = 1");
if (!$result = $mysqli->query($sql))
{

trigger_error('Fout in query: '.$mysqli->error);
}

else
{
if ($mysqli->affected_rows > 0)
{

$i = 0;
while ($row = $result->fetch_assoc())
{

$i++;
echo '<div id="actionblok-item">';
echo '<form name="actionblok_form" method="POST" action="cart_update.php">';
echo '<table>';
echo '<input type="hidden" name="id" value="'.$row['id'].'" />';
echo '<input type="hidden" name="type" value="add"/>';
echo '<input type="hidden" name="return_url" value="{$current_url}"/>';
echo '<tr><td><img src="../'.$row['image'].'"/></td>';
echo '<td class="product-title">'.$row['name'].' </td>';
echo '<td class="new-img"><img src="../images/new.jpg"/></td></tr>';
echo '<tr><td class="product-price">'.$row['price'].'Euro</td>';
echo '<td class="product-aantal"><input type="text" size="2" maxlength="2" name="qty" value="1"/></td>';
echo '<td class="product-order"><button class="submit-order" name="submit"></button></td></tr>';
echo '<tr><td><input type="button" onclick="document.getElementById("productInfoPopup' . $i . '").style.display="block" value="Meer info"></button></td></tr>';
echo '<tr><td><div class="hideMe" id="productInfoPopup' . $i . '"><h4>Product Informatie</h4><p>'.$row['description'].'</p></div></td></tr>';
echo '</div></div></table></form></div>';
}

else
{
echo "Er zijn geen aanbiedingen vandaag.";
}
}

?>

Ik heb nu een class "hideMe" toegevoegd.

In je css doe je dan:

.hideMe { display: none; }
 
Jos Duis

Jos Duis

19/03/2017 23:28:59
Quote Anchor link
Ozzie, bedankt voor je uitleg, ga het gelijk proberen thnx.
 
Ozzie PHP

Ozzie PHP

20/03/2017 00:39:39
Quote Anchor link
Oké ... ik hoor graag of het gelukt is.
 
Jos Duis

Jos Duis

21/03/2017 06:18:32
Quote Anchor link
Goedemorgen Ozzie,

Het is nog niet helemaal gelukt hij gaf hier en daar wat syntax foutjes aan en verdwaalde divs.
Echter bij 1 regel blijf ik steken als ik op de button klik doet hij niks en bij de ontwikkelaars console staat er:

SyntaxError: expected expression, got end of script

Daarnaast staat een link naar de regel met de fout die in het rood staat beschreven hier maak ik ook uit op dat jou code werkt:) Hierboven bij jou antwoord is dat regel 28.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type = "button" onclick = "document.getElementById("productInfoPopup1").style.display = "block" value = "Meer info"></button>


De fout die er bij hoort zegt geen spatie tussen attributen.
Dit zegt hij ook als ik er een spatie inzet zoals net.

Uiteraard laat ik het weten als het gelukt is en hou ik mijn topic in de gaten.
Gewijzigd op 21/03/2017 06:20:49 door Jos Duis
 
Dennis WhoCares

Dennis WhoCares

21/03/2017 08:04:59
Quote Anchor link
Hi Jos,

je moet wel de 'quotes' in de gaten houden.

het script in de 'onClick' attribute staat binnen " "
zoals je hier ziet in je vorige stukje code, staat onclick="document.getElementById(" hier zie stopt de 'onclick'.
Daarom gebruiken we verschillende 'quotes' om dit te voorkomen, aangezien je met php echo'd kun je de enkele quote 'escapen' door \ ervoor te zetten.
Je eerste stukje code was beter, je hoeft alleen de $i toe te voegen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo '<tr><td><input type="button" onclick="document.getElementById(\'productInfoPopup' . $i . '\').style.display=\'block\'" value="Meer info"></button></td></tr>';

De output zal dan wezen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<tr><td><input type="button" onclick="document.getElementById('productInfoPopup1').style.display='block'" value="Meer info"></button></td></tr>

En daar zie je dan goed dat onclick binnen " " valt, en de overige quotes enkel ' ' zijn

p.s. ozzie heeft aangegeven dat hij het niet getest heeft, dus let altijd op de quotes
Gewijzigd op 21/03/2017 08:10:53 door Dennis WhoCares
 
Ozzie PHP

Ozzie PHP

21/03/2017 12:06:07
Quote Anchor link
>> p.s. ozzie heeft aangegeven dat hij het niet getest heeft, dus let altijd op de quotes

Ik had het inderdaad niet getest ... maar die quotes heb ik waarschijnlijk zelf kapotgemaakt (oeps). Ik dacht dat die verkeerd stonden en had ze gelijk maar even aangepast. Niet slim dus :-) Mijn excuses.

Hopelijk werkt het na de correctie van Dennis nu wel.
 
Jos Duis

Jos Duis

21/03/2017 12:12:16
Quote Anchor link
Dennis bedankt, ik ga het gelijk even proberen.
Ik had niet in de gaten dat dat overal telt wat betreft de quotes.
Is niet jou schuld Ozzie ik had het zoiezo verkeerd.

Laat zo weten of het is gelukt

Toevoeging op 21/03/2017 12:16:12:

Haha Heren super bedankt!!

Het werkt:D

Weer een hoop geleerd dank jullie wel!

Groeten Jos
 
Ozzie PHP

Ozzie PHP

21/03/2017 12:37:36
Quote Anchor link
Mooi zo :-)

Succes ermee!
 
Dennis WhoCares

Dennis WhoCares

21/03/2017 13:26:24
Quote Anchor link
Ozzie PHP op 21/03/2017 12:06:07:
>> p.s. ozzie heeft aangegeven dat hij het niet getest heeft, dus let altijd op de quotes

Ik had het inderdaad niet getest ... maar die quotes heb ik waarschijnlijk zelf kapotgemaakt (oeps). Ik dacht dat die verkeerd stonden en had ze gelijk maar even aangepast. Niet slim dus :-) Mijn excuses.

Hopelijk werkt het na de correctie van Dennis nu wel.


Hi Ozzie, ik hoop dat je dit ook niet verkeerd op pakte..
Ik probeer meer aan te geven dat je altijd zelf je quotes in de gaten moet houden, zelfs als je copy-paste van een ander :)
Niet iedereen heeft een kant en klare copy van iemand z'n project ;D
 
Ozzie PHP

Ozzie PHP

21/03/2017 16:10:57
Quote Anchor link
>> Hi Ozzie, ik hoop dat je dit ook niet verkeerd op pakte..

Nee hoor ;-)

Ik had zijn code in het antwoordveld geplakt en dan zie je geen kleurtjes meer. Ik dacht waarom gebruikt ie daar nu zomaar ineens ge-escapte single quotes ... gelijk maar even aanpassen naar dubbele quotes. Njah ... dat pakte dus niet goed uit :D Ik zag al aan zijn reactie wat er mis was, en jij had het gelukkig daarna goed hersteld. Dus het was een goed staaltje teamwork :)
 
Jos Duis

Jos Duis

21/03/2017 16:28:46
Quote Anchor link
Goed bezig
 
Jos Duis

Jos Duis

27/03/2017 16:58:32
Quote Anchor link
Goedemiddag,

Nou is het mooi gelukt maar ik wil dat bij het verschijnen van de extra info een X tevoorschijn komt waar je op kan drukken om het weer te laten verdwijnen.

Het is mij gelukt alleen wil ik niet dat de X er gelijk al staat maar pas verschijnt na het klikken op de meer info button hoe krijg ik dat voor elkaar ik heb het nou zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
echo '<tr><td><input type="button" onclick="document.getElementById(\'productInfoPopup' . $i . '\').style.display=\'block\'" value="Meer info"></button></td></tr>';
echo '<tr><td><div class="hideMe" id="productInfoPopup' . $i . '"><h4>Product Informatie</h4><p>'.$row['description'].'</p></div></td></tr>';
echo '<tr><td><div class="closeMe" id="closeMe' . $i . '"><a href="#" onclick="document.getElementById(\'productInfoPopup' . $i . '\').style.display=\'none\'">X</a></div></td></tr>';


En in mijn css:

.hideMe {
display:none;
}

.closeMe {
display:block;
}
Gewijzigd op 27/03/2017 16:59:02 door Jos Duis
 
- SanThe -

- SanThe -

27/03/2017 17:05:00
Quote Anchor link
Zet de closeMe-div in de hideMe-div.
 
Jos Duis

Jos Duis

27/03/2017 18:41:47
Quote Anchor link
Lukt niet ik heb het nou zo als je zegt volgens mij.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
echo '<tr><td><input type="button" onclick="document.getElementById(\'productInfoPopup' . $i . '\').style.display=\'block\'" value="Meer info"></button></td></tr>';
echo '<tr><td><div class="hideMe" id="productInfoPopup' . $i . '"><h4>Product Informatie</h4><p>'.$row['description'].'</p></td></tr>';
echo '<tr><td><div class="closeMe" id="closeMe' . $i . '"><a href="#" onclick="document.getElementById(\'productInfoPopup' . $i . '\').style.display=\'none\'">X</a></div></td></tr></div>';


X Blijft staan.

Toevoeging op 27/03/2017 18:45:29:

Kan ik geen 2e onclick event aan die button hangen zodat hij gelijk de x toont desnoods hidden via een hidden actie?
Gewijzigd op 27/03/2017 18:42:15 door Jos Duis
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.