Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kalkulatror w ajax
Forum PHP.pl > Forum > XML, AJAX > AJAX
doti
  1. Witam,
  2. jestem tutaj pierwszy raz wiec od razu przepraszam jesli temat umiescilam w zlym miejscu.
  3. Mam problem jak wykonać kalkulator który znalazlam na tej stronie: drukarnia.
  4. Wydaje mi sie ze jest tutaj wykorzystany php+ajax ale nie wiem jak sie zabrać za cos takiego. Wiem ze są gotowe biblioteki ktorymi mozna to wykonac.
  5. Czy jest ktos kto naprowadziłby na jakies podobny przyklad questionmark.gif
  6. Bardzo prosze o pomoc
blooregard

Serdecznie witam Cię na forum.php.pl, ~doti

Tak, jest to zrobione przy pomocy technologii Ajax.
Selecty mają zdarzenie onchange(), które powoduje po wybraniu pozycji aktualizację pozostałych elementów na podstawie danych pobranych z bazy (skrypt PHP po stronie serwera).

Do zrobienia takiej funkcjonalności wystarczy pierwszy lepszy kurs Ajax, w którym będziesz miała opisane podstawowe aspekty: obiekt XMLHttpRequest, obsługa żądań i odpowiedzi, przetwazranie wyników zwróconych z serwera z powrotem po stronie klienta, sposoby manipulowania DOM przy pomocy JavaScript.

Oczywiście w razie problemów z przyjemnością Ci pomożemy smile.gif

Przy okazji - pisząc posty nie musisz używać w treści posta znaczników BBCode poza cytowanymi fragmentami kodu.

pozdrawiam i życzę miłych chwil spedzonych na forum.php.pl

blooregard
Opiekun
doti
W zasadzie juz cos sobie napisałam i cos zaczeło działac.
Gdy kazdy parametr umieszcze w osobnej tabeli to wszystko mi smiga, nawet liczy sume netto.
Mam problem gdy pobieram parametry z jednej tabeli.
Moze byc taka sytuacja ze dla kategorii wizytowki beda przypisane takie parametry jak kolor i format a dla ulotek np foliowanie.
Dlatego musze uzależnic 2 pola select od siebie.

moja baza wygląda nast:
tabele to : kategorie, parametry, wartosci parametrow, naklad, termin, dostawa,

CREATE TABLE `kategorie` (
`id` int(5) unsigned NOT NULL auto_increment,
`nazwa` varchar(200) NOT NULL,
`cena` float(10,2) NOT NULL,
PRIMARY KEY (`id`)
);


CREATE TABLE `parametry` (
`id` int(10) unsigned NOT NULL auto_increment,
`idkategoria` int(10) NOT NULL,
`nazwa` varchar(500) NOT NULL,
`pole` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ;


CREATE TABLE `wartosci_parametrow` (
`id` int(10) unsigned NOT NULL auto_increment,
`idparametr` int(10) NOT NULL,
`idkategoria` int(10) NOT NULL,
`nazwa` varchar(500) NOT NULL,
`cena` float(5,2) NOT NULL,
PRIMARY KEY (`id`)
);


funkcja w pliku ajax wyglada nast:

function ajaxFunction()
{
var xmlhttp;
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
alert("Your browser does not support XMLHTTP!");
}
}
function ladowanie() {
innerHTML = '<img src="loader.gif" border="0">Przetwarzanie danych....';
}


function showHint(str)
{

xmlhttp=GetXmlHttpObject();
var kategoria = encodeURIComponent(document.getElementsByName('idkategoria')[0].value);
var termin = encodeURIComponent(document.getElementsByName('idtermin')[0].value);
var format = encodeURIComponent(document.getElementsByName('idformat')[0].value);
var naklad = encodeURIComponent(document.getElementsByName('idnaklad')[0].value);
var projekt = encodeURIComponent(document.getElementsByName('idprojekt')[0].value);
var parametr = encodeURIComponent(document.getElementsByName('idparametr')[0].value);

var url="pokaz_liste.php";
xmlhttp.open("POST", url, true);
var params ="idkategoria="+kategoria+"&idtermin="+termin+"&idformat="+format+"&idnaklad="+naklad+"&idprojekt="+projekt+"&idparametr="+parametr;
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("charset", "UTF-8");

xmlhttp.onreadystatechange=stateListChanged;
xmlhttp.send(params);

}

function stateListChanged()
{

if (xmlhttp.readyState==(1 || 0) )
{
document.getElementById("pokaz").innerHTML="</br></br></br></br><p align='center'><img src='loader.gif'></p>";
}
if( (xmlhttp.readyState==4) || (xmlhttp.readyState == 200))
{
document.getElementById("pokaz").innerHTML=xmlhttp.responseText;
}
}

Niestety mam problem z wyswietlaniem cen obok pol select.
Czy to co przedstawilam rozwiazuje problem??
Moze sklad bazy ma byc inny oraz skrypt ajax??
prosze o odpowiedz
blooregard
~doti, poproszę Cię o dodanie odpowiedniego BBCode dla kodu.

Twój problem nie dotyczy struktury bazy, gdyż dane pobierasz i przetwarzasz po stronie serwera. To, co z powrotem otrzyma funkcja
stateListChanged(), zależy od kodu PHP. Pokaż f-cję, którą pobierasz dane z bazy.

doti
Podaje kawalek kodu. Wybierajac odpowiednia wartość z kategorii wyswietlam jej parametry ( i powinny byc tez ceny alby pozniej wyliczyc wartosc netto)

Plik index.php

echo"<table border='0' align='center' width='100%' cellspacing='1' cellpadding='1' >";
echo"<tr><td colspan='2' class='center'>formularz kalkulacyjny:</td><td class='center'>koszty</td></tr>";
echo'<form action="wynik.php" method="post" name="form1">';
//kategoria---------------------------------------------
echo"<tr><td class='right'>kategoria:</td><td class='left'>";
echo '<select name="idkategoria" id="idkategoria" onchange="showHint(this.value)" return false; style="width: 300px" >';
echo "<option value=''>--- wybierz kategorie ----</option>";
$list1_query = mysql_query('SELECT * FROM kategorie');
while($row_list1 = mysql_fetch_array($list1_query))
{
echo '<option value="'.$row_list1['id'].'" label="'.$row_list1['nazwa'].'">'.$row_list1['nazwa'].'</option>';
}
echo '</select>';
echo"</td><td class='koszt'></td></tr></table>";



plik pokaz_liste.php

echo"<div id='pokaz'>";
echo"<table border='0' align='center' width='950px'><tr><td width='650px' class='table'>";

echo'<form action="wynik.php" method="post" name="form1">';
echo "<input type='hidden' name='kategoria' value='$idkategoria' />";
echo"<table border='0' align='center' width='100%' cellspacing='1' cellpadding='1' >";
echo"<tr><td colspan='2' class='center'>formularz kalkulacyjny:</td><td class='center'>koszty</td></tr>";
//kategoria---------------------------------------------
echo"<tr><td class='right'>kategoria:</td><td class='left'>";
echo '<select name="idkategoria" id="idkategoria" onchange="showHint()" return false; style="width: 300px" >';
//echo "<option value=''>--- wybierz kategorie ----</option>";
$list_query= mysql_query('SELECT * FROM kategorie');
while($row_list = mysql_fetch_array($list_query))
{
print "<option ";
if($row_list['id']==$_POST['idkategoria'])
print " SELECTED ";
print " value=".$row_list['id'].">"
.$row_list['nazwa']."</option>";
}
print "</select>";
echo"</td><td class='koszt'>";
?><div id="pokaz" >
<?php

if($_POST['idkategoria'])
{
$list_query1= mysql_query('SELECT * FROM kategorie where id = '.$idkategoria.' ');
echo"<table width='100%' border='0'>";
echo"<tr>";
while($row_list1 = mysql_fetch_array($list_query1))
{
$cenazakolor=$row_list1['cenazakolor'];
$cena=$row_list1['cena'];
$przygotowanie=$row_list1['przygotowanie'];
}
echo $sumakat=$cenazakolor+$cena+$przygotowanie;
echo"</tr></table>";
$cenatermin;
}
?></div><?php
echo"</td></tr>";
//koniec kategorie

//parametry ===================================================

?><div id='pokaz' class='pokaztermin'> <?php
$list2_query= mysql_query('SELECT * FROM parametry WHERE idkategoria = '.$idkategoria.'' );
while($row_list2 = mysql_fetch_array($list2_query))
{
$parametr=$row_list2['nazwa'];
$id=$row_list2['id'];
echo"<tr><td class='right'>$parametr</td>";

$list3_query=mysql_query('SELECT * FROM wartosci_parametrow WHERE idkategoria ='.$idkategoria.' and idparametr='.$id.'');
echo '<td class="left">
<select name="idparametr" id="idparametr" onchange="showHint(this.value)" style="width: 300px">';
while($row_list3 = mysql_fetch_array($list3_query))
{
print "<option ";
if($row_list3['id']==$_POST['idparametr'])
print " SELECTED ";
print " value=".$row_list3['id'].">"
.$row_list3['nazwa']."</option>";
}
echo '</select></td>
<td class="koszt">';
?><div id="pokaz"><?php
if($_POST['idparametr'])
{
$list_query4= mysql_query('SELECT * FROM wartosci_parametrow WHERE id='.$idparametr.' ');
echo"<table width='100%' border='0'>";
echo"<tr>";
while($row_list4 = mysql_fetch_array($list_query4))
{
echo $cenaparametr=$row_list4['cena'] ;
}
echo"</tr></table>";
$cenaparametr;
}
?>
</div><?php
echo'</td></tr>';
}
?></div><?php


Wybierajac wartosc w kategorii wyswietlaja sie jej parametry. Ale problem jest jesli mam wybrac wartosc w parametrach (tak jak jest to w przykladowym formularzu na stronie drukarni przyklad. Nie potrafie tego ogarnac. Zmienia mi cene pierwszego parametru pozostale juz nie.



Jak przesłać wybrana wartośc z listy rozwijalnej i odczytac jej id wraz z cena. Jak w funkcji ajax wykonac petle aby zwróciła odpowiednia zmienna?

Czy jest ktoś kto mógłby pomoc questionmark.gif Bardzo prosze

Czy jest ktos kto mógłby pomóc sadsmiley02.gif sadsmiley02.gif sadsmiley02.gif sadsmiley02.gif
erix
1: brak dostosowania się do polecenia o korzystaniu z bbcode.
2: kilkukrotne podbijanie tematu.

Zamykam, dość tego. Szanujmy siebie nawzajem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.