Avatar billede hakio Novice
11. juli 2005 - 16:42 Der er 18 kommentarer og
1 løsning

Indhold bliver ikke vist hvis en js-funktion indsættes

I det nedenstående bliver min text+dropdown IKKE vist... Det bliver kun vist hvis jeg fjerner funktionen "getAlias()".
Hvad gør jeg galt?

<?PHP
    $connection = mysql_connect("localhost", "xxxxx", "xxxxxx") or die("Error connecting to database");
    mysql_select_db("mail", $connection);

    $Query = "SELECT Distinct destination FROM postfix_virtual ORDER BY destination";
    $Result = mysql_query($Query, $connection) or die("error querying database");
?>
<HTML>
<HEAD>
    <SCRIPT language="JavaScript">
    <!--
        function BodyLoad() {
            var select = document.FormName.destination;
            select.options[0] = new Option("Select email...");
            select.options[0].value = 0;
            <?PHP
                $ctr = 1;
                While( $Row = mysql_fetch_array($Result) ) {
                    echo "select.options[$ctr] = new Option(\"$Row[destination]\");\n";
                    echo "select.options[$ctr].value = \"$Row[destination]\";\n";
                    $ctr++;
                }
            ?>
        }                           
   
    function getAlias() {
            var main_select = document.FormName.destination;       
            <?PHP
                $Query = "SELECT * FROM postfix_virtual ORDER BY destination";
                $Result = mysql_query($Query, $connection) or die("error querying database");

                while( $Row = mysql_fetch_array($Result) ) {
                    ?>
                    if( main_select.options[main_select.selectedIndex].text == "<?PHP echo $Row[destination]; ?>" ) {                   
                    }
                }
        }       
           
        -->       
</SCRIPT>
       

</HEAD>
<BODY onload="BodyLoad();">
    <FORM name="FormName" method="POST" action="">
        <TABLE border="1">
            <TR>
                <TD>Email Adresses</TD>
            </TR>
            <TR>
                <TD>           
                    <SELECT name="destination" onchange="getAlias();"></SELECT>
                </TD>
            </TR>
        </TABLE>
    </FORM>
</BODY>
</HTML>
Avatar billede roenving Novice
11. juli 2005 - 17:36 #1
Hvadfor kaster du ikke options ind i selecten direkte ?-)

-- og hvad er det, du skal bruge din getAlias-funktion til, for lige nu skriver den jo præcis ingenting ...

<body>
    <form name="FormName" method="post" action="">
        <table border="1">
            <tr>
                <td>Email Adresses</td>
            </tr>
            <tr>
                <td>           
                    <select name="destination" onchange="getAlias();">
                      <option value="0">Select email ...</option>
            <?PHP
                While( $Row = mysql_fetch_array($Result) ) {
                    echo "<option value=\"$Row[destination]\">$Row[destination]</option"
                }
            ?>

                    </select>
Avatar billede hakio Novice
11. juli 2005 - 20:35 #2
min getAlias skal tage den valgte destination-value og bruge denne til at udtrække og vise en mænge rækker fra en db...
Avatar billede hakio Novice
11. juli 2005 - 20:38 #3
jeg er ret ny til php (og javascripts) - men havde fundet grund-modellen et andet sted og ville bygge videre på den.
Avatar billede roenving Novice
12. juli 2005 - 07:25 #4
Ovenstående er bare helt skørt, for der er absolut ingen grund til at man udfører noget to gange, hvilket er det, der sker ...

-- og hvis du skal lave afhængige selects kan du så med mest fordel skabe en javascript 'database', så den kan reagere på klienten uden behov for at belaste din server og brugerens internetlinje ekstra ...

F.eks.

var arr = new Array();

            <?PHP
                $Query = "SELECT * FROM postfix_virtual ORDER BY destination";
                $Result = mysql_query($Query, $connection) or die("error querying database");

                while( $Row = mysql_fetch_array($Result) ) {
                    ?>
                    arr[ "<?PHP echo $Row[destination] ?>" ] = ["<?PHP echo $Row[price] ?>","<?PHP echo $Row[date] ?>","<?PHP echo $Row[time] ?>"]
                    <?PHP
                } ?>

-- eller hvordan du nu skal bruge den !-)
Avatar billede hakio Novice
12. juli 2005 - 08:46 #5
Nej - jeg er godt klar over det ikke er den optimale måde at gøre tingene på. Men jeg har brug for at få lavet det relativt hurtigt og det behøver ikke være den pæneste kode - skal 'bare' bruges en sjælden gang på et internt netværk.

Jeg takker for dit løsningsforslag - vil prøve at implementere det, da min anden løsning ikke virkede. For lige at vende tilbage til mit oprindelige spm - har du nogen ide om hvorfor min text+dropdown ikke bliver vist lige så snart jeg indsættes getAlias js-funktionen i script-tagget?
Avatar billede roenving Novice
12. juli 2005 - 08:50 #6
Ja, har du ikke glemt at afslutte php-programmeringen i js-blokken (se den sidste kode, jeg lagde !-)
Avatar billede hakio Novice
12. juli 2005 - 09:15 #7
Hmm... min php-kode skulle være afsluttet korrekt alle steder skulle jeg mene. Min fulde kode er som dette her - hvis getAlias funktionen er i <script>-tagget bliver min drop down vist, men uden indhold. Hvis jeg fjerner getAlias funktionen bliver indholdet vist i drop downen. Ku godt tænke mig at vide hvorfor faen det sker. Vil lave en pænere løsning ved lejlighed, men har bare brug for at have det her færdigt senere idag :o)

<?PHP
    $connection = mysql_connect("localhost", "xxx", "xxx") or die("Error connecting to database");
    mysql_select_db("mail", $connection);

    $Query = "SELECT Distinct destination FROM postfix_virtual ORDER BY destination";
    $Result = mysql_query($Query, $connection) or die("error querying database...");
?>
<HTML>
<HEAD>
    <SCRIPT language="JavaScript">
    <!--
        function BodyLoad() {
            var select = document.FormName.destination;
            select.options[0] = new Option("Select email...");
            select.options[0].value = 0;
            <?PHP
                $ctr = 1;
                While( $Row = mysql_fetch_array($Result) ) {
                    echo "select.options[$ctr] = new Option(\"$Row[destination]\");\n";
                    echo "select.options[$ctr].value = \"$Row[destination]\";\n";
                    $ctr++;
                }
            ?>
        }                           
   
    function getAlias() {
            var main_select = document.FormName.destination;       
            <?PHP
                $query = "SELECT * FROM postfix_virtual ORDER BY destination";
                $result = mysql_query($query, $connection) or die("error querying database");

                while( $row = mysql_fetch_array($result) ) {
                    ?>
                    if( main_select.options[main_select.selectedIndex].text == "<?PHP echo $row[destination]; ?>" ) {                                           
                       
                        <table width="50%" align="center">
                        <tr class="row"><td>Type</td><td>Email</td><td>Alias</td></tr>
                        <?PHP
                        $i = 0;
                        while($result_ar = mysql_fetch_assoc($result)){
                        ?>
                        <tr <?php if($i%2 == 1){ echo "class='body2'"; }else{echo "class='body1'";}?>>
                        <td>
                        <?php echo $result_ar['type']; ?></td>
                        <td>
                        <?php echo $result_ar['destination']; ?>
                        </td>
                        <td>
                        <?php echo $result_ar['email']; ?>
                        </td>
                        </tr>
                        </table>
                        <?php
                        $i+=1;
                        }?>
                    }
                <?php
                }?>
        }       
           
        -->       
</SCRIPT>
       

</HEAD>
<BODY onload="BodyLoad();">
    <FORM name="FormName" method="POST" action="">
        <TABLE border="1">
            <TR>
                <TD>Email Adresses</TD>
            </TR>
            <TR>
                <TD>           
                    <!-- <SELECT name="destination" onchange="getAlias();"></SELECT>-->
                    <SELECT name="destination"></SELECT>
                </TD>
            </TR>
        </TABLE>
    </FORM>
</BODY>
</HTML>
Avatar billede roenving Novice
12. juli 2005 - 09:27 #8
Men det betyder jo, at du lige pludselig inde i en javascript-blok har noget html stående, prøv engang at se koden efter fortolkningen, for du kan selvfølgelig ikke 'bare' have html-kode midt inde i en javascript-funktion, der skal du jo indsætte elementerne det relevante sted enten ved at bruge de klassiske bindings, eller ved (endnu bedre, da det er fremtidssikret !-) at oprette elementer og tilknytte dem til de relevante containere med ren DOM-ecmascript-bindings !o]
Avatar billede hakio Novice
12. juli 2005 - 09:40 #9
ok - det var jeg ikke klar over. Tror bare jeg vil udskrive html'en via php echo så. Ligesom jeg gør det med select.option's i BodyLoad funktionen ovenfor.
Avatar billede hakio Novice
12. juli 2005 - 09:42 #10
hvis du kan give mig en løsning til det, vil jeg gerne give en god bunke extra point :o)
Avatar billede roenving Novice
12. juli 2005 - 09:54 #11
Udskriv i stedet alle linjerne, og lav en funktion, som skjuler eller viser tingene !-)

<?PHP
    $connection = mysql_connect("localhost", "xxx", "xxx") or die("Error connecting to database");
    mysql_select_db("mail", $connection);

    $Query = "SELECT Distinct destination FROM postfix_virtual ORDER BY destination";
    $Result = mysql_query($Query, $connection) or die("error querying database...");
?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
    function getAlias(sel) {
      if(sel.selectedIndex>0){
        document.getElementById(sel.value).style.display = 'block';
      }
    }       
</script>
<title>Min side</title>
</head>
<body onload="BodyLoad();">
    <form name="FormName" method="POST" action="">
        <table border="1">
            <tr>
                <td>Email Adresses</td>
            </tr>
            <tr>
                <td>           
                    <select name="destination" onchange="getAlias(this);">
                      <option value="0">Select email ...</option>
            <?PHP
                While( $Row = mysql_fetch_array($Result) ) {
                    echo "<option value=\"$Row[destination]\">$Row[destination]</option"
                }
            ?>

                    </select>
                                <?PHP
                $query = "SELECT * FROM postfix_virtual ORDER BY destination";
                $result = mysql_query($query, $connection) or die("error querying database");

                while( $row = mysql_fetch_array($result) ) {
                    ?>
                        <table width="50%" align="center" id="<?PHP echo $row[destination]; ?>" style="display:none;">
                        <tr class="row"><td>Type</td><td>Email</td><td>Alias</td></tr>
                        <?PHP
                        $i = 0;
                        while($result_ar = mysql_fetch_assoc($result)){
                        ?>
                        <tr <?php if($i%2 == 1){ echo "class='body2'"; }else{echo "class='body1'";}?>>
                        <td>
                        <?php echo $result_ar['type']; ?></td>
                        <td>
                        <?php echo $result_ar['destination']; ?>
                        </td>
                        <td>
                        <?php echo $result_ar['email']; ?>
                        </td>
                        </tr>
                        </table>
                        <?php
                        $i+=1;
                        }
                }?>

                </td>
            </tr>
        </table>
    </form>
</body>
</html>
Avatar billede hakio Novice
12. juli 2005 - 10:53 #12
ok - det kode giver godt nok bare en tom side...
Avatar billede roenving Novice
12. juli 2005 - 10:57 #13
Hvordan ser kilden ud ?-)
Avatar billede hakio Novice
13. juli 2005 - 09:03 #14
jeg er ik helt klar over hvad du mener med 'kilden'? Kildekoden er dit '12/07-2005 09:54:00'-indlæg...
Avatar billede roenving Novice
13. juli 2005 - 10:15 #15
Når php-fortolkeren har tygget sig igennem, altså 'Vis kilde' i browseren !-)
Avatar billede hakio Novice
13. juli 2005 - 11:16 #16
ikke fantasisk meget...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1"></HEAD>
<BODY></BODY></HTML>
Avatar billede roenving Novice
13. juli 2005 - 11:20 #17
-- så er det i hvert fald heller ikke den kode, jeg har smidt, du har brugt, for den har en anden doctype ...
Avatar billede hakio Novice
13. juli 2005 - 16:50 #18
Det er den kode - har dobbelttjekket flere gange. Og copy-pasted påny. Det er i IE6 kildekoden ser sådan ud.
I FireFox er der bare det her:
<html><body></body></html>
Avatar billede hakio Novice
09. februar 2006 - 17:57 #19
svar
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