Autor Zpráva
miskith
Profil
Zdravím. Sice AJAX patří do javascriptu, ale já potřebuji AJAX ,,spojený" s PHP.
Chtěl bych se zeptat, jak udělat toto:
Mám obrázek, který odkazuje třeba na http://www.google.cz a já potřebuju, aby se při kliknutí přesměrovalo na ten web a zároveň se do databáze přičetlo kliknuto. Potřeboval bych, aby to vyvolalo toto:

function banner_click($banner_id, $banner_clicks, $banner_buy_clicks) {
 if ($banner_clicks+1>=$banner_buy_clicks){$change_status = ", banner_status=0";} else {$change_status = "";}
  $result = mysql_query("UPDATE ".DB_BANNERS." SET banner_clicks=banner_clicks+1".$change_status." WHERE banner_id=".$banner_id."");
}



Jde to nějako? Pokud ano, byl bych vděčný, kdybyste mi někdo poradil/napsal script. Děkuji.
Nox
Profil
ajax je JS spojený s PHP (obvykle)

obrázku přidáš akci při události onclick která zavolá soubor php, ve kterém se bude volat tvoje funkce
miskith
Profil
To sem měl a ono to zapisovalo pokaždé (i pouze při zobrazení) do databáze jako bych kliknul.

EDITED: Ještě jednou sem si pozorně přečetl cos napsal a měl sem to trochu jinak...zkusim ;)
EDITED2: Asi nic...pořád mi to vepisuje i při zobrazení
EDITED3: Zkusil sem dát jednoduchou věc. Prostě obyčejnej alert a ten mi taky naskočil při načtení stránky.
Nox
Profil
Asi...to máš špatně :) ...nejlíp bude když dáš odkaz
miskith
Profil
web...ale je to pouze web na ,,vývoj"

Jinak už si sem úplně jistej, že mám blbost v kódu...ale JS neumim, takže si chybu nedokážu opravit, proto bych tě chtěl poprosit, abys mi nenadával ani se mi nesmál :D...


<?php
if (!defined("IN_FUSION")) { die("Access Denied"); }

function banner_click($banner_id, $banner_clicks, $banner_buy_clicks) {
 if ($banner_clicks+1>=$banner_buy_clicks){$change_status = ", banner_status=0";} else {$change_status = "";}
  $result = dbquery("UPDATE ".DB_BANNERS." SET banner_clicks=banner_clicks+1".$change_status." WHERE banner_id=".$banner_id."");
}

$result = dbquery("SELECT * FROM ".DB_BANNERS." WHERE banner_status=1 ORDER BY RAND() LIMIT 1");
if ($num = dbrows($result)!=0){
$banner = dbarray($result);

function check_banner($banner) {
	if ($banner['banner_shows']==$banner['banner_buy_shows'] AND $banner['banner_buy_shows']!=0){
  $result = dbquery("UPDATE ".DB_BANNERS." SET banner_status=0 WHERE banner_id=".$banner['banner_id']."");
  $banner = dbarray(dbquery("SELECT * FROM ".DB_BANNERS." WHERE banner_status=1 ORDER BY RAND() LIMIT 1"));
  if ($num = dbrows($result)!=0){check_banner($banner);}
  }
elseif ($banner['banner_clicks']==$banner['banner_buy_clicks'] AND $banner['banner_buy_clicks']!=0){
  $result = dbquery("UPDATE ".DB_BANNERS." SET banner_status=0 WHERE banner_id=".$banner['banner_id']."");
  $banner = dbarray(dbquery("SELECT * FROM ".DB_BANNERS." WHERE banner_status=1 ORDER BY RAND() LIMIT 1"));
  if ($num = dbrows($result)!=0){check_banner($banner);}
  }
else {
  include LOCALE.LOCALESET."infusions/banner_system_panel/banner_system_panel.php";
  opentable($locale['200']);
  echo "<table width='100%'><tr><td align='center'><a href='".$banner['banner_url']."' onclick='".banner_click($banner['banner_id'], $banner['banner_clicks'],$banner['banner_buy_clicks'])."'><img src='".$banner['banner_image']."' alt='".$banner['banner_name']."'".($banner['banner_title'] != "" ? " title='".$banner['banner_title']."'" : "")."></a></td></tr></table>\n";
  if ($banner['banner_shows']+1 == $banner['banner_buy_shows']){$change_status = ", banner_status=0";} else {$change_status = "";}
  $result = dbquery("UPDATE ".DB_BANNERS." SET banner_shows=banner_shows+1".$change_status." WHERE banner_id=".$banner['banner_id']."");
  closetable();}
  }
check_banner($banner);
}
?>


PS: Nediv se, že tam sou divné funkce jako třeba dbquery, ale je to panel pro CMS...konkrétně pro PHP-Fusion.
miskith
Profil
tak už sem to vyřešil...pomohl mi tento návod... pošlu sem kód a pokud se někomu bude chtít, mohl by se na něj kouknout a napsat mi, jestli ta nemám nějaký zbytečnosti navíc ;).

+ Dalo by se nějako ošetřit, že když někdo nakliká 50x na obrázek, tak se to započítá jen jednou? (Nějako jinak než zapisováním IP do db)

//Add click
echo "<script language='JavaScript' type='text/javascript'>\n";
echo "var xmlhttp;\n";

echo "function banner_click(bannerid, bannerclicks, bannerbuyclicks)\n";
echo "{\n";
echo "xmlhttp=GetXmlHttpObject();\n";
echo "if (xmlhttp==null)\n";
echo "  {\n";
echo "  return;\n";
echo "  }\n";
echo "var url='".INFUSIONS."banner_system_panel/banner_click.php';\n";
echo "url=url+'?bannerid='+bannerid;\n";
echo "url=url+'&amp;bannerclicks='+bannerclicks;\n";
echo "url=url+'&amp;bannerbuyclicks='+bannerbuyclicks;\n";
echo "xmlhttp.onreadystatechange=stateChanged;\n";
echo "xmlhttp.open('GET',url,true);\n";
echo "xmlhttp.send(null);\n";
echo "}\n";

echo "function stateChanged()\n";
echo "{\n";
echo "if (xmlhttp.readyState==4)\n";
echo "{\n";
echo "document.getElementById('txtHint').innerHTML=xmlhttp.responseText;\n";
echo "}\n";
echo "}\n";

echo "function GetXmlHttpObject()\n";
echo "{\n";
echo "if (window.XMLHttpRequest)\n";
echo "  {\n";
  // code for IE7+, Firefox, Chrome, Opera, Safari
echo "  return new XMLHttpRequest();\n";
echo "  }\n";
echo "if (window.ActiveXObject)\n";
echo "  {\n";
  // code for IE6, IE5
echo "  return new ActiveXObject('Microsoft.XMLHTTP');\n";
echo "  }\n";
echo "return null;\n";
echo "}\n";
echo "</script>\n";
//End add click

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: