Avatar billede Jingz Nybegynder
18. november 2010 - 19:34 Der er 19 kommentarer og
1 løsning

Chained forms, vil ikke sende 2 felter

Hej alle eksperter.

Jeg sidder lige i et problem med noget php, og javascript.

Jeg har lavet en formular hvor at jeg laver chained form på 2 dropdowns, de virker som de skal men er hentet fra en request.php fil, og bliver ikke sendt med i min POST når jeg udfører formularen..

Hvad er det jeg gør galt ?
Avatar billede intenz Novice
18. november 2010 - 19:36 #1
Vi ved jo ikke hvad du har lavet, prøv at vis din kode eller et link.
Avatar billede Jingz Nybegynder
18. november 2010 - 20:15 #2
Her er min request.php, som jeg er sikker på indeholder fejlen..

if($type === "hoved")
    {
        $id = $_REQUEST['id'];
        ?>
            <select name="newuser[kommune]" onChange="GetSecondAjaxData(this.value, 'box3')" style="border:1px #000 solid; background:none; width:202px;">
            <option selected="selected" value="0">Vælg Kommune</option>
           
        <?php
        $query = mysqli_query($connection,"SELECT * FROM kommuner where region_id=".$id."");
        while ($result = mysqli_fetch_array($query)){
            echo "<option value = ".$result['id'].">".$result['name']."</option>";
        };
        echo "</select>";
   
    } else {
        ?>
            <select name="newuser[postalcode]" style="border:1px #000 solid; background:none; width:202px;">
            <option selected="selected" value="0">Vælg postnr & by</option>
        <?php
        $underid = $_REQUEST['underid'];
        $query = mysqli_query($connection,"SELECT * FROM postnumre where kommune_id=".$underid."");
        while($result = mysqli_fetch_array($query))
        {
            echo "<option value=".$result['id'].">".$result['number']." ".output($result['name'])."</option>";
        };
        echo "</select>";
    };
Avatar billede Jingz Nybegynder
18. november 2010 - 20:15 #3
Her er mit javascript

function GetXmlHttpObject()    {
        if (window.XMLHttpRequest)  {
          // code for IE7+, Firefox, Chrome, Opera, Safari
          return new XMLHttpRequest();
          }
        if (window.ActiveXObject)  {
        // code for IE6, IE5
              return new ActiveXObject("Microsoft.XMLHTTP");
        }
        return null;
    }

    function GetAjaxData(Val, OutputId){
        var url = "lib/chainrequest.php";     
        var params = "id="+Val+"&type=hoved";

        http = GetXmlHttpObject();
        http.open("POST", url, true);
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");
        http.onreadystatechange = function () {
            if(http.readyState == 4 && http.status == 200 ){           
                document.getElementById(OutputId).innerHTML = http.responseText;   
                GetAjaxData1(0, 'box3');
            }
        }
        http.send(params);     
    }     

    function GetSecondAjaxData(Val, OutputId){
        var url = "lib/chainrequest.php";     
        var params = "underid="+Val+"&type=under";

        http = GetXmlHttpObject();
        http.open("POST", url, true);
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");
        http.onreadystatechange = function () {
            if(http.readyState == 4 && http.status == 200 ){           
                document.getElementById(OutputId).innerHTML = http.responseText;   
            }
        }
        http.send(params);     
    }
Avatar billede Jingz Nybegynder
18. november 2010 - 20:15 #4
Og i min form er der sådan set bare en div, til at hive tingene ud i
Avatar billede olsensweb.dk Ekspert
18. november 2010 - 21:16 #5
#2
>Her er min request.php, som jeg er sikker på indeholder fejlen..
i dit js kalder du den jf #3 chainrequest.php


#3
function GetAjaxData(Val, OutputId){
        var url = "lib/chainrequest.php";   
        var params = "id="+Val+"&type=hoved";

        http = GetXmlHttpObject();
        http.open("POST", url, true);
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");
        http.onreadystatechange = function () {
            if(http.readyState == 4 && http.status == 200 ){         
                document.getElementById(OutputId).innerHTML = http.responseText; 
                GetAjaxData1(0, 'box3');
                // den skal hedde
                GetSecondAjaxData(0, 'box3');
            }
        }
        http.send(params);   
    }   

jeg antager du har en id der hedder box3
men ellers smid lige din form også
Avatar billede Jingz Nybegynder
18. november 2010 - 21:26 #6
Det er rigtig som du skriver. Har vist været en fejl med noget omdøbning, men jeg har stadig problemet med at min 2 <select> fra chainrequestfilen, ikke vil smide noget data med min POST, i formularen.
Avatar billede olsensweb.dk Ekspert
18. november 2010 - 21:45 #7
mangler du ikke denne i toppen af din chainrequest.php
$type = $_REQUEST['type'];
du tester på type en tager den ikke med over :-(
Avatar billede Jingz Nybegynder
18. november 2010 - 21:52 #8
åh jo. Den er der faktisk, jeg mangler bare lige et par linjer fra toppen af dokumentet. De er som følger:

ini_set('default_charset','iso-8859-1');
$type = $_REQUEST['type'];
Avatar billede olsensweb.dk Ekspert
19. november 2010 - 00:22 #9
i din chainrequest.php har du lavet en general fejl, ved at afslutte alle dine while løkker med et ;


<?php   
    require_once("../db_conn.php");
    ini_set('default_charset','iso-8859-1');
    $type = $_REQUEST['type'];
    if($type === "hoved")
    {
        $id = $_REQUEST['id'];       
        ?>       
        <select name="newuser[kommune]" onChange="GetSecondAjaxData(this.value, 'box3')" style="border:1px #000 solid; background:none; width:202px;">
        <option selected="selected" value="0">Vælg Kommune</option>       
      <?php       
        $sql = "SELECT * FROM kommuner where region_id=".$id;  // lagt ud seperat da det er nemmere at test, der var også noget mystisk med "" i slutningen
        $query = mysqli_query($connection,$sql) or die (mysqli_error($connection));       
        while ($result = mysqli_fetch_array($query)){
            echo "<option value = ".$result['id'].">".$result['name']."</option>";
        } //; fjernes
        echo "</select>"; 
    } else {
        ?>
            <select name="newuser[postalcode]" style="border:1px #000 solid; background:none; width:202px;">
            <option selected="selected" value="0">Vælg postnr & by</option>
        <?php
        $underid = $_REQUEST['underid'];       
        $sql = "SELECT * FROM postnumre where kommune_id=".$underid;       
        $query = mysqli_query($connection,$sql);
        while($result = mysqli_fetch_array($query))
        {   
                   
            // echo "<option value=".$result['id'].">".$result['number']." ".output($result['name'])."</option>";
            // .output laver kvaler

            echo "<option value=".$result['id'].">".$result['number']." ".$result['name']."</option>";
        } //; fjernes
        echo "</select>";
    } // ; fjernes
?>


komplet source ligger her http://olsensweb.dk/test/experten/spm/924392/924392.zip
Avatar billede Jingz Nybegynder
19. november 2010 - 09:47 #10
Nu har jeg prøvet at rette de ting du skriver, men jeg sidder desværre stadig med samme problem. De 2 "eksterne" felter bliver ikke sendt med når jeg poster.
Avatar billede olsensweb.dk Ekspert
19. november 2010 - 12:12 #11
#10
>De 2 "eksterne" felter bliver ikke sendt med når jeg poster.
hvilke 2 "externe" felter er det der ikke bliver sendt med over ??
hvor er det du poster til ??,
til chainrequest.php, eller en anden

kan du ikke vise coden på den fil hvor de felter er i.


<form name="form1" action="test.php" method="POST">

<span id="box1">
<?php
    print '<select size="1" id="emner" name="emner" onchange ="GetAjaxData(this.value, \'box2\')">';
    print '<option selected="selected" value="0">Vælg region</option>';
    print "<option value = \"1\">region 1</option>";
    print "<option value = \"2\">region 2</option>";
    print "<option value = \"3\">region 3</option>";
    print "<option value = \"4\">region 4</option>";
    print "</select>"; 
?>
</span>

<span id="box2">
<!-- place holder ajax data kommer her -->
<select>
<option>&nbsp;</option>
</select>
</span>

<span id="box3">
<!-- place holder ajax data kommer her -->
<select>
<option>&nbsp;</option>
</select>
</span>

<input type="submit" value="Send">
</form>


ovenstående sender
Array ( [emner] => 1 [newuser] => Array ( [kommune] => 1 [postalcode] => 2 ) ) over til test.php
Avatar billede Jingz Nybegynder
19. november 2010 - 12:37 #12
Med de eksterne felter, mener jeg de to der ligger i chainrequest.php

Du kan tilsyneladende godt få sendt dine afsted..

Min vil ikke sende det afsted, som ligger i box2 og box3
Avatar billede olsensweb.dk Ekspert
19. november 2010 - 13:02 #13
kan du ikke vise den form du bruger.
hvis data visses i box2 og box3 så må du have en fejl der
Avatar billede Jingz Nybegynder
19. november 2010 - 13:16 #14
Her er formen, som det bliver kaldt ind i via Ajax scriptet

<form action="<?php echo "/".APP_ROOT."/newuser" ?>" method="post">

<input type="text" name="newuser[firstname]" class="newuser" />
<input type="text" name="newuser[middlename]" class="newuser" />
<input type="text" name="newuser[lastname]" class="newuser" />
<input type="text" name="newuser[adress]" class="newuser" />

<div id="box1">
<?php
  echo '<select name="newuser[region]" onChange="GetAjaxData(this.value, \'box2\')" style="border:1px #000 solid; background:none; width:202px;">

<option selected="selected" value="0">Vælg region</option>';

$query = mysqli_query($connection,"SELECT * FROM regioner order by id asc");

while ($result = mysqli_fetch_array($query))                                      {     
  echo "<option value=".$result['id'].">".$result['name']."</option>";
};
echo "</select>";
?>
</div>

<div id="box2">
<select name="newuser[kommune]" disabled="disabled" style="border:1px #000 solid; background:none; width:202px;">
<option> </option>
</select>
</div>

<div id="box3">
<select name="newuser[postalcode]" disabled="disabled" style="border:1px #000 solid; background:none; width:202px;">
<option> </option>
</select>
</div>

<input type="text" name="newuser[email]" class="newuser" />
<input type="text" name="newuser[phone]" class="newuser" />
<input type="password" name="newuser[password]" class="newuser"

<input type="submit" name="submit" value="Udfør" style="border:1px #000 solid; background:none;" /> 
</form>
Avatar billede olsensweb.dk Ekspert
19. november 2010 - 14:57 #15
>  <form action="<?php echo "/".APP_ROOT."/newuser" ?>" method="post">
bliver fortolket som
<form action="/APP_ROOT/newuser" method="post"> i HTML
den skulle vel gerne skrive noget i APP_ROOT
det er vel newuser.php

har selv dette i min code
<form action="newuser.php" method="post">

newuser.php
<?php
print_r($_REQUEST);
?>

og resultatet er
Array ( [newuser] => Array ( [firstname] => Ronny [middlename] => Jørn [lastname] => Olsen [adress] => xxxxxx [region] => 1 [kommune] => 1 [postalcode] => 2 [email] => eksperten@olsensweb.dk [phone] => 123456789 [password] => password ) [submit] => Udfør )

demo http://olsensweb.dk/test/experten/spm/924392/

komplet source opdateret
Avatar billede olsensweb.dk Ekspert
19. november 2010 - 15:31 #16
jeg ville lige validerer coden i formen

<input type="password" name="newuser[password]" class="newuser" /> mangler da


<option selected="selected" value="0">Vælg region</option>';

$query = mysqli_query($connection,"SELECT * FROM regioner order by id asc");

while ($result = mysqli_fetch_array($query))                                      {   
  echo "<option value=".$result['id'].">".$result['name']."</option>";
};
echo "</select>";

vil jeg lave om til
    echo '<select name="newuser[region]" onchange="GetAjaxData(this.value, \'box2\')" style="border:1px #000 solid; background:none; width:202px;">
    <option selected="selected" value="0">Vælg region</option>';
    $query = mysqli_query($connection,"SELECT * FROM regioner order by id asc");
    while ($result = mysqli_fetch_array($query))                                     
    {           
        $tmp = $result['name'];   
        $id = $result['id'];
        echo "<option value = \"$id\">$tmp</option>";
    }
    echo "</select>";
Avatar billede Jingz Nybegynder
19. november 2010 - 16:46 #17
Jeg synes efterhånden jeg har prøvet alt, men jeg kan stadig ikke få det til at virke. Jeg tror måske jeg prøver at lave scriptet fra bunden igen.
Avatar billede olsensweb.dk Ekspert
19. november 2010 - 17:14 #18
>Jeg tror måske jeg prøver at lave scriptet fra bunden igen.
så kan du tage udgangspunkt i denne
http://olsensweb.dk/test/experten/spm/924392/924392.zip

den virker for mig
Avatar billede Jingz Nybegynder
19. november 2010 - 17:20 #19
Det vil jeg prøve, så vender jeg lige tilbage senere i aften
Avatar billede Jingz Nybegynder
24. november 2010 - 19:10 #20
Jeg fik mig lavet en løsning. Istedet for at hive en hel select ind, valgte jeg kun at hive options ind. Det var tricket.

Jeg lukker den
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