Autor Zpráva
Cakewalk
Profil
Zdravím všechny. Před časem jsem hledal nějaký návod na vytvoření scriptu, který by mi načítal náhodně obsah z databáze a po určitém intervalu ho obměňoval.
Podařilo se a funguje. Jediný problém je Explorer. V Chromu nebo Firefoxu běží vše, jak má. Poradí mi někdo, čím to je.
Používám tyto scripty.

Pro načítání z databáze:

<?php
$q=$_GET["q"];

$con = mysql_connect('localhost', 'moje.stranka.cz', '123456');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("moje_stranka_cz", $con);
define('DB_PREFIX', 'db_'); ## Do not edit ! 
define('SESSION_PREFIX', 'db_');

$sql="SELECT i.name,  i.description, i.start_price, im.*  FROM " . DB_PREFIX . "item_media im
LEFT JOIN " . DB_PREFIX . "items i ON i.item_id=im.item_id
WHERE hpfeat=1 AND closed=0 ORDER BY rand() LIMIT 3";

$result = mysql_query($sql);


while($row = mysql_fetch_array($result))
  {

  $item_link = 'http://moje.stranka.cz/items_details.php?item_id='.$row['item_id'].'';
   $items = '<table border="0">'.
   '<tr>'.
   '<td>'.
   '<div class="wrapper">'.
   '<a href="' . $item_link . '" target="_blank"><img src="' . (((!empty($row['media_url'])) ? '../thumbnail.php?pic=' . $row['media_url'] . '&w=150&sq=Y' : 'themes/' . $setts['default_theme'] . '../img/system/noimg.gif')) . '" width="150" "/></a>'.
   '<div class="description">'.
   '<p class="description_content">' . $row['name'] . '</p>'.
	'</div>'.
	'</div>'.
	'</td>'.
	'</tr>'.
	'</table>';
	
	
  
   echo $items;
  }


mysql_close($con);
?>


A pro načtení a automatickou obměnu bez reloadu stránky toto:

<html>
<head>
<script type="text/javascript">
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  } 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
	setTimeout('showUser()',6000);
    }
  }
xmlhttp.open("GET","get_items.php?q="+str,true);
xmlhttp.send();

}
window.onload=function(){
	setTimeout('showUser()',2000);}
</script>
</head>
<body>

<div id="txtHint"><b>Načítám databázi produktů...</b></div>

</body>
</html>


Problémy jsou dva.
1. v Exploreru při načtení druhého scriptu se nezobrazí nic
2. v Exploreru při načtení prvního se sice zobrazí co má, ale nenačte se style

Ukázka zde: http://aukce.allelektro.cz/slider
nebo

http://aukce.allelektro.cz/slider/get_items.php
Cakewalk
Profil
Přišel jsem na zajímavý jev.
Samozřejmě Explorer nemůže nic zobrazit, protože je chyba v zavedení CSS v PHP. Nicméně stejně nemůžu přijít na to, jak to opravit.

Ale přišel jsem na to, že když style odstraním, Explorer sice už zboží zobrazí, ale pouze dvě a ne tři a navíc neobměňuje výběr. Má sice tendenci se znovu a znovu načítat, ale je tam pořád stejný výběr. Ale když kliknu na odkaz, tak se výběr změní.

Vysvětlí mi to někdo?

Díky
Chamurappi
Profil
Reaguji na Cakewalka:
Vysvětlí mi to někdo?
Pokud vysvětlíš, v čem spočívá problém, tak možná ano.
Zatím jsem pochopil jen, že něco nějak nefunguje. Koukám na zdrojáky, vypadají v pořádku. Koukám na ukázku, ta mi také funguje. Neuvedl jsi verzi (či verze) Exploreru, ve které se údajný problém zjevuje.

Samozřejmě Explorer nemůže nic zobrazit, protože je chyba v zavedení CSS v PHP.
Zavedení CSS v PHP? Co si pod tím pojmem představuješ?
Dáváš <style> dovnitř <div>u, což je sice divné, ale nepředpokládám, že by to nějakému prohlížeči vadilo.

