popup oproepen via een andere popup.

  • Onderwerp starter Onderwerp starter JC79
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

JC79

Gebruiker
Lid geworden
1 jun 2014
Berichten
10
Ik wil via het volgende script, dat opent in een popup, een popup oproepen met daarin een lijst van producten.

De producten in die lijst moeten dan te selecteren zijn en op in een overzicht weer te geven.


Nu kom ik er met de popup's niet uit, er zijn heel veel scripts op internet, maar de meeste zijn niet zelf aan te passen, andere die ik tegenkwam werkte als demo al niet (meer).

Ik wil niets fancy's, het is alleen voor voor intern gebruik.


Form
Code:
<form action='search.php' id='new_message' method='post'>
		<span class='formInput'>zoek:</span>
		<input type='text' name='zoekproduct' />
		<input type='submit' name='searchBtn' value='zoek!' />or <a class='close' href='/'>Cancel</a></p>
    </form>

query
Code:
    if(isset($_POST['searchBtn']))
	{
// Zoekfunctie:
    $statement = $db->prepare("
    SELECT 
		producten.productlink,
		prod_omschrijving.producttitel
    FROM
		producten
	INNER JOIN
		prod_omschrijving 
	ON
		producten.idproduct=prod_omschrijving.idproduct
    WHERE
		producten.productlink LIKE '%"?"%'
	OR
		prod_omschrijving.producttitel like '%"?"%'; 
    ");
	$statement->execute(array($_POST['zoekproduct'], $_POST['zoekproduct']))

			if (mysql_num_rows($lijstsql)>1)
			{
			$resultaten .= 'Er zijn '.mysql_num_rows($lijstsql).' producten gevonden.';
				while ($result = $statement->fetchObject())
				{
				$resultaten.= $result->producttitel;
				$resultaten.='<br/>';
				}
			}
			else
			{
			$resultaten	.='Er zijn geen resultaten gevonden';
			}
		
	}
echo $resultaten
 
Hey JC79,

Als ik het goed begrijp wil je een post doen naar een popup en daar in de resultaten laten zien
De volgende code heb ik elders gevonden:
Code:
var myForm = document.getElementById('formID');
myForm.onsubmit = function() {
    var w = window.open('about:blank','Popup_Window','toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=400,height=300,left = 312,top = 234');
    this.target = 'Popup_Window';
};

Je zou vervolgens om je resultaten heen een link kunnen zetten met in de onClick een functie die de gewenste waarde terug geeft aan je window.opener.

Ik zou echter aanraden om geen popup te gebruiken maar de resultaten met AJAX op te halen en in in een lijstje te zetten. Dit oogt netter en het is geen probleem als mensen een popup blocker aan hebben staan.
Als je een wat meer uitgewerkt antwoord nodig hebt, laat maar weten. Dan maak ik een voorbeeld dat ik test en plaats ik het hier.
 
Sorry voor de late reactie, maar ben bezig geweest met een nieuw script.

Maar kom er niet uit, als ik nu op de knop druk gebeurt er helemaal niets.

producten.php
Code:
<?PHP
$main .="
<form action='' method='post'>
        <span class='formInput'>zoek:</span>
        <input type='text' name='zoekproduct' id='zoekproduct'/>
        <input id='select-button' type='submit' name='searchBtn' value='zoek!' />
    </form>";
    
$qry ="
        SELECT
            bk_producten.product_id,
            bk_producten.aantal,
            producten.productlink
        FROM
            jcslnl_admin.bk_producten
        INNER JOIN
            jcslnl_webshop.producten
        ON
            bk_producten.product_id=producten.idproduct
        WHERE
            boeking_id        = ?
    ";
    
    $statement = $connection->prepare($qry);
    $statement->error;
    $statement->bind_param('s', $kenmerk);
    $statement->execute();
    $result = $statement->get_result();

        if(($result->num_rows)>=1)
        {
            while ($row = $result->fetch_assoc())
            {
            $main .= $row['productlink'].'<br/>';
            }
        }
    $statement->close();
        

    $main .='  
    <div id="dialog" title="Resultaten selecteren" style="display: none">
    <script type="text/javascript">
    $(document).ready(function() {
        $("#dialog").dialog({

            autoOpen: false,
            show: {
                effect: "blind",
                duration: 1000
            },
            hide: {
                effect: "blind",
                duration: 1000
            }
        });

        $("#select-button").click(function(e) {
            e.preventDefault();
            $.ajax({
                url: "search.php",
                data: $("#form").serialize(),
                type: "POST",
                dataType: "html"
            })
            .done(function(html) {
                    $("#dialog").html(html);
                    $("#dialog").dialog("open");
            });
            .fail(function(){
            alert("failed");
            });
        });
    });
    </script>';
    
    $main .='</div>';
    
?>

search.php
Code:
 <?php
    // Als een zoekwoord wordt ingegeven:
    if(isset($_POST['searchBtn']))
    {
    // Zoekfunctie:
    $statement = $connectionwebshop->prepare("
    SELECT
        producten.idproduct,
        producten.productlink,
        prod_omschrijving.producttitel
    FROM
        producten
    INNER JOIN
        prod_omschrijving
    ON
        producten.idproduct=prod_omschrijving.idproduct
    INNER JOIN
        prod_categorie
    ON
        producten.idproduct=prod_categorie.idproduct
    WHERE
        (producten.productlink LIKE ?
    OR
        prod_omschrijving.producttitel like ?
    OR
        producten.productcode like ?)
    AND
        prod_categorie.idcategorieen != 8001
    GROUP BY
        idproduct
    ORDER BY
        prod_omschrijving.producttitel
    ");
    $statement->error;
    $zoekproductresult ='%'.$_POST['zoekproduct'].'%';
    
    $statement->bind_param('sss', $zoekproductresult, $zoekproductresult, $zoekproductresult);
    $statement->execute();
    $result = $statement->get_result();

        if(($result->num_rows)>=1)
        {
        $resultaten = 'Er zijn '.($result->num_rows).' producten gevonden.<br/>
        ';
            while ($row = $result->fetch_assoc())
            {
            $resultaten.= '<a href="?pagina=bw-boeking&amp;do=producten&amp;kenmerk='.$kenmerk.'&amp;addproduct='.$row['idproduct'].'">'.$row['producttitel'].'</a>';
            $resultaten.='<br/>
            ';
            }
        }
        else
        {
        $resultaten    ='Er zijn geen resultaten gevonden';
        }
    $statement->close();
    }
    
    echo $resultaten;
    ?>
 
Laatst bewerkt:
Deze twee bestanden geven bij mij allerlei foutmeldingen dat $main nog niet bestaat en $connection enzo. Het lijkt er op dat je of meer bestanden hebt dan deze 2, of code overgenomen hebt van iemand anders die origineel gebruik maakte van andere bestanden.`
Heb je geen error reporting aanstaan op je (locale)webserver? dat kan soms heel behulpzaam zijn. Op die manier krijg je PHP errors terug als er iets niet klopt in je script. Ook kan het helpen om je console open te zetten om te kijken of er javascript fouten optreden.

Ik kan het zelf niet voor je debuggen nu, daarvoor heb ik de rest van de bestanden nodig.
Probeer het eerst zelf en zet anders maar de volledige code hier neer ofzo, dan probeer ik het voor je op te lossen.
 
De main kun je gewoon via echo oproepen.
$connection lijkt me logisch dat dat niet werkt, dit is de connectie met de database.

Er zijn nog heel veel meer bestanden, maar het gaat alleen om de <form></form> en het javascriptje.
 
Ah, ik heb een foutje ontdekt in de javascript code die je gebruikt.
je sluit je AJAX call af met een aantal functies er aan vast, maar je hebt een ; na je .done() en dan een .fail(), dat werkt niet, het juiste gebruik van deze code is:
[js]
$.ajax({
url: "search.php",
data: $("#form").serialize(),
type: "POST",
dataType: "html"
})
.done(function(html) {
$("#dialog").html(html);
$("#dialog").dialog("open");
})
.fail(function(){
alert("failed");
});
[/js]
 
Als ik die weg haal verdwijnt het invulveld en de submit knop.

edit: sorry fout in het uploaden.

De popup komt nu inderdaad tevoorschijn, nu nog even kijken waarom er neits in staat behalve failed.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan