Autor Zpráva
Generation
Profil *
Zdravím,

musím se přiznat že s JS neumím a s ajaxem už vůbec.
Chtěl bych někoho poprosit jestli by mi mohl pomoct popřípadě napsat(píši to na rovinu)
ajaxový script abych mohl přes něj odesílat a následně získávat data do databáze.

Následující scripty:
Form:
<form action="kontrola.php"method="post"> 
<input type="hidden" value="<?php echo $result['id']; ?>" name="id"> 
<input type="hidden" value="<?php echo $result['Web']; ?>" name="kontrola"> 
<input class="tlacitko" type="submit" value="Check" name="checklinks" class="button" /><!--<input type="reset" value="Clear" class="button">--> 
</form>
kontrola.php:

<?php 
  $bl=$_SERVER['HTTP_REFERER']; 
require "settings.php"; 
$kid = $_POST['id']; 
$url = @$_POST['kontrola']; 
echo $url; 
if ($url == ""){ 
echo "Invalid URL(s)"; 
} else { 
$url = trim($url); 
$url = explode(" ", $url); 
$url = implode("\n", $url); 
$url = explode("\n", $url); 
$url = array_unique($url); 
  
foreach ($url as $urls){ 
$rsurls = @file_get_contents($urls); 
if (preg_match("/#download/", $rsurls)){ 
$pos1 = strpos($rsurls,">| "); 
$pos2 = strpos($rsurls," KB"); 
echo substr($rsurls)." ";  
$import="UPDATE `zahranicni_3` SET `kontrola`=1 WHERE id=".$kid.""; 
    mysql_query($import) or die(mysql_error()); 
} else { 
$import1="UPDATE `zahranicni_3` SET `kontrola`=2 WHERE id=".$kid." "; 
    mysql_query($import1) or die(mysql_error()); 
   
} 
} 
} 
  header("Location: $bl"); 
?>
Budu moc vděčný.
mimochodec
Profil
Php na stránce s výpisem zboží:
  echo "<img class='ruka' src='kosik.gif' title='Koupit' onclick='zbozishop(".$zaznam2["ID"].")'>";
  echo "<span id='zb".$zaznam2["ID"]."'>".$zaznam2["stav"]."</span>";

JS:
var xmlhttp;

function GetXmlHttpObject() {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  }

  if (window.ActiveXObject) {
    return new ActiveXObject("Microsoft.XMLHTTP");
  }

  return null;
}


function zbozishop(id) {
  xmlhttp=GetXmlHttpObject();
  if (xmlhttp==null) {
    alert ("Browser does not support HTTP Request");
    return;
  }

  var url="ax.php?koupit="+id;
  
  xmlhttp.onreadystatechange=zbozishopdone;
  xmlhttp.open("GET",url,true);
  xmlhttp.send(null);
}

function zbozishopdone() {

  if (xmlhttp.readyState==4) {
    var rett = xmlhttp.responseText;

    if (rett!="") {
    
      rett_arr = rett.split("//");
      
      var id = rett_arr[0];
      var stav = rett_arr[1];

      el=document.getElementById("zb"+id);
      el.innerHTML = stav;

    }
  }
}

php soubor ax.php (přímo ten soubor si nikdo neotvírá. Je důležité nezapomenout přilinkovat připojení k databázi a hlídat session při akcích, ke kterým nepřihlášený nemá mít přístup):

  if (isset($_GET['koupit'])) {

    $id = $_GET['koupit'];

    $q ="UPDATE zbozi SET veshopu=(veshopu-1) WHERE ID =".$id;
    $ret=mysql_query($q);

    $qry = "SELECT veshopu FROM zbozi WHERE ID=".$id;
    $res = mysql_query( $qry);
    $num = mysql_num_rows($res);
    
    if ($num > 0 ) {
      while ($ret=MySQL_Fetch_Array($res)):
        $vshopu = $ret["veshopu"];
      endwhile;
    };

    $ret = $id."//".$vshopu;
    
    echo $ret;
  }

Vytáhl jsem to z jednoho projektu a trochu to zjednodušil, aby to bylo přehlednější. Snad jsem tam nenasekal chyby. Všechno se dá myslím jakžtakž pochopit, snad až na funkci GetXmlHttpObject. Tu chápat nemusíš, prostě ji takto použij.

V tom xmlhttp.readyState projde po sobě několik hodnot, které indikují stav komunikace s tím php. Stav 4 znamená, že to úspěšně skončilo. Není tady ošetřena eventualita, že by to skončilo chybou. Když víš, že čekání na to php bude delší než řekněme sekundu, tím JS se nějakému img přiřadí jako src nějaké to kolečko a pak při stavu 4 se zase zruší.

Dvě lomítka jsou tak trochu nepěkná věc, řešící předání dvou hodnot ve směru php > js. Pokud ti stačí jedna hodnota, samozřejmě to nepotřebuješ spojovat a pak v JS zase splitovat. Naopak když se těch hodnot má předávat nějak víc, existuje řešení, kterým se předává nikoliv řetězec, ale xml.

Konkrétně tvůj kód se mi zkoumat nechce, tohle je ukázka, jak se dá ajax použít. Určitě to pochopíš a s úspěchem použiješ.
Generation
Profil *
mimochodec:
Já ti velmi děkuji za vyčerpávající odpověď.
Ovšem vůbec nevím jak upravit ten js aby dělal přesně to co potřebuji.


Tak funguje mi toto:
<form id='userForm'>
<input type="hidden" value="<?php echo $result['id']; ?>" name="id">
<input type="hidden" value="<?php echo $result['Web']; ?>" name="kontrola">
<input type='submit' value='Submit' />
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js "></script>
<script>
$(document).ready(function(){
    $('#userForm').submit(function(){

        $.ajax({
            type: 'POST',
            url: 'kontrola.php',
            data: $(this).serialize()
        })
        return false;
 
    });
});
</script>

Ovšem nevím jak to udělat aby to i získalo data.
mimochodec
Profil
Generation:
data: $(this).serialize()

Co je v tomhle, když to vypíšeš?
Generation
Profil *
mimochodec:
Já nevím, tenhle script jsem našel.
Jak to mám vypsat?
Provede to co potřebuji, tzn. provede to ten php script.
Je mi jasné že musím do toho php přidat select z databáze a následně ho vypsat ajaxem ale nevím jak.
rafej
Profil
Tady je odkaz na stránku, kde máš přesně vysvětlenou práci ajaxu a jak s ním začít pracovat. Je to popsané do detailu, víc to snad už ani nejde.
Jak začít - Ajax
mimochodec
Profil
Generation:
Je mi jasné že musím do toho php přidat select z databáze a následně ho vypsat ajaxem ale nevím jak.

Myslím, že se trochu ztrácíš v pojmech. AJAX = konstrukce složená ze serverové části (v tomto případě php) a javascriptu. Ta javascriptová část, tak jak jsem ji popsal já, je trochu složitější, ty používáš jquery, čímž se to pro tebe zjednodušuje. Naopak to php je naprosto standarní. Jestli v php děláš, nevím, s čím máš problém. Píšeš, že se to provede. Vidím tam echo, nejspíš se nějak vypíšou nějaké url nebo co. Takže jde jen o to v tom jquery tu vrácenou hodnotu někde chytit a alertem vypsat. Možná se pletu, ale mám pocit, že nemáš problém s ajaxem, ale s jquery. S tím ti neporadím, jquery nemám rád a používám ho jen za mohutné podpory googlu.
Generation
Profil *
mimochodec:
Konečně jsem pochopil tvůj kód, nyní už snad nebudu mít problém ho použít.
Výsledek sem vložím.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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