/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Javascript med PHP variabel
Fra : Jesper Lützen


Dato : 25-01-07 10:03

Hejsa,

Om dette spørgsmål hører til her eller i js-gruppen er der
garanteret mange holdninger til, men here goes:

Jeg laver et udtræk fra min mySQL-base, som spytter et antal linier
ud. For hver linie indsætter jeg et billede med et link omkring,
hvortil jeg vil koble en confirm-boks, så der sikres mod "hovsa" klik,
idet der er tale om en slette-funktion.

Koden er som følger pt:

$req = mysql_query("SELECT * FROM ba_menu ORDER BY subsystem,
menuLevel, menuOrder");
while($res=mysql_fetch_array($req)){
   extract($res);

[klip - en masse output, der fungerer]

echo "<td class=\"lightBackground\">";
echo "<a href=\"intraAdmin.php?id=12&edit=$menuId\"><img
src=\"design/userEdit3.jpg\" alt=\"Rediger\" /></a>";
echo "<script type=\"text/javascript\">
   <!--
   function confirmation() {
      var answer = confirm(\"Vil du slette menupunktet?\")
      if (answer){
         window.location = \"intraAdmin.php?id=13&delete=$menuId\";
      }
   }
   //-->
   </script>";
echo "<a onclick=\"confirmation()\" ><img
src=\"design/userDelete3.jpg\" alt=\"Slet\" /></a>";
}
echo "</td>\n";

--
Som I kan se, så forsøger jeg at lægge en php-variabel i
JS-funktionen, men idet js jo afvikles lokalt og php på serveren er
resultatet, et der for hver linie ALTID bruges den værdi, der står i
den sidste række fra mySQL-udtrækket.

Logikken kan jeg sagtens følge, men hvordan omgår jeg så den
problemstilling?

Håber en af jer har noget genialt i baghånden ;)

På forhånd tak

Jesper Lützen


 
 
Johan Holst Nielsen (25-01-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 25-01-07 12:14

Jesper Lützen wrote:
> Hejsa,
>
> Om dette spørgsmål hører til her eller i js-gruppen er der
> garanteret mange holdninger til, men here goes:
>
> Jeg laver et udtræk fra min mySQL-base, som spytter et antal linier
> ud. For hver linie indsætter jeg et billede med et link omkring,
> hvortil jeg vil koble en confirm-boks, så der sikres mod "hovsa" klik,
> idet der er tale om en slette-funktion.
>
> Koden er som følger pt:
>
> $req = mysql_query("SELECT * FROM ba_menu ORDER BY subsystem,
> menuLevel, menuOrder");
> while($res=mysql_fetch_array($req)){
>    extract($res);
>
> [klip - en masse output, der fungerer]
>
> echo "<td class=\"lightBackground\">";
> echo "<a href=\"intraAdmin.php?id=12&edit=$menuId\"><img
> src=\"design/userEdit3.jpg\" alt=\"Rediger\" /></a>";
> echo "<script type=\"text/javascript\">
>    <!--
>    function confirmation() {
>       var answer = confirm(\"Vil du slette menupunktet?\")
>       if (answer){
>          window.location = \"intraAdmin.php?id=13&delete=$menuId\";
>       }
>    }
>    //-->
>    </script>";
> echo "<a onclick=\"confirmation()\" ><img
> src=\"design/userDelete3.jpg\" alt=\"Slet\" /></a>";
> }
> echo "</td>\n";
>
> --
> Som I kan se, så forsøger jeg at lægge en php-variabel i
> JS-funktionen, men idet js jo afvikles lokalt og php på serveren er
> resultatet, et der for hver linie ALTID bruges den værdi, der står i
> den sidste række fra mySQL-udtrækket.
>
> Logikken kan jeg sagtens følge, men hvordan omgår jeg så den
> problemstilling?

ændre HTML'en til følgende:

?> <!-- afslut php parsing -->
<td class="lightBackground">
<a href="intraAdmin.php?id=12&edit=<?=$menuId?>">
<img src="design/userEdit3.jpg" alt="Rediger" /></a>
<a onclick="confirmation(<?=$menuId?>)">
<img src="design/userDelete3.jpg" alt="Slet" /></a>

Nu har du menu id som et argument i din javascript funktion... så
skriver du følgende JS funktion *udenfor* loop'et

function confirmation(id) {
   var answer = confirm("Vil du slette menupunktet?");
   if (answer){
   window.location = "intraAdmin.php?id=13&delete="+id;
   }
}



Mvh
Johan

Jesper Lützen (25-01-2007)
Kommentar
Fra : Jesper Lützen


Dato : 25-01-07 18:17

> ændre HTML'en til følgende:
>
> ?> <!-- afslut php parsing -->
> <td class="lightBackground">
> <a href="intraAdmin.php?id=12&edit=<?=$menuId?>">
> <img src="design/userEdit3.jpg" alt="Rediger" /></a>
> <a onclick="confirmation(<?=$menuId?>)">
> <img src="design/userDelete3.jpg" alt="Slet" /></a>
>
> Nu har du menu id som et argument i din javascript funktion... så
> skriver du følgende JS funktion *udenfor* loop'et
>
> function confirmation(id) {
> var answer = confirm("Vil du slette menupunktet?");
> if (answer){
> window.location = "intraAdmin.php?id=13&delete="+id;
> }
>
> }Mvh
> Johan-

Det lyder både logisk og fornuftigt bortset fra, at jeg er nødt til
at skrive den sidste del INDE i loopet, idet scriptet skal bruges for
hver eneste linie. <a... tagget skal omkranse et lille "slet"-billede
som er gentaget for hver linie, og idet samtlige elementer i menuen er
listet op bliver det til en del gange. Jeg *KAN* derfor desværre ikke
skrive den sidste del af JS-funktionen udenfor PHP-loopet. Korrekt?

Venlig hilsen

Jesper


Johan Holst Nielsen (25-01-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 25-01-07 20:42

Jesper Lützen wrote:
>> ændre HTML'en til følgende:
>>
>> ?> <!-- afslut php parsing -->
>> <td class="lightBackground">
>> <a href="intraAdmin.php?id=12&edit=<?=$menuId?>">
>> <img src="design/userEdit3.jpg" alt="Rediger" /></a>
>> <a onclick="confirmation(<?=$menuId?>)">
>> <img src="design/userDelete3.jpg" alt="Slet" /></a>
>>
>> Nu har du menu id som et argument i din javascript funktion... så
>> skriver du følgende JS funktion *udenfor* loop'et
>>
>> function confirmation(id) {
>> var answer = confirm("Vil du slette menupunktet?");
>> if (answer){
>> window.location = "intraAdmin.php?id=13&delete="+id;
>> }
>>
>> }Mvh
>> Johan-
>
> Det lyder både logisk og fornuftigt bortset fra, at jeg er nødt til
> at skrive den sidste del INDE i loopet, idet scriptet skal bruges for
> hver eneste linie. <a... tagget skal omkranse et lille "slet"-billede
> som er gentaget for hver linie, og idet samtlige elementer i menuen er
> listet op bliver det til en del gange. Jeg *KAN* derfor desværre ikke
> skrive den sidste del af JS-funktionen udenfor PHP-loopet. Korrekt?

Ikke korrekt... du kalder blot confirmation med et argument som er id'et
for deleten - det argument overfører du til din location.href - hvilket
betyder du kun behøves en funktion :)

Smid et link hvis du har problemer - så jeg kan vejlede dig videre...

Mvh
Johan

Jesper Lützen (26-01-2007)
Kommentar
Fra : Jesper Lützen


Dato : 26-01-07 08:01

Ikke korrekt... du kalder blot confirmation med et argument som er
id'et
> for deleten - det argument overfører du til din location.href - hvilket
> betyder du kun behøves en funktion :)
>
> Smid et link hvis du har problemer - så jeg kan vejlede dig videre...

Mange tak for det. Desværre er det et intranet jeg sidder og arbejder
på, og jeg kan derfor ikke smide link til siden.

Resultatet er pt følgende:

[kode]
(... noget php)
?>
<script type=\"text/javascript\">
<!--
   function confirmation(id) {
      var answer = confirm("Vil du slette menupunktet?");
      if (answer){
         window.location = "intraAdmin.php?id=13&delete="+id;
      }
   }
//-->
</script>
<?PHP
$req = mysql_query("SELECT * FROM ba_menu ORDER BY subsystem,
menuLevel, menuOrder");
while($res=mysql_fetch_array($req)){
   extract($res);

   if($menuRestricted==1) $menuRestrictedText="Ja";
   else $menuRestrictedText="Nej";

   if($menuId!=$edit){

      echo "   <tr>\n";
      echo "      <td class=\"lightBackground\">$menuId &nbsp;</td>\n";
      echo "      <td class=\"lightBackground\">$menuName &nbsp;</td>\n";
      echo "      <td class=\"lightBackground\">$menuUrl &nbsp;</td>\n";
      echo "      <td class=\"lightBackground\">$menuLevel &nbsp;</td>\n";
      echo "      <td class=\"lightBackground\">$menuOrder &nbsp;</td>\n";
      echo "      <td class=\"lightBackground\">$menuParent &nbsp;</td>\n";
      echo "      <td class=\"lightBackground\">$menuRestrictedText
&nbsp;</td>\n";
      echo "      <td class=\"lightBackground\">$subsystem &nbsp;</td>\n";
      echo "      <td class=\"lightBackground\">";
      if($edit!="null" && $edit!=0) echo "&nbsp;";
      else {
         echo "<a href=\"intraAdmin.php?id=12&edit=$menuId\"><img
src=\"design/userEdit3.jpg\" alt=\"Rediger\" /></a> ";
         echo "<a";
         ?>onclick="confirmation(<?PHP echo "=$menuId)\"><img
src=\"design/userDelete3.jpg\" alt=\"Slet\" /></a>";
      }
      echo "</td>\n";
      echo "   </tr>\n";

   } else {
(...) [kode slut]

Nu fejlmelder den da ikke, men desværre er der ikke noget effekt af
koden, forstået på den måde, at der hverken kommer en confirmation
box eller et link ud af et klik på billedet.

Giver det en smule til at kunne hjælpe det sidste (lille) skridt
videre?

På forhånd tak
Jesper


Johan Holst Nielsen (26-01-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 26-01-07 10:49

Jesper Lützen wrote:
> Nu fejlmelder den da ikke, men desværre er der ikke noget effekt af
> koden, forstået på den måde, at der hverken kommer en confirmation
> box eller et link ud af et klik på billedet.
>
> Giver det en smule til at kunne hjælpe det sidste (lille) skridt
> videre?

onclick="confirmation(<?PHP echo "=$menuId)\">

Skal være

onclick="confirmation(<?=$menuId?>)">

Desuden er der ikke helt styr i din kode på hvornår du er inde og ude af
php fortolkeren - så nogle steder backslasher du "'er udenfor PHP'en
hvilket er unødvendigt...

Ligeledes ser det ud til du ikke "starter" php fortolkeren op igen efter
dit slet knap.

Mvh
JOhan

Jesper Lützen (26-01-2007)
Kommentar
Fra : Jesper Lützen


Dato : 26-01-07 12:19

> Skal være
>
> onclick="confirmation(<?=$menuId?>)">
>
> Desuden er der ikke helt styr i din kode på hvornår du er inde og ude af
> php fortolkeren - så nogle steder backslasher du "'er udenfor PHP'en
> hvilket er unødvendigt...
>
> Ligeledes ser det ud til du ikke "starter" php fortolkeren op igen efter
> dit slet knap.

Det ser umiddelbart ud til at jeg har fået PHP-delen til at spille nu,
og resultatet snuppet fra VIS KILDE er nu:

[kode start - foregående kode undladt]
<script type=\"text/javascript\">
<!--
   function confirmation(id) {
      var answer = confirm("Vil du slette menupunktet?");
      if (answer){
         window.location = "intraAdmin.php?id=13&delete="+id;
      }
   }
//-->
</script>
   <tr>
      <td class="lightBackground">10 &nbsp;</td>
      <td class="lightBackground">Forside &nbsp;</td>
      <td class="lightBackground">index.php &nbsp;</td>
      <td class="lightBackground">0 &nbsp;</td>
      <td class="lightBackground">0 &nbsp;</td>
      <td class="lightBackground">0 &nbsp;</td>
      <td class="lightBackground">Nej &nbsp;</td>
      <td class="lightBackground"> &nbsp;</td>
      <td class="lightBackground">
         <a href="intraAdmin.php?id=12&edit=10"><img
src="design/userEdit3.jpg" alt="Rediger" /></a>
         <a onclick="confirmation(10)"><img src="design/userDelete3.jpg"
alt="Slet" /></a>
      </td>
   </tr>
[kode slut - efterfølgende kode undladt]

Som jeg ser det, smides php-variablen korrekt i confirmation(10), hvor
10-tallet afspejler PHP variablen, men nu er situationen så den, at
JavaScriptet fejler når jeg klikker på billedet... Mangler der
eksempelvis nogle " eller ' et eller andet sted? Ved godt spørgsmålet
er ved at udvikle sig til ren JS, men håber I bærer over med mig ;)

Venlig hilsen

Jesper Lützen


Jesper Lützen (26-01-2007)
Kommentar
Fra : Jesper Lützen


Dato : 26-01-07 12:24

> <script type=\"text/javascript\">

.... Lige et \ for meget, som var nok til at spolere funktionen. Nu
spiller det! Tak for hjælpen, Johan!


Venlig hilsen

Jesper


Johan Holst Nielsen (26-01-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 26-01-07 12:48

Jesper Lützen wrote:
>> <script type=\"text/javascript\">
>
> ... Lige et \ for meget, som var nok til at spolere funktionen. Nu
> spiller det! Tak for hjælpen, Johan!

Det var så lidt :)

Mvh
johan

Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste