Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> kalkulatror w ajax, witam
doti
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 24.03.2010

Ostrzeżenie: (0%)
-----


  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 (IMG:style_emoticons/default/questionmark.gif)
  6. Bardzo prosze o pomoc
Go to the top of the page
+Quote Post
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź





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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
doti
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 24.03.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
blooregard
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




~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.

Go to the top of the page
+Quote Post
doti
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 24.03.2010

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/questionmark.gif) Bardzo prosze

Czy jest ktos kto mógłby pomóc (IMG:style_emoticons/default/sadsmiley02.gif) (IMG:style_emoticons/default/sadsmiley02.gif) (IMG:style_emoticons/default/sadsmiley02.gif) (IMG:style_emoticons/default/sadsmiley02.gif)
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




1: brak dostosowania się do polecenia o korzystaniu z bbcode.
2: kilkukrotne podbijanie tematu.

Zamykam, dość tego. Szanujmy siebie nawzajem.
Go to the top of the page
+Quote Post

Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.12.2025 - 14:06