ale je tam pořád stejný výběr
Keš. Předpokládá se, že stejná adresa vrací stejné výsledky. Přidej do adresy náhodné smetí. (V ukázce nepozoruji změny v žádném prohlížeči, jsem za kešujícím proxy serverem.)
Cakewalk
Profil
Díky za reakci.

1. mám udělaný caption efekt na vybraných obrázcích. Explorer mi nechce akceptovat style. Jiné prohlížeče to zobrazují správně. Podle různých fór jsem to zkoušel i jinými způsoby, ale pořád stejný výsledek. Explorer prostě nechce akceptovat style pokud div zavedu v php. Pokud ho nechám v body, tak bez problémů.

2. testuji to na Exploreru 8 a 7 a pořád stejný problém. Na ostatních prohlížečích (Chrome, Firefox) bez problémů.

3. asi tuším kam míříš, ale netuším, jak to provést. Tobě se nezobrazuje změna ve výběru zboží např. v Chromu? Timeout je nastaven pracovně na 6s.
Chamurappi
Profil
Reaguji na Cakewalka:
mám udělaný caption efekt na vybraných obrázcích
Nevím, o jakém efektu je řeč. V ukázce vidím jeden <div> s ídéčkem, dynamicky dovnitř něj dáváš <style> stylující různé třídy a odstavce, které ale nikde nepoužíváš…

Explorer mi nechce akceptovat style.
Co to znamená? Jak by se projevovalo, kdyby ho akceptoval?

Jiné prohlížeče to zobrazují správně.
V jiných prohlížečích vidím totéž.

asi tuším kam míříš, ale netuším, jak to provést
Na řádku 27 sestavuješ adresu. Parametry v GETu se oddělují ampersandem. Náhodné číslo ti může vygenerovat funkce Math.random().
Cakewalk
Profil
Čteš mi myšlenky. Právě jsem to zkoušel s tou funkcí Math.random(). Už to mění, ale pořád mi Explorer načte pouze dva produkty a ne tři. Navíc odkazy mi načte pouze k prvnímu. Druhý má odkaz stejný jako první.

Ten style ještě pořeším. ******* Explorer :(
Cakewalk
Profil
No s tím style, řekněme, že to mám takto:

$sql="SELECT a.name,  a.description, a.start_price, am.*  FROM " . DB_PREFIX . "auction_media am
LEFT JOIN " . DB_PREFIX . "auctions a ON a.auction_id=am.auction_id
WHERE hpfeat=1 AND closed=0 ORDER BY rand() LIMIT 3";

$result = mysql_query($sql);


while($row = mysql_fetch_array($result))
  {


echo "<style>
div.wrapper{
	float:left; /* important */
	position:relative; /* important(so we can absolutely position the description div */ 
}
div.description{
	position:absolute; /* absolute position (so we can position it where we want)*/
	bottom:0px; /* position will be on bottom */
	left:0px;
	width:100%;
	/* styling bellow */
	background-color:black;
	font-family: \'tahoma\';
	font-size:15px;
	color:white;
	opacity:0.6; /* transparency */
	filter:alpha(opacity=60); /* IE transparency */
	-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
-webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
p.description_content{
	padding:10px;
	margin:0px;
	}
	
p.description_content h3 {
		margin:0;
		padding:0;
		color:#1DCCEF;
	}


</style>";




  $auction_link = 'http://aukce.allelektro.cz/auction_details.php?auction_id='.$row['auction_id'].'';
   $items = '<table border="0">'.
   '<tr>'.
   '<td>'.
   '<div class="wrapper"><a href="' . $auction_link . '" target="_blank"><img src="' . (((!empty($row['media_url'])) ? '../thumbnail.php?pic=' . $row['media_url'] . '&w=150&sq=Y' : 'themes/' . $setts['default_theme'] . '../img/system/noimg.gif')) . '" width="150" "/></a><div class="description"><p class="description_content">' . $row['name'] . '</p></div></div>'.
	'</td>'.
	'</tr>'.
	'</table>';
	
	
  
   echo $items;
  }


mysql_close($con);
Cakewalk
Profil
Chrome i Firefox to akceptují. Explorer nikoliv :(
Chamurappi
Profil
Reaguji na Cakewalka:
Vidím, že jsi konečně do ukázky doplnil <div> s třídou, která se snažíš stylovat. Hurá.

Chrome i Firefox to akceptují. Explorer nikoliv :(
Hm, skutečně to tak vypadá. Tak nemáš dělat takové pitomosti :-) … a nebo používej style.
Z jakého důvodu potřebuješ načítat stylopis dynamicky?
Cakewalk
Profil
No efekt je efekt...proto to dělám ;)

Snažil jsem se style načíst přes CSS, vkládat ho na začátek do hlavičky apod. Pokud byl div umístěn mimo php, styloval se správně i v Exploreru. Jak ho umístím do php, Explorer neakceptuje všechny funkce (např. velikost písma ano, barvu pozadí ne atd.).

Ještě jeden postřeh, se kterým si nevím rady.

Explorer mi někdy načte dva stejné produkty. Sice pokaždé s jiným obrázkem (pokud má produkt více obrázků), ale stejné ID. Chrome to nedělá.
Cakewalk
Profil
Tak jsem to vyřešil takto:


$sql="SELECT a.name,  a.description, a.start_price, am.*  FROM " . DB_PREFIX . "auction_media am
LEFT JOIN " . DB_PREFIX . "auctions a ON a.auction_id=am.auction_id
WHERE hpfeat=1 AND closed=0 ORDER BY rand() LIMIT 3";

$result = mysql_query($sql);


while($row = mysql_fetch_array($result))
  {
?>

<style>


div.wrapper{
	float:left; /* important */
	position:relative; /* important(so we can absolutely position the description div */ 
}
div.description{
	position:absolute; /* absolute position (so we can position it where we want)*/
	bottom:0px; /* position will be on bottom */
	left:0px;
	width:100%;
	/* styling bellow */
	background-color:black;
	font-family: 'tahoma';
	font-size:15px;
	color:white;
	opacity:0.6; /* transparency */
	filter:alpha(opacity=60); /* IE transparency */
	-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
-webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
p.description_content{
	padding:10px;
	margin:0px;
	}
	
p.description_content h3 {
		margin:0;
		padding:0;
		color:#1DCCEF;
	}


</style>



<?php
  $auction_link = 'http://aukce.allelektro.cz/auction_details.php?auction_id='.$row['auction_id'].'';
  ?>
   <table border="0"><tr><td>
   <div class="wrapper">
   <a href=<?php  echo $auction_link  ?> target="_blank">
   <img src=<?php echo (((!empty($row['media_url'])) ? '../thumbnail.php?pic=' . $row['media_url'] . '&w=150&sq=Y' : 'themes/' . $setts['default_theme'] . '../img/system/noimg.gif')) ?> width="150" border="0"/>
   </a>
   <div class="description">
   <p class="description_content"><?php echo $row['name']?></p>
   </div>
   </div>
   </td></tr></table>
	
	<?php
  
  
  }


mysql_close($con);
?>



Už se zobrazuje vše. Sice občas není pozadí za textem průhledné, ale vzhledem k tomu, že jde o Explorer, přimhouřím obě oči :D
Chamurappi
Profil
Reaguji na Cakewalka:
No efekt je efekt...proto to dělám ;)
Z jakého důvodu potřebuješ načítat stylopis dynamicky?

Jak ho umístím do php, Explorer neakceptuje všechny funkce
Přeloženo: Jak ho načítáš dynamicky (je úplně jedno jestli z PHP), Explorer nepoužije všechny vlastnosti (nejsou to funkce). A když zkoumáš, co použije a co ne, k čemu dojdeš?
Rozhodně podezřele vypadá ten nesmysl s escapovanými apostrofy u font-family.

Explorer mi někdy načte dva stejné produkty. […] Chrome to nedělá.
Na to může mít jen těžko vliv prohlížeč. Špatně testuješ. Vůbec celý tenhle dotaz je divný. Najmi si programátora.

Tak jsem to vyřešil takto
Co jsi změnil? Proč nenapíšeš, jak jsi to doopravdy vyřešil?

vzhledem k tomu, že jde o Explorer, přimhouřím obě oči :D
Proč? Lidi s Explorerem nenakupují?
Cakewalk
Profil
1. Použil jsem zjevně špatný výraz. Za to se omlouvám, ale myslel jsem to správně ;)

2. Ve stylopisu jsem zkoušel různé změny. Od velikosti písma až po průhledné pozadí.
Ten nesmysl s escapovanými apostrofy je rada jednoho "programátora", který tímto řešil problém právě stylopisu v PHP vs. Explorer.

3. Je mi jasné, že to prohlížeč neovlivňuje, nic méně to Explorer dělá a Chrome ne ;) Testuji jednoduše. Pustím a vidím. Neřeším jiné druhy testování. Osvědčilo se mi dívat se na funkčnost kódu očima uživatele. Tohle je hláška p. ......, profesora VŠB.
Programátora? Hmm tohle nebudu komentovat.

4. Viz. porovnání obou kódů výše. Změna je zjevná.

5. Už jsem se smířil, že Explorer prostě stojí za .... Je smutné, že ho používá masivní většina uživatelů. Řešení tohoto problému mne opět přesvědčilo, že Microsoft by se měl nad sebou zamyslet. Viz. tato stránka: http://css-tricks.com/examples/SlideinCaptions/

Explorer neumí zobrazit 90% triků, které zde pánové ukazují.


Ale i tak veliké díky za podnětné rady. Díky lidem jako jsi ty, toto fórum žije a s ním i mnoho desítek webových stránek. Ještě jednou díky.
Chamurappi
Profil
Reaguji na Cakewalka:
Ve stylopisu jsem zkoušel různé změny. Od velikosti písma až po průhledné pozadí.
A copak jsi zjistil? Jaký je v tom systém?
Nevím, jak na skutečné stránce, ale na své ukázce bys mohl zjistit, že část vlastností funguje jinak v quirku než ve standardním režimu.

tímto řešil problém právě stylopisu v PHP vs. Explorer
Pod pojmem „stylopis v PHP“ si představím CSS soubor generovaný prostřednictvím PHP, což funguje všude, protože prohlížeč nemá tušení, co běží na straně serveru.
Z jakého důvodu potřebuješ načítat stylopis dynamicky? Proč není přímo ve stránce, do které bys jen načítal HTML kód, jako to dělají všichni ostatní, kdo potřebují měnit dynamicky kus stránky?

Osvědčilo se mi dívat se na funkčnost kódu očima uživatele. Tohle je hláška p. ......, profesora VŠB.
Sice dobrá hláška, ale zcela nepřenositelná na ladění. Opakované uživatelské konstatování „nejde to“ nikdy nic nevyřeší, příčinu problému tím nenajdeš.

Je smutné, že ho používá masivní většina uživatelů.
Proč je to smutné? Proč by si měl tvůrce stránky utvářet nějaký emocionální vztah k prohlížečům? Je to zbytečný šum. Viz toho vlákno, půlka tvých proslovů jsou jen nářky. Měl by ses nad sebou zamyslet víc než Microsoft.

Explorer neumí zobrazit 90% triků, které zde pánové ukazují.
Tak je mají pánové udělat tak, aby fungovaly všude. Řada věcí jde zase naopak napsat tak, že fungují jen v Exploreru. Špatné učební postupy vedou ke špatným výsledkům.

Ještě jednou díky.
Rádo se stalo.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0