Avatar billede fhansen Praktikant
01. december 2010 - 22:35 Der er 9 kommentarer og
1 løsning

kald af en PHP function fra en script

Jeg kan ikke få denne funktion til at virke.
Php koden bliver uanset hvad man klikker på i confirm boxen.

?>
    <script type="text/javascript">     
      if (confirm("Ønsker du at afslutte lejekontrakt "+<? echo $contract; ?>+"?"))
        {
        <?
            $dsql = 'UPDATE `rental` SET `Terminated` = \'1\' WHERE `Contract` = \''.$Contract.'\'';
            mysql_query($dsql) or die($dsql);
            logupdate($_SESSION["No"],"Lejekontrakt ".$Contract." er afsluttet",$client,'','');
        ?>
        document.location.href='detail.php?client=<? echo $Client; ?>';
        }
        else
        {
          document.location.href='detail.php?client=<? echo $Client; ?>';
        }
    </script>
<?
Avatar billede michael_stim Ekspert
01. december 2010 - 22:44 #1
Man skal tænke på client- og serverscript.
Avatar billede fhansen Praktikant
01. december 2010 - 23:10 #2
Jeg troede at begge i dette tilfælde var serverscripts
Avatar billede miqe Nybegynder
02. december 2010 - 00:24 #3
Jeg antager at der er php kode både over og under din script-sektion.
Virker resten af din php kode på siden som den skal?

php koden du har "indlejret" i din confirm-boks bliver eksekveret på serveren uanset hvad der sker i din confirm-kommando, da denne eksekveres på klienten efter php har leveret html dokumentet.

Med mindre din logupdate funktion leverer væsentligt javascript, der skal udføres ved confirm, kan din php kode lige så godt pladseres ovenover din script-sektion.

Som michael_stim antyder virker det som om du har blandet koncepterne sammen omkring php og javascript.

I den vedlagte kode, vil php eksekveres først og evt. tekst vil plastres ind dokumentet. Herefter sendes dokumentet fra webserveren til klientens browser, der (groft sagt) først indlæser html'en og derefter javascript'en.

Din kommentar om at du ser php-koden i stedet for resultatet af den, antyder at koden ikke behandles af en php-server i første omgang eller evt. af en php-server, der kun reagerer på det eksplicite <?php ... ?> frem for <? ... ?>
Avatar billede The_Buzz Novice
02. december 2010 - 01:06 #4
Eventuelt skal du ind og kigge på Jquery's load eller post funktion?
Jeg bruger det selv på www.PHPTips.dk til kommentarerne i bunden af artikler.

http://api.jquery.com/load/
http://api.jquery.com/jQuery.post/
Avatar billede fhansen Praktikant
02. december 2010 - 08:12 #5
Det er rigtigt, al php code bliver eksekveret af serveren, så selvfølgelig vil min code ikke virke, det kan jeg se nu.

Kan jeg ikke jeg ligge funktionen ind udenfor scriptet, også kalde functionen gennem et submit(), evt, ved at bruge document.location.href=.

ellers må jeg vel se lidt på jquery
Avatar billede fhansen Praktikant
02. december 2010 - 09:02 #6
Hvad synes i om denne løsning, når man nu ikke er så skrap til jquery

<?php
function term($Client, $Contract){
  $dsql = 'UPDATE `rental` SET `Terminated` = \'1\' WHERE `Contract` = \''.$Contract.'\'';
  mysql_query($dsql) or die($dsql);
  logupdate($_SESSION["No"],"Lejekontrakt ".$Contract." er afsluttet",$Client,'','');
  ?>
  <script>
    document.location.href='detail.php?client=<? echo $Client; ?>';
  </script>
  <?   
};

?>
    <script type="text/javascript">   
      var con;
      con = confirm("Ønsker du at afslutte lejekontrakt "+<? echo $Contract; ?>+"?")
        if (con){
          document.location.href='<? echo $PHP_SELF."?action=rentterm&client=".$Client."&contract=".$Contract ?>';
        }
        else
        {
          document.location.href='detail.php?client=<? echo $Client; ?>';
        }
       
    </script>
Avatar billede miqe Nybegynder
02. december 2010 - 23:16 #7
Din variabel $Contract lever kun indenfor din funktion 'term'.

Du definerer funktionen 'term', men kalder den ikke!?

Jeg kan selvfølgelig kun tage udgangspunkt i den kode jeg kan se.
Dit javascript er rent javascript. Indeholder ingen jQuery såvidt jeg kan se.

Når siden kaldes normalt skal du sikre dig at dit html output indeholder værdierne af dine variable på de rigtige pladser.

Når du skal opdatere på bagrund af confirm, er det enkleste for dig nok at gøre det via submit. Siden der kaldes via submit bør indeholde php koden til update (kan være samme side).

Det virker dog som om du bør have lidt mere grundlæggende hjælp med koncepterne. Der er også mange faldgrupper mht. at gøre funktionaliteten sikker overfor angreb udefra.

Prøv evt. at lege lidt med nogle tutorials der omhandler php og jQuery, inden du går videre med dit projekt.
Fandt et site via Google, der har tutorials, der måske vil interessere dig: http://www.phpjquery.com/

Derudover er http://dk.php.net/ og http://api.jquery.com/ sagen, for dem der vil benytte hhv. php og jQuery.

Jeg nævner jQuery, da det nok vil være meget nemmere at komme igang med og forstå, end hvis du skal lære javascript helt fra grunden.
Avatar billede fhansen Praktikant
03. december 2010 - 09:14 #8
Jeg kalder funktionen term via

$Action= $_REQUEST["action"];

switch($Action){
    case("rentterm"):
    term($Client, $Contract);
    break;
    };

Det fungere helt som jeg gerne ville have det.
Jeg tror du har ret i at jeg skal kigge lidt mere jquery.
Avatar billede fhansen Praktikant
07. december 2010 - 10:31 #9
Jeg har nu leget lidt med jquery, desværre uden at det helt har fungeret for mig.
Det fungere fint, når jeg kalder et PHP script, der sender en mail med en tilføjet pdf fil, men hvis jeg ønsker at få åbnet PDF filen, fungere det ikke.

Jeg har forsøget med denne metode

<button  name="acptbtn5" onClick="if(confirm('Ønsker du at gennemføre salget?'))
      {document.location.href='<? echo $PHP_SELF ?>';}else{document.location.href='detail.php?client=<? echo $Client; ?>'}">Tester</button>

men her er problemmet at submit ikke bliver kaldt, og det er et problem, i det jeg har brug for $_POST[].
Avatar billede fhansen Praktikant
16. december 2010 - 11:50 #10
Vi må vist lukke nu, jeg har løst mit problem på en anden måde, se nedenfor.

<script>
    function printacp() {
        alert('Du skal udskrive hvert dokument i 2 kopier.');
        document.getElementById('pst').action = 'fil.php';
        document.getElementById('pst').method = 'POST';
        document.getElementById('pst').target = '_self';
        document.getElementById('pst').submit();
    };
</script>
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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