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 ?
Annonceindlæg fra Novataris
18. november 2010 - 19:36
#1
Vi ved jo ikke hvad du har lavet, prøv at vis din kode eller et link.
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>"; };
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); }
18. november 2010 - 20:15
#4
Og i min form er der sådan set bare en div, til at hive tingene ud i
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å
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.
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 :-(
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'];
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
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.
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> </option> </select> </span> <span id="box3"> <!-- place holder ajax data kommer her --> <select> <option> </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
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
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
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>
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
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>";
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.
19. november 2010 - 17:20
#19
Det vil jeg prøve, så vender jeg lige tilbage senere i aften
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
Vi tilbyder markedets bedste kurser inden for webudvikling