[PHP] Random number doet het niet na wens.

Pagina: 1
Acties:
  • 543 views

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Pykow
  • Registratie: Augustus 2007
  • Laatst online: 17-09 11:11

Pykow

Angelo OTR

Topicstarter
Beste tweakers.

Jquery kent voorgeprogrammeerde animaties, namelijk : show("slide", { direaction: "left"}, 1000)
Nu is het zo dat de gebruiker kan aangeven dat de richting willekeurig is. Dus links in rechts uit, dan weer boven in en onder uit etc. In mijn database sla ik op, dat de gebruiker voor random heeft gekozen.

Als de direction random is dan moet hij dus willekeurig een richting kiezen.Elke keer !.
Ik heb een Array aangemaakt:
code:
1
$random = array('left','right','up','down')

om een van de elementen uit mijn array te halen heb ik dus de volgende code gebruikt
code:
1
$random[rand(0,4)]

Dit geeft een random getal aan.

gehele code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
echo"if('".$direction."' == 'random')"; 
                      echo"{";
                       $random = array('left','right','up','down');
                      echo" $('#photo').hide('".$animation."',{ direction: '".$random[rand(0,4)]."' },1000,function(){ 
                              iwidth = imginfo[id][0]; iheight = imginfo[id][1];
                                 if (iwidth > iheight) { 
                                     if (iwidth > ". $maxsize .") { 
                                         ratio = iwidth / ". $maxsize ."; 
                                         document.getElementById('photo').width = ". $maxsize ."; 
                                         document.getElementById('photo').height = iheight / ratio; 
                                     } 
                                     else { 
                                         document.getElementById('photo').width = iwidth;
                                         document.getElementById('photo').height = iheight; 
                                     } 
                                 } 
                                 else { 
                                     if (iheight > ". $maxsize .") { 
                                         ratio = iheight / ". $maxsize ."; 
                                         document.getElementById('photo').height = ". $maxsize ."; 
                                         document.getElementById('photo').width = iwidth / ratio; 
                                     } 
                                     else { 
                                         document.getElementById('photo').width = iwidth; 
                                         document.getElementById('photo').height = iheight; 
                                     } 
                                 } 
                                $('#photo').attr('src','/images/'+ id +'.'+ imginfo[id][2]);
                                $('#photo').show('".$animation."',{direction: '".$random[rand(0,4)]."' },1000);               
                            });";
                      echo"}";


Het probleem:
Bij het opstarten van mijn webpagina. Heeft hij een random getal aangemaakt tussen van 0 tot en met 4 Keurig. Maar na elke fotowissel komt hij in de code hierboven en zal die dus steeds de command rand(0,4) uit moeten voeren, Maar dat gebeurd dus niet. Er wordt maar 1x een random getal gegenereerd en daarna blijft dit zo.

Hoe kan ik er voor zorgen, dat bij iedere nieuwe foto een nieuwe random getal aangemaakt wordt ?

Angelo NL / Global Cargo VTC


Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
Waarom gebruik je niet gewoon de random functie van javascript?

Je probeert nu javascript en php te mixen voor iets wat ook enkel in javascript kan.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:57

MueR

Admin Tweakers Discord

is niet lief

Jij verwacht dat na het uitprinten van deze javascript code nog php functies worden aangeroepen? Je moet even het verschil tussen server side en client side nog een keer doorlezen denk ik.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 17-09 21:58

BHR

edit: op niet goed gelezen

[ Voor 76% gewijzigd door BHR op 03-05-2010 10:48 ]

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Ik zie dat je PHP (server side) en Javascript (client side) door elkaar gebruikt.

Als je PHP uitgevoerd wordt dan wordt er inderdaad maar 1 keer de rand() functie aangeroepen (zoals het hoort).
Wat jij wilt is waarschijnlijk de Random() functie van javascript, dit in combinatie met een javascript array.

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 18-09 14:30
Als je een array van 4 indices hebt, en je genereert een getal van 0 t/m 4, heb je een kans dat je een index buiten je array probeert te vinden ;)

Acties:
  • 0 Henk 'm!

  • bindsa
  • Registratie: Juli 2009
  • Niet online
Maar na elke fotowissel komt hij in de code hierboven en zal die dus steeds de command rand(0,4) uit moeten voeren, Maar dat gebeurd dus niet.
Uit je eigen woorden blijkt dus duidelijk dat het script na een fotowissel niet in die code terechtkomt. Daar ligt je probleem. PHP werkt serverside en genereert een pagina als de client die opvraagt. JavaScript is clientside en werkt (in principe) in de browser van de client en vraagt niet elke keer een nieuwe pagina op.

Er zijn 2 manieren om je probleem op te lossen:

- Maak gebruik van AJAX requests (al lijkt me dat in jouw geval helemaal niet handig)
- Genereer met JavaScript random getallen.

Optie 2 is makkelijk en snel te implementeren, en daar zou ik dan ook voor gaan.

Acties:
  • 0 Henk 'm!

  • Pykow
  • Registratie: Augustus 2007
  • Laatst online: 17-09 11:11

Pykow

Angelo OTR

Topicstarter
math.Random dus ;) en array aanmaken met javascript. Daar had ik even niet aangedacht ;)

[ Voor 54% gewijzigd door Pykow op 03-05-2010 10:37 ]

Angelo NL / Global Cargo VTC


Acties:
  • 0 Henk 'm!

  • bindsa
  • Registratie: Juli 2009
  • Niet online
angienl schreef op maandag 03 mei 2010 @ 10:36:
aha, ik moet dus math.random gaan gebruiken.
maar ik wist niet dat ik een array kon maken met javascript ?
Arrays kan je zeker maken met JavaScript (in bijna elke serieuze programmeertaal trouwens).
Kijk hier eens naar:

http://www.w3schools.com/JS/js_obj_array.asp

Daar staat het goed uitgelegd en kan je het ook zelf even uitproberen ;)

Edit: En hou er inderdaad rekening mee dat een array begint te tellen met 0. Een array die dus loopt tot 3 heeft 4 items.

[ Voor 13% gewijzigd door bindsa op 03-05-2010 10:39 ]


Acties:
  • 0 Henk 'm!

  • Pykow
  • Registratie: Augustus 2007
  • Laatst online: 17-09 11:11

Pykow

Angelo OTR

Topicstarter
Ik weet dat ik rekening moest houden met server side en client side, maar daar had ik even geen rekening mee gehouden op dit moment.

Ik heb nu het volgende geprobeerd, misschien een typ fout of ik zit er echt helemaal naast ;)
code:
1
2
3
echo"var random=new Array('left','right','up','down');";
echo"var randomnumber=Math.floor(Math.random()*4)";
             echo" $('#photo').hide('".$animation."',{ direction: 'random[randomnumber]' },1000,function(){

Ik heb dus een array aangemaakt ( bedankt voor de link )
en een random getal laten genereren in een variable.
en math.random()*4 zou dus betekenen een cijfers van 0 tot en met 3.

Angelo NL / Global Cargo VTC


Acties:
  • 0 Henk 'm!

  • gvdh
  • Registratie: December 2009
  • Laatst online: 18:19
angienl schreef op maandag 03 mei 2010 @ 10:49:
Ik weet dat ik rekening moest houden met server side en client side, maar daar had ik even geen rekening mee gehouden op dit moment.

Ik heb nu het volgende geprobeerd, misschien een typ fout of ik zit er echt helemaal naast ;)
code:
1
2
3
echo"var random=new Array('left','right','up','down');";
echo"var randomnumber=Math.floor(Math.random()*4)";
             echo" $('#photo').hide('".$animation."',{ direction: 'random[randomnumber]' },1000,function(){

Ik heb dus een array aangemaakt ( bedankt voor de link )
en een random getal laten genereren in een variable.
en math.random()*4 zou dus betekenen een cijfers van 0 tot en met 3.
Hier zit de fout: direction: 'random[randomnumber]'
Wat je nu doet is random[randomnumber] als een string bij direction zetten. Die quotes moet weg.

Acties:
  • 0 Henk 'm!

  • bindsa
  • Registratie: Juli 2009
  • Niet online
angienl schreef op maandag 03 mei 2010 @ 10:49:
Ik weet dat ik rekening moest houden met server side en client side, maar daar had ik even geen rekening mee gehouden op dit moment.

Ik heb nu het volgende geprobeerd, misschien een typ fout of ik zit er echt helemaal naast ;)
code:
1
2
3
echo"var random=new Array('left','right','up','down');";
echo"var randomnumber=Math.floor(Math.random()*4)";
             echo" $('#photo').hide('".$animation."',{ direction: 'random[randomnumber]' },1000,function(){

Ik heb dus een array aangemaakt ( bedankt voor de link )
en een random getal laten genereren in een variable.
en math.random()*4 zou dus betekenen een cijfers van 0 tot en met 3.
Als je merkt dat iets niet werkt is het misschien slim om even te gaan debuggen. Met bijvoorbeeld FireBug voor Firefox kan je precies zien wat voor waarden er in de variabelen zitten en daarmee zou je dit soort fouten toch vrij snel kunnen oplossen lijkt me ;)

Oh ja, als je code tags gebruikt doe dan even code=php óf code=javascript. Dan is het voor ons makkelijker kijken :P

Acties:
  • 0 Henk 'm!

  • Pykow
  • Registratie: Augustus 2007
  • Laatst online: 17-09 11:11

Pykow

Angelo OTR

Topicstarter
Nee dat is het sowieso niet, want hij verwacht daar een string.
hide(slide , { direction : "stringelement"} , 1000)
stringelement kan de volgende waarde hebben: left,right,up,down.

Ik heb nu het volgende gemaakt, maar ook dit werkt niet.
PHP:
1
2
3
echo"var randdir=new Array('left','right','up','down')";
echo "var dir = randdir[Math.floor(Math.random()*randdir.length)]";       
echo" $('#photo').hide('".$animation."',{ direction: dir },1000,function(){


ik heb de variable random hernoemt naar randdir, om te verkomen dat hij de variable random als een functie ziet en ik maak nu gebruik van de array length. Zodat ik nooit buiten me index kan vallen waarschijlijk.

Angelo NL / Global Cargo VTC


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
angienl schreef op maandag 03 mei 2010 @ 11:13:
Ik heb nu het volgende gemaakt, maar ook dit werkt niet.
Ga eerst eens zelf goed debuggen, en lokaliseren waar het probleem daadwerkelijk zit. Probeer het eerst eens in een kleine test-pagina, en kijk wat het probleem is.

Als je gewoon alles in een keer goed probeert te krijgen, dan heb je inderdaad geen overzicht meer wat er nu precies mis gaat. Met de uitspraak "Maar ook dit werkt niet" zonder er bij te vermelden wat er niet zo gaat zoals je verwacht had, en wat je zelf al bedacht hebt om het op te lossen schiet niet op.

Verder kun je in het stukje code al mooi zien dat er een syntax error in het stukje code zit. Misschien is dat een copy paste error. Maar ook als dat het geval is kun je eerst gewoon gaan kijken of het PHP script wel output wat je verwacht. Als dat het geval is zul je je javascript moeten debuggen. Levert het stukje PHP niet op wat je verwacht, dan zul je dat daar moeten gaan debuggen.

We hebben je al een aantal keer gewezen op het feit dat je zelf wel wat meer aan debugging mag doen. Deze gaat dus ook weer op slot

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1

Dit topic is gesloten.