Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][ajax][jquery] aktualizacja danych na stronie
Forum PHP.pl > Forum > XML, AJAX
tish83
Witam, potrzebuje pomocy ze skryptem - jestem totalnym laikiem w tematyce ajax, a chciałabym żeby dane na stronie automatycznie aktualizowały mi się po dodaniu rekordu do bazy.
W czym problem:
1. mam plik index.php o strukturze:
<?php
ob_start();

session_start();
if(!session_is_registered("uzytkownik") || $_GET['logout']==1)
{ // Sprawdza zmienną sesji.
session_destroy(); // Przekierowanie do index.php
if( $_GET['logout']==1){
header("location: index.php");}
}

$start=microtime();
// kod do liczenia czasu ładowania strony
?>
<?
include("scripts/setup.php");
include("scripts/functions.php");
//include("scripts/functions.js");
include("scripts/db.class.php");

$DB = new DBClass('xxx', array('xxx'=>array($dbhost,$dbuser,$dbpass,$dbname)));
$DB->Execute("SET CHARACTER SET utf8");
$DB->Execute("SET NAMES utf8");
$DB->_DEBUG(TRUE);

$adm=$_GET['id'];
if(!$adm) $adm='produkty';
$newwind=$_GET['newwind'];

include_once("parts/header.php"); //tutaj mam wyświetlanie wartości koszyka
//tylko to co poniżej się przeładowuje...
if (file_exists("parts/modules/".$adm.".php"))
{
include('parts/modules/'.$adm.'.php');
}


if (file_exists("parts/templates/".$adm.".php"))
{
include('parts/templates/'.$adm.'.php');
}

include("parts/footer.php");

?>

2. w includowanym pliku header mam wszystkie znaczniki head + "górną część strony czyli menu i m.in. <table> w której wyświetla się aktualny stan koszyka, a raczej MIAŁ się wyświetlać

3. po tym includowane sa skrypty dotyczące poszczególnych podstron, m.in. dodawania produktów do koszyka

i tutal jest problem - po dodaniu produktu do koszyka chciałabym, aby automatycznie aktualizowal mi zawartość koszyka, którego wyświetlanie jest w header sad.gif

Czy może ktoś mi podpowiedzieć jak to zrobić?
Arcioch
Z tego co zrozumiałem chcesz po kliknięci w przycisk typu "dodaj do koszyka" js wysłać zapytanie do mysql z produktem i zaktualizować produkt w koszyka. Nic nie szkodzi na przeszkodzie aby to zrobić pomimo iż te pliki z koszykiem jest w innym pliku niż plik z produktami. Napisze Ci krok po kroku jak to zrobić a jeśli sobie nie poradzisz to napiszemy to razem.

1. Po pierwsze każdy produkt ma pewnie jakiś identyfikator. Klikając na przycisk dodaj do koszyka musisz wysłać ajaxem do pliku php identyfikator tego produktu i inne potrzebne Ci parametry (np. ilość sztuk). Przykład takiego kodu w jQuery.

  1. $("uchwyt do przysicku dodaj do koszyka").click(
  2. $.ajax({
  3. type: "POST",
  4. url: 'adres pliku w którym będziesz odbierał dane',
  5. data: "parametr który wysyłasz="+ jego wartość,
  6. cache: false,
  7. dataType: "json",
  8. success: function(data){
  9. TU będzie odpowiedz z pliku php którą będziesz aktualizował html
  10. }
  11. });
  12. });


2. W pliku php musisz sobie przygotować kod który odbierze dane z posta i odpowiednio je przetworzy zwracając albo JSONA z danymi albo JSONA z gotowym już widokiem danego produktu dodanego do koszyka.
3. Po wysłaniu danych JSONEM z php do jQuery w parametrze success dodajesz za pomocą funkcji append() dane do Twojego widoku html.

Mam nadzieję że w miarę po ludzku to wyjaśniłem wink.gif
tish83
pomogło, ale się zirytowałam i narazie użyłam php. Co mnie zirytowała - strona mi się przeładowuje pomimo, iż miala tego nie robić sad.gif
Arcioch
aaa wink.gif dopisz w clicku return false wink.gif
tish83
testuję taki przykładzik

<script type="text/javascript">
$(function(){
$("#ajax-post").submit(function() {
var username = $("input[name=username]").val();
var email = $("input[name=email]").val();
data = "username=" + username + "&email=" + email;
$.ajax({
type: "POST",
data: data,
url: "?id=produktyk",
success: function(response){
if($.trim(response) == "SUCCESS") {
alert("Dane zostały dodanie do bazy.");
}
else {
alert(response);
}
}
});
return false;
});
});
</script>

