Avatar billede jdjensen Juniormester
18. november 2011 - 00:04 Der er 19 kommentarer og
1 løsning

Køre en funktion baseret på parametre i urlen

Hej,

Er det muligt blot med parametre i enden af en url at køre en bestemt php-funktion, eksempel:

http://www.domain.com/index.php?success=yes

Hvis parametren er sat til "?success=yes" kører den funktion1 og hvis det er "?success=no" kører den funktion2 fra index.php templaten?

Det vil jeg gerne vide hvordan jeg gør.
Avatar billede mcgoat Nybegynder
18. november 2011 - 00:19 #1
if($_GET("success")=="yes") RunFunction1();

noget ala det vil jeg tro
Avatar billede jdjensen Juniormester
18. november 2011 - 12:14 #2
Jeg får en error når jeg bruger den linie:

Fatal error: Function name must be a string in /index.php on line 16
Avatar billede jdjensen Juniormester
18. november 2011 - 13:21 #3
Har prøvet mig frem og hvis jeg bruger følgende istedet kommer jeg udenom string-fejlen:

<?php if ($_GET['success'] == 1) Confirmation(); ?>

--------------------------------------------

MEN den giver mig istedet en anden fejl (Fatal error: Call to undefined function confirmation() in /index.php on line 30).:

<script type="text/javascript">
function confirmation() {
    $('a[href="#confirmation"]').fancybox({
                'autoDimensions'    :    false,
        'width'            :    700,
        'height'            :    'auto',
        'hideOnContentClick':    false,
        'scrolling'            :    'no',
        'centerOnScroll'            :    true,
                });
        };
</script>

--------------------------------------------

Hvad har jeg overset?
Avatar billede olebole Juniormester
18. november 2011 - 15:13 #4
<ole>

"Hvad har jeg overset?" >> Du blander PHP og JavaScript sammen, som om det var samme sprog - og uden øje for, at PHP kører på serveren og JS virker i browseren

/mvh
</bole>
Avatar billede olebole Juniormester
18. november 2011 - 15:17 #5
Læg også mærke til, at JS er case sensitive, så du vil aldrig kunne kalde funktionen confirmation med Confirmation();.

Prøv i stedet med denne kode/struktur:


<script type="text/javascript">
function confirmation() {
    // En hel masse kode
}

<?php if ($_GET['success'] == 1) echo 'confirmation();' ?>
</script>

Avatar billede jdjensen Juniormester
18. november 2011 - 17:05 #6
Tak olebole. Nu mangler jeg bare hjælp fra én der har bedre styr på fancybox og jquery så min funktion kommer til at virke. Den vil ikke åbne #confirmation modal popup'en selvom jeg bruger trigger fra jquery.

<script type="text/javascript">
$(document).ready(function() {

function confirmation() {
    $('#confirmation').fancybox().trigger('click');
    } 

});

<?php if ($_GET['success'] == 1) echo 'confirmation();' ?>
</script>

---------
mcgoat og olebole i kan bare smide et svar hvis i vil have points.
Avatar billede olebole Juniormester
18. november 2011 - 18:12 #7
Er det mon ikke:


<script type="text/javascript">
$(document).ready(function() {

function confirmation() {
    $('#confirmation').trigger('click');
    } 

});

<?php if ($_GET['success'] == 1) echo 'confirmation();' ?>
</script>

Avatar billede olebole Juniormester
18. november 2011 - 18:15 #8
- eller nol nærmere:


<script type="text/javascript">
$(document).ready(function() {

<?php if ($_GET['success'] == 1) { ?>
    $('#confirmation').trigger('click');
<?php } ?>

});
</script>

Avatar billede jdjensen Juniormester
18. november 2011 - 18:28 #9
Hmm der sker ikke rigtig noget olebole. Har også prøvet følgende:

<script type="text/javascript">
function confirmation() {
    $(document).ready(function() {
    $("#confirmation").fancybox().trigger('click');
    });
}

<?php if ($_GET['success'] == 1) echo 'confirmation();' ?>
</script>

Her kommer der godt nok en popup frem men med en tekst "The requested content cannot be loaded. Please try again later." hvilet typisk kommer når den ikke kan finde indholdet af #confirmation. Men linket og indholdet findes i body så det undrer mig den ik kan finde det.

Jeg fandt en side hvor de kommenterer om hvordan en fancybox kan åbnes ved page load men synes ikke rigtig det virker med min funktion: http://stackoverflow.com/questions/807271/how-to-launch-jquery-fancybox-on-page-load

Men nu åbner den da i det mindste en (error)popup. Jeg leder videre. :))
Avatar billede olebole Juniormester
18. november 2011 - 18:33 #10
Du er nødt til at køre funktionen på eller efter sideload. Prøv først at få jQuery-halløjet til at fungere uden URL-parameter, så funktionen altid kører på sideload. Derefter kan du begynde at blande det med PHP
Avatar billede jdjensen Juniormester
18. november 2011 - 20:17 #11
SUCCESS! :-)

Jeg brugte din metode olebole på at fejlfinde. Først fjernede jeg alt php og fik jquery til at spille og derefter tilføjede jeg php igen.

Jeg har allerede oprettet 2 forskellige url'er (success=1 og success=2) som outputter noget tekst i en fancybox med nogle indstillinger. Her scriptet:

<script type="text/javascript">
function success1() {
  $(document).ready(function() {
      $("a#success1").fancybox({
        'autoDimensions' : false,
        'width' : 700,
        'height' : 'auto',
        'hideOnContentClick' : false,
        'scrolling' : 'no',
        'centerOnScroll' : true,
}).trigger('click');
});
}

<script type="text/javascript">
function success2() {
  $(document).ready(function() {
      $("a#success2").fancybox({
        'autoDimensions' : false,
        'width' : 700,
        'height' : 'auto',
        'hideOnContentClick' : false,
        'scrolling' : 'no',
        'centerOnScroll' : true,
}).trigger('click');
});
}

<?php if ($_GET['success'] == 1) echo 'success1();' ?>
<?php if ($_GET['success'] == 2) echo 'success2();' ?>
</script>

2 ting:
- Der er vel ikke mulighed for at de 2 php betingelser ligger uden for script-koderne vel? Så kunne jeg nemlig flytte alt javascript ind i min js-fil. Men kun hvis det er muligt.

- Begge funktioner benytter iøvrigt de samme indstillinger. Kan man kombinere 2 funktionsnavne så jeg ikke behøver at gentage indstillingerne?
Avatar billede olebole Juniormester
18. november 2011 - 20:52 #12

<script type="text/javascript">
function success(nInx) {
  $(document).ready(function() {
      $("a#success"+nInx).fancybox({
        'autoDimensions' : false,
        'width' : 700,
        'height' : 'auto',
        'hideOnContentClick' : false,
        'scrolling' : 'no',
        'centerOnScroll' : true,
}).trigger('click');
});
}
</script>


- og så skriv dette i bunden af dokumentet:


<?php
echo '<script type="text/javascript">setTimeout("success('.$_GET['success'].')", 50);</script>'
?>


Så er du ret sikker på, dokumentet er helt færdigloaded. Din nuværende kode fungerer sikkert i et lille dokument, men ikke i et med meget kode.
Avatar billede olebole Juniormester
18. november 2011 - 20:57 #13
- eller rettere:


<?php
if (isset($_GET['success'])) {
    echo '<script type="text/javascript">setTimeout("success('.$_GET['success'].')", 50);</script>';
}
?>

Avatar billede jdjensen Juniormester
18. november 2011 - 21:23 #14
Ok den kræver vist lidt forklaring. :)

Du giver funktionen "success" nogle variabler: nInx. Jeg ved dog ikke hvad "nlnx" betyder?

Og så skal jeg i bunden af min index.php fil sætte denne linie ind til funktionen "success":
<?php
if (isset($_GET['success'])) {
    echo '<script type="text/javascript">setTimeout("success('.$_GET['success'].')", 50);</script>';
}
?>

Ovenstående skal gøres for begge mine 2 funktioner (success1 og success2) og så kan jeg holde php og js adskilt? (altså flytte alt js ind i min js-fil)
Avatar billede olebole Juniormester
19. november 2011 - 15:22 #15
Jeg har samlet dine to funktioner til én. Når du kalder den sender du $_GET['success'] (som for tiden kan være 1 eller 2) med i kaldet. Dette argument er det, der optræder som parameteren nInx i funktionen.

I funktionen afgør nInx, hvilken selector, der skal anvendes:

$("a#success"+nInx).fancybox({
Avatar billede jdjensen Juniormester
21. november 2011 - 13:19 #16
Mange tak olebole, det var noget nemmere og så slipper jeg for at have en dedikeret funktion til hver parametre. Jeg gætter den timeout på php-linien nederst i min body er for at sikre siden er helt loadet færdig. :)
Hvis du vil have points kan du jo bare smide et svar og ellers vil jeg lukke opgaven og sige tak for hjælpen endnu engang. :)
Avatar billede olebole Juniormester
21. november 2011 - 14:12 #17
Selvtak. Ja, det gør det noget lettere - og timeout'en er 'seler og livrem' for at sikre load af siden. Du svarer bare selv og lukker  =)
Avatar billede jdjensen Juniormester
21. november 2011 - 18:14 #18
Lukker.
Avatar billede jdjensen Juniormester
22. november 2011 - 15:42 #19
Forresten, hvad nu hvis jeg også gerne vil kunne bruge success="yes" og success="no" til min parametre? Lige nu virker funktionen vel kun med tal. :)
Avatar billede olebole Juniormester
22. november 2011 - 16:18 #20
Så kalder du enten dine links noget à la successno og successyes - eller omsætter dine yes- og no-værdier til tal med nogle if-sætninger
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester