Hallo,
ich möchte aus einer mysql Datenbank verschiedene Dropdowns auswählen. Dabei soll mein Feld Dropdown nur die Durchmesser anzeigen die auch zur Schraube gehören. Das tuts es bereits. Nun kommt die Länge dazu und diese wird nicht Abhängig von Schraube und Durchmesser angezeigt, sondern wird nur abhängig von der Schraube angezeigt. Das gleiche gilt für das Feld Aufnahme.
Ich haben schon mir alle logischen Möglichkeiten ausprobiert aber irgendwie stehe ih auf dem Schlauch. Vielleicht sieht ja jemand auf den ersten Blick wo mein "Fehler liegt"
grafik.png
Schraube und Durchmesser funktioniert
Länge und Aufnahme werden nicht mehr abhänging von den vorher eingegeben dropdowns berechnet und orientiren sich nur an der Schraube.
Code:
<!doctype html public "-//w3c//dtd html 3.2//en">
<html>
<head>
<title></title>
<META NAME="DESCRIPTION" CONTENT="">
<META NAME="KEYWORDS" CONTENT="">
<script type="text/javascript">
function ajaxFunction(choice)
{
var httpxml;
try
{
// Firefox, Opera 8.0+, Safari
httpxml=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
httpxml=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
httpxml=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
function stateChanged()
{
if(httpxml.readyState==4)
{
//alert(httpxml.responseText);
var myObject = JSON.parse(httpxml.responseText);
//Objekt Durchmesser
for(j=document.myForm.Durchmesser.options.length-1;j>=0;j--)
{
document.myForm.Durchmesser.remove(j);
}
var Durchmesser1=myObject.value.Durchmesser1;
var optn = document.createElement("OPTION");
optn.text = 'Select Durchmesser';
optn.value = '';
document.myForm.Durchmesser.options.add(optn);
for (i=0;i<myObject.Durchmesser.length;i++)
{
var optn = document.createElement("OPTION");
optn.text = myObject.Durchmesser[i];
optn.value = myObject.Durchmesser[i];
document.myForm.Durchmesser.options.add(optn);
if(optn.value==Durchmesser1){
var k= i+1;
document.myForm.Durchmesser.options[k].selected=true;
}
}
//Objekt Laenge
for(j=document.myForm.Laenge.options.length-1;j>=0;j--)
{
document.myForm.Laenge.remove(j);
}
var Laenge1=myObject.value.Laenge1;
var optn = document.createElement("OPTION");
optn.text = 'Select Laenge';
optn.value = '';
document.myForm.Laenge.options.add(optn);
for (i=0;i<myObject.Laenge.length;i++)
{
var optn = document.createElement("OPTION");
optn.text = myObject.Laenge[i];
optn.value = myObject.Laenge[i];
document.myForm.Laenge.options.add(optn);
if(optn.value==Laenge1){
var k= i+1;
document.myForm.Laenge.options[k].selected=true;
}
}
//Objekt Aufnahme
for(j=document.myForm.Aufnahme.options.length-1;j>=0;j--)
{
document.myForm.Aufnahme.remove(j);
}
var Aufnahme1=myObject.value.Aufnahme1;
var optn = document.createElement("OPTION");
optn.text = 'Select Aufnahme';
optn.value = '';
document.myForm.Aufnahme.options.add(optn);
for (i=0;i<myObject.Aufnahme.length;i++)
{
var optn = document.createElement("OPTION");
optn.text = myObject.Aufnahme[i];
optn.value = myObject.Aufnahme[i];
document.myForm.Aufnahme.options.add(optn);
if(optn.value==Aufnahme1){
var k= i+1;
document.myForm.Aufnahme.options[k].selected=true;
}
}
///////////////////////////
document.getElementById("txtHint").style.background='#00f040';
document.getElementById("txtHint").innerHTML='done';
//setTimeout("document.getElementById('txtHint').style.display='none'",3000)
}
}
var url="ajax-dd3ck.php";
var Schraube=myForm.Schraube.value;
if(choice != 's1'){
var Durchmesser=myForm.Durchmesser.value;
var Laenge=myForm.Laenge.value;
var Aufnahme=myForm.Aufnahme.value;
}else{
var Durchmesser='';
var Laenge='';
var Aufnahme='';
}
url=url+"?Schraube="+Schraube;
url=url+"&Durchmesser="+Durchmesser;
url=url+"&Laenge="+Laenge;
url=url+"&Aufnahme="+Aufnahme;
url=url+"&id="+Math.random();
myForm.st.value=Durchmesser;
//alert(url);
document.getElementById("txtHint2").innerHTML=url;
httpxml.onreadystatechange=stateChanged;
httpxml.open("GET",url,true);
httpxml.send(null);
document.getElementById("txtHint").innerHTML="Please Wait....";
document.getElementById("txtHint").style.background='#f1f1f1';
}
</script>
</head>
<body >
</head>
<body>
<div id="txtHint" style="width : 100px;background-color: #cccc33;">Message area</div>
<br><br>
<form name="myForm" action='ajax-dd3-details.php' method='post'">
<input type=hidden name=st value=0>
<table width=300>
<tr><td >
Schraubenart:<br><select name=Schraube id='s1' onchange=ajaxFunction('s1');>
<option value=''>Auswählen</option>
<?Php
//require "../include/z_db1.php";
require "config.php";// connection to database
$sql="select distinct Schraube from powerfast_1 ";
foreach ($dbo->query($sql) as $row) {
echo "<option value=$row[Schraube]>$row[Schraube]</option>";
}
?>
</select>
</td>
<td >Durchmesser:<br><select name=Durchmesser onchange=ajaxFunction('s2');>
<option value=''>Auswählen</option></select></td>
<td >Länge:<br><select name=Laenge onchange=ajaxFunction('s3');>
<option value=''>Auswählen</option></select></td>
<td >Aufnahme:<br><select name=Aufnahme onchange=ajaxFunction('s4');>
<option value=''>Auswählen</option></select></td>
</tr></tr>
<tr><td colspan=3><input type=submit value='Submit'></td></tr>
</form>
</table>
<br><br>
<div id="txtHint2"></div>
</body>
</html>
Alles anzeigen
<?Php
require "config.php"; // connection details
error_reporting(0);// With this no error reporting will be there
//////////
/////////////////////////////////////////////////////////////////////////////
$Schraube=$_GET['Schraube'];//
//$Schraube='IND'; // To check you can use this
$Durchmesser1=$_GET['Durchmesser'];
$Laenge1=$_GET['Laenge'];
//$Durchmesser1="Andhra Pradesh";
///////////// Validate the inputs ////////////
// Checking Schraube variable ///
if((strlen($Schraube)) > 0 and (!ctype_alpha($Schraube))){
echo "Data Error";
exit;
}
// Checking Durchmesser variable (with space ) ///
if ((strlen($Durchmesser1)) > 0 and ctype_alpha(str_replace(' ', '', $Durchmesser1)) === false) {
echo "Data Error";
exit;
}
/////////// end of input validation //////
if(strlen($Schraube) > 0){
$q_Schraube="select distinct(Durchmesser) from powerfast_1 where Schraube = '$Schraube'";
}else{
$q_Schraube="select distinct(Durchmesser) from powerfast_1";
}
//echo $q_Schraube;
$sth = $dbo->prepare($q_Schraube);
$sth->execute();
$Durchmesser = $sth->fetchAll(PDO::FETCH_COLUMN);
$q_Durchmesser="select distinct(Laenge) from powerfast_1 where ";
if(strlen($Schraube) > 0){
$q_Durchmesser= $q_Durchmesser . " Schraube = '$Schraube' ";
}
if(strlen($Durchmesser1) > 0){$q_Durchmesser= $q_Durchmesser . " and Durchmesser='$Durchmesser1'";}
$sth = $dbo->prepare($q_Durchmesser);
$sth->execute();
$Laenge = $sth->fetchAll(PDO::FETCH_COLUMN);
$q_Laenge="select distinct(Aufnahme) from powerfast_1 where ";
if(strlen($Schraube) > 0){
$q_Laenge= $q_Laenge . " Schraube = '$Schraube' ";
}
if(strlen($Laenge1) > 0){$q_Laenge= $q_Laenge . " and Laenge='$Laenge1'";}
$sth = $dbo->prepare($q_Laenge);
$sth->execute();
$Aufnahme = $sth->fetchAll(PDO::FETCH_COLUMN);
$main = array('Durchmesser'=>$Durchmesser,'Laenge'=>$Laenge,'Aufnahme'=>$Aufnahme,'value'=>array("Durchmesser1"=>"$Durchmesser1","Laenge1"=>"$Laenge1","Aufnahme1"=>"$Aufnahme1"));
echo json_encode($main);
////////////End of script /////////////////////////////////////////////////////////////////////////////////
?>
Alles anzeigen
Ich habe hier schon alles probiert. Leider ohne Erfolg
Im Prinzip hätte ich gerne
Dropdown1 (Schraube) = select distinct (Schraube) from powerfast_1 where Schraube = '$Schraube'" // $Schraube=Ausgewählter Wert im Dropdown
Dropdown2 (Durchmesser) = select distinct (Schraube, Durchmesser) from powerfast_1 where Schraube = '$Schraube'" // $....=Ausgewählter Wert im Dropdown
Dropdown2 (Laenge) = select distinct (Schraube, Durchmesser, Laenge) from powerfast_1 where Schraube = '$Schraube'" and Durchmesser = '$Durchmesser'" // $....=Ausgewählte Werte im Dropdown
Dropdown2 (Aufnahme) = select distinct (Schraube, Durchmesser, Laenge, Aufnahme) from powerfast_1 where Schraube = '$Schraube' and Durchmesser = '$Durchmesser' and Laenge= '$Laenge'" // $....=Ausgewählte Werte im Dropdown
Wie kann ich so etwas hinbekommen?
Tabelle:
grafik.png
Ich habe auch schon überlegt ob if(strlen nciht mit dem decimal Feld kompatibel ist?
Alle Infos helfen. Ist sicher nicht so schwierig aber ich als EInsteiger lerne gerade noch.
Liebe Grüße
Tim