plik produktyk.php
$username = $_POST['username'];
$email = $_POST['email'];

if(!empty($username) AND !empty($email)) {
//tutaj insert do bazy danych smile.gif
}

if($insert) {
echo "SUCCESS";
}
else {
echo "ERROR";
}

a teraz jak juz mi się ten element doda do bazy to chcę żeby w div wyświetlal mi się aktualny stan "id" z tabeli uzytkownicy, a nie mogę sobie poradzić z tym append() - moge prosic o pomoc jeszcze w tej kwestii?
Arcioch
Dobrze ale co chesz dokładnie zwrócić z pliku php wink.gif Wszystko rozchodzi się o to aby w plik którym odbierasz dane wysłać tablice z danymi przez funkcję json_encode(). Wtedy pod zmienna respon bedziesz miał tablice z danymi z php wink.gif Dlatego napisz dokładnie jakie dane chcesz wysłać z php do js i jak wygląda Twój plik php wink.gif
tish83
teraz to już mi nic nie działa - zaraz się chyba poplaczę HELP ME!
tak wygląda cały mój "problem"
od początku:

index.php

<?php
ob_start();
session_start();
if(!session_is_registered("uzytkownik") || $_GET['logout']==1){ session_destroy(); if( $_GET['logout']==1){header("location: index.php");}}
$start=microtime();
?>
<?
include("scripts/setup.php");
include("scripts/functions.php");
include("scripts/db.class.php");

$DB = new DBClass('xxx', array('xxx'=>array($dbhost,$dbuser,$dbpass,$dbname)));
$DB->Execute("SET CHARACTER SET utf8");
$DB->Execute("SET NAMES utf8");
$DB->_DEBUG(TRUE);

$adm=$_GET['id'];
if(!$adm) $adm='produkty';
$newwind=$_GET['newwind'];

include_once("parts/header.php");
if (file_exists("parts/modules/".$adm.".php")){include('parts/modules/'.$adm.'.php');}
if (file_exists("parts/templates/".$adm.".php")){include('parts/templates/'.$adm.'.php');}
include("parts/footer.php");
?>

header.php

w head umieściłam:

<script type="text/javascript">
$(function() {
$("#upk").click(function() {
var przyc_u = $('#przyc_u').val();
var usr = $('#usr').val();
var dataString = 'przyc_u='+ przyc_u + '&usr=' + usr;

$.ajax({
type: 'POST',
url: '?id=produktykk',
data: dataString,
success: function(data) {
if( data == '0' )
alert( 'Błędne dane logowania!!!' );
else
window.location = window.location;
}
});
});
});
</script>
dalej są tabelki odpowiedzialne za nagłówek, menu i boczne menu,
i tu także jest wyświetlanie aktualnej zawartości koszyka
<body>......
<?/*------------------------------------------------------- koszyk --------------------------------------------------------------*/?>
<?include("parts/modules/produktyk.php"); // ten sposób wyświetla aktualny stan koszyka, ale po odświeżeniu strony ;( w ten sposób ominęłam dodawanie ajaxa dopóki go nie ogarnę?>
<td rowspan="2" style="background-image:url(images/koszyk.png); background-repeat: no-repeat; width: 222px;">
<table style="margin-top: 35px; font-size:13px; font-weight: bold;">
<tr><td>Ilość produktów....</td><td align="right"><?=($ww['TotalIlosc'] ? $ww['TotalIlosc'] : '0');?></td></tr>
<tr><td>Wartość......</td><td align="right"><?=($ww['TotalWart'] ? $ww['TotalWart'] : '0');?> zł</td></tr>
<tr><td colspan="2" align="right"><a href="?id=konto&k=2&o=1">sprawdź...</a></td></tr>
</table>
</td>
<?/*------------------------------------------------------- koszyk koniec --------------------------------------------------------------*/?>

produktyk.php
<?
$userid=$DB->GetOne("SELECT id FROM uzytkownik WHERE login='".$_SESSION['uzytkownik']."'");
//echo 'post '.$_POST['przyc_k'];
if ($_POST['przyc_k'])
{
if($userid)
{//dodać podobne dla gościa
$zamid=$DB->GetOne("SELECT id FROM zamowienia WHERE userid='".$userid."' && zamowione='0'");
if($zamid)
{
$prodexist=$DB->GetOne("SELECT ilosc FROM koszyk WHERE prodid='".$_POST['przyc_k']."' && zamid='".$zamid."'");
if($prodexist){
mysql_query("UPDATE koszyk SET ilosc='".$prodexist."'+1 WHERE prodid='".$_POST['przyc_k']."' && zamid='".$zamid."'");}
else {mysql_query("INSERT INTO koszyk (prodid, zamid, ilosc) VALUES ('".$_POST['przyc_k']."', '".$zamid."', '1')");}
}
else
{
mysql_query("INSERT INTO zamowienia (userid, zlozone) VALUES ('".$userid."', '".time()."')");
$zamid=mysql_insert_id();
mysql_query("INSERT INTO koszyk (prodid, zamid, ilosc) VALUES ('".$_POST['przyc_k']."', '".$zamid."', '1')");
}
}
}
if($userid){$zam=$DB->GetOne("SELECT id FROM zamowienia WHERE userid='".$userid."' && zamowione='0'");
$www=mysql_query("SELECT SUM(ilosc) AS TotalIlosc, SUM( cenasb * ilosc ) AS TotalWart FROM koszyk k LEFT JOIN cennik c ON c.prodid = k.prodid WHERE zamid='".$zam."'");
$ww=mysql_fetch_array($www);
}
?>
oraz część centralna w której ładuje się zawartość podstron modules i templates

konto.php w skrócie

<form>

<?/*<form name="zform" method="post" action="?id=<? echo $id; ?>" enctype="multipart/form-data">*/?>
<tr>
<td colspan="3">
<table width="100%" border="0">
<tr height="100px" class="large">
<td width="50%" colspan="2">Produkt:</td>
<td>Dostępność:</td>
<td nowrap>Cena / szt.</td>
<td>Ilość:</td>
<td>Wartość:</td>
<td></td>
</tr>
<?
$bbb=mysql_query("SELECT k.id AS kid, k.prodid, k.ilosc, pr.nazwa, d.nazwa AS Dostep, p.*, p.id AS produktid, p.nazwa AS tytul, IF(c.rabat2!=0, c.cenapb, c.cenasb) AS cena FROM zamowienia z LEFT JOIN koszyk k ON z.id=k.zamid LEFT JOIN produkty p ON p.id=k.prodid LEFT JOIN cennik c ON c.prodid=p.id LEFT JOIN producent pr ON pr.id=p.producent_id LEFT JOIN dostepnosc d ON d.id=p.dostep WHERE z.zamowione='0' && z.userid='".$userid."'");
while($bb=mysql_fetch_array($bbb))
{
$zdj=$DB->GetOne("SELECT nazwa FROM zdjecia WHERE prodid='".$bb['produktid']."' && glowne=1");
echo $bb['produktid'];
?>
<tr height="100px">
<td align="center"><img style="max-width:100px; max-height:100px;" src="photos/h200/<?=$zdj;?>"/></td>
<td width="50%" class="green"><?=$bb['tytul'];?></td>
<td align="center"><?=$bb['Dostep'];?></td>
<td align="center"><?=$bb['cena'];?></td>
<td align="center">
<input type="text" name="il" size="3" value="<?=$bb['ilosc'];?>"/>
<input type="hidden" name="przyc_u" value="<?=$bb['produktid'];?>">
<input type="hidden" name="usr" value="<?=$userid;?>">
<input type=image alt="Zwiększ" src="images/up.jpg" value="<?=$bb['produktid'];?>" id="upk" onclick="return false;"/> <? /*tu ma być cudo zwiększające ilość w bazie o 1*/ ?>
</td>
<td align="center"><b><?=$bb['ilosc']*$bb['cena'];?> zł</b></td>
<td><a href="java script: potwierdz('id=<? echo $id; ?>&del=<?=$bb['kid'];?>', 1, '', '');"><img src="./images/del.gif" alt="Usuń" align="left"></a></td>
</tr>
<?
}
?></table>
</td>
</tr>
</form>

no i produktykk.php do którego jest odwolanie w head

<?
if ($_POST['przyc_u'])
{

$up=$DB->GetOne("SELECT k.id FROM zamowienia z LEFT JOIN koszyk k ON z.id=k.zamid WHERE z.zamowione='0' && z.userid='".$_POST['usr']."' && k.prodid='".$_POST['przyc_u']."'");
if($up)
{
mysql_query("UPDATE koszyk SET ilosc=ilosc+1 WHERE id='".$up."'");
}
}
?>


no i o tototo nie działa sad.gif
oczywiście kolejna rzecz to, że przycisk zwiekszający jest w pętli i zastanawiam się czy nie powinien mieć zmiennej nazwy
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.