[JS+PHP] lus met increment

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb niet zo veel ervaring met programmeren maar beetje bij beetje lukt het wel...
Daarbij heb ik nu een probleem waarbij ik nog niet tot een oplossing ben gekomen, ook niet na het nodige googl'en + gotten ;(

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
32
33
34
35
36
37
38
<SCRIPT language="JavaScript">

<?php

$dbhost = 'xxxx';
$dbuser = 'xxxx';
$dbpass = 'xxxx';
$dbname = 'xxxx';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);

$index = 0;

?>

var roepnaam = new Array();
var i =0;

while (i<7)
{

    <?php
    $index++;
    $query=mysql_query("SELECT * FROM repeaters WHERE id='$index'");
    $query_row=mysql_fetch_array($query);
    ?>
    
    roepnaam[i]= "<?php echo($query_row[roepnaam]); ?>";


    document.write(roepnaam[i]);

    i++;

}

</SCRIPT>


Hiermee wil ik dus een 6tal rijen uit mijn database halen. De selectie gebeurt door middel van 'id' die de primary key is. De database is in feite statisch en zal slecht paar keer per jaar manueel aangepast worden.
De data van de database word dan opgesplits in verschillende array's in JS.

Zoals te zien is in de code wordt '$index' ingesteld op 0.
In de lus wordt deze waarde vermeerderd met 1. En dat werkt de eerste keer dat hij de lus doorloopt dan blijft '$index' blijkbaar plakken op 1 en loopt hij niet verder naar 2,3,4,...

Kan het mogelijk zijn dat php de lus in JS niet ziet?

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
PHP en Javascript op deze manier door elkaar gebruiken gaat niet werken. Eerst wordt de PHP uitgevoerd op de server, en daarna pas wordt de Javascript uitgevoerd bij de client. Je moet dus een andere oplossing gebruiken (het loopje uitvoeren in PHP en niet in JS).

[ Voor 9% gewijzigd door Noork op 27-07-2008 15:34 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Noork schreef op zondag 27 juli 2008 @ 15:32:
PHP en Javascript op deze manier door elkaar gebruiken gaat niet werken. Eerst wordt de PHP uitgevoerd op de server, en daarna pas wordt de Javascript uitgevoerd bij de client. Je moet dus een andere oplossing gebruiken.
dat vreesde ik al :| blijkbaar wordt de code dan niet 'die-hard' sequencieel uitgevoerd...

Goed ik zal dan eens proberen dit uit te voeren in PHP hopelijk wordt dan mijn JS teller wel aangepast..

[ Voor 9% gewijzigd door Verwijderd op 27-07-2008 15:37 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op zondag 27 juli 2008 @ 15:35:
[...]


dat vreesde ik al :| blijkbaar wordt de code dan niet 'die-hard' sequencieel uitgevoerd...

Is er dan een eenvoudige vervanger voor mijn probleem?
Juh die is er. Gewoonweg een LIMIT meegeven aan de SQL-query. Het loopje uitvoeren in php. B.v. op deze manier:
code:
1
2
3
4
5
$query = "SELECT * FROM tabel LIMIT 6";
$myresult = mysql_query($query,$connection); 
while($object = mysql_fetch_object($myresult)) {
     echo $object->kolom;
}


Bovenstaand script maakt gebruik van fetch_object, maar fetch_array kan b.v. ook. Zie de documentatie van php.

[ Voor 3% gewijzigd door Noork op 27-07-2008 15:39 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Waarom wil je dit met javascript doen?

PHP:
1
2
3
4
5
6
7
$strSql = 'SELECT * FROM repeaters';
$resSql = mysql_query();

while($arrSql = mysql_fetch_assoc($resSql))
{
    echo $arrSql['roepnaam'];
}


Let erop dat roepnaam met quotes geschreven wordt, want zonder geeft dit notices (develop dan ook met E_ALL als errorsetting).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Cartman! schreef op zondag 27 juli 2008 @ 15:39:
Waarom wil je dit met javascript doen?
Omdat de data uit de SQL database moet verwerkt worden in google maps. Daarvan is de programmeertaal nu eenmaal javascript ...

Alvast bedankt voor de hints, ik zal eens zien wat ik er mee kan doen. Ik post dan wel een follow-up.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Dan kun je toch gewoon dit doen:

PHP:
1
2
3
4
5
$i = 0;
// loop start
echo 'roepnaam[' . $i . '] = "' . $arrSql['roepnaam'] . '"';
$i++;
// loop eind


edit: ik vind het wel een beetje basic, lees eens wat tutorials voor beginners...

[ Voor 21% gewijzigd door Cartman! op 27-07-2008 16:17 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Cartman! schreef op zondag 27 juli 2008 @ 16:16:
edit: ik vind het wel een beetje basic, lees eens wat tutorials voor beginners...
Je mag dat basic vinden. Maar zoveel verschilt dat nu toch niet...
lus in JS <=> lus in php.
En de andere info vindt ik meer weetjes dan iets anders, trouwens zijn de meeste beginners vragen wel in zogezegde tutorials te vinden. Net zoals in de tutorials staat dat $index++; incrementeerd. Maar wanneer je dit als code binnen een JS lus gebruikt er wel niet zo maar bij vermeld staat.
Goede tutorials zijn ook niet zo maar te vinden, want ze behandelen meestal enkel maar de code zelf en bij php ook wel veel in combinatie met SQL.

Goed nu weet ik gewoon dat phpcode direct op server wordt uitgevoerd, dan kan ik daar nu naar toe programmeren.
Cartman! schreef op zondag 27 juli 2008 @ 16:16:
Dan kun je toch gewoon dit doen:

PHP:
1
2
3
4
5
$i = 0;
// loop start
echo 'roepnaam[' . $i . '] = "' . $arrSql['roepnaam'] . '"';
$i++;
// loop eind
Die php kan toch blijkbaar niet aan mijn 'roepnaam'-array in JS... dus krijg ik niet veel op het scherm

[ Voor 24% gewijzigd door Verwijderd op 27-07-2008 19:10 ]


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Weten dat PHP in wezen niks anders doet dan platte tekst uitstampen voor de browser is toch echt wel bijzonder basic hoor.

Schrijf eerst eens voor jezelf uit hoe de JS precies uit moet zien (zonder het uit de DB te trekken), zorg dat dit werkt, en maak er dan een php script van, als je JS per se dynamisch gegenereerd moet worden.

[ Voor 46% gewijzigd door Grijze Vos op 27-07-2008 19:26 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op zondag 27 juli 2008 @ 18:51:
[...]
Die php kan toch blijkbaar niet aan mijn 'roepnaam'-array in JS... dus krijg ik niet veel op het scherm
Weet je uberhaupt wel wat je aan het doen bent? :) Ik zou je toch echt wat meer verdiepen in de basis van PHP en JS.

Je kunt niet op deze manier variabelen van Javascript opvragen in PHP. Zoals ik al zei, eerst wordt de PHP uitgevoerd en dan pas de Javascript. PHP kan dus niks met variabelen in JS.

Roepnaam is toch hier gewoon een kolom in je database? Dan hoef je toch helemaal niks met JS te doen? En als het wel moet, b.v. iets uit je db halen op basis van de roepnaam, dan moet je een variabele sturen naar een pagina waar php wordt uitgevoerd. b.v. pagina.php?roepnaam=Pietje. Roepnaam kun je op deze manier wel uitlezen in php met behulp van $roepnaam = $_GET['roepnaam'];

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Hmmja, hij heeft gelijk ja. Het is een echte beginners vraag. Voor jou lijkt misschien de code op elkaar maar waar de code wordt uitgevoerd is toch echt een enorm verschil en niet te vergeten: de basis van beide talen. Javascript wordt op door de browser uitgevoerd, PHP alleen door de server. Java en PHP kunnen dus niet bij elkaar's variabelen. Je kan wel javascript laten genereren door PHP, en dat is wat Cartman! je laat zien.
Als je dat verschil nog niet helemaal helder hebt is het denk ik verstandiger om nog wat andere dingen uit te proberen i.p.v. dit soort zaken direct te willen, he hebt ook eerst leren kruipen voordatje kon lopen ;)

[ Voor 20% gewijzigd door Creepy op 27-07-2008 22:34 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Grijze Vos schreef op zondag 27 juli 2008 @ 19:25:
Weten dat PHP in wezen niks anders doet dan platte tekst uitstampen voor de browser is toch echt wel bijzonder basic hoor.

Schrijf eerst eens voor jezelf uit hoe de JS precies uit moet zien (zonder het uit de DB te trekken), zorg dat dit werkt, en maak er dan een php script van, als je JS per se dynamisch gegenereerd moet worden.
De JS staat zo goed als volledig op punt. Alleen moet ik de JS arrays met de gegevens van de database kunnen vullen.

Zie http://repeater.on8tk.com (nu stand-alone voor latere integratie in andere website)
Je kan daar de broncode opvragen en dan zie je dat alle pushpins hard geprogrammeerd zijn. Die informatie zou in feite uit een database moeten komen.

Ik heb gekozen voor PHP om dat deze blijkbaar het gemakkelijkse omgaat met MySQL. En dan stootte ik dus op het probleem van variabelen overgeven van PHP<>JS.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Je wil gewoon niet begrijpen dat PHP een serverside taal is en JS een clientside taal volgens mij. Je maakt met PHP je JS array en in JS spreek je die JS array pas aan. Meer dan dat is t niet.

Acties:
  • 0 Henk 'm!

  • ari
  • Registratie: November 2007
  • Laatst online: 01-08 22:36

ari

Verwijderd schreef op zondag 03 augustus 2008 @ 18:20:
De JS staat zo goed als volledig op punt. Alleen moet ik de JS arrays met de gegevens van de database kunnen vullen.

Zie http://repeater.on8tk.com (nu stand-alone voor latere integratie in andere website)
Je kan daar de broncode opvragen en dan zie je dat alle pushpins hard geprogrammeerd zijn. Die informatie zou in feite uit een database moeten komen.

Ik heb gekozen voor PHP om dat deze blijkbaar het gemakkelijkse omgaat met MySQL. En dan stootte ik dus op het probleem van variabelen overgeven van PHP<>JS.
Je kunt geen variabelen 'overgeven' van PHP naar Javascript, of andersom. Een variabele die je in PHP aanmaakt, bestaat niet buiten PHP. Wat je binnen PHP doet, blijft binnen PHP. Hetzelfde geldt voor Javascript: wat je binnen Javascript doet, blijft binnen Javascript.

PHP is een server-side taal. De code wordt uitgevoerd op de server. Daarna wordt de output (de tekst, niet de variabelen) verstuurd naar de browser. De rest (die variabelen) verdwijnt.

Javascript is een browser-side taal. De code wordt gelezen uit de output (de tekst die hij van de server toegestuurd krijgt), en daarna uitgevoerd. Javascript weet dus niet dat er zoiets bestond als PHP, en al helemaal niet wat er in PHP's variabelen zat. (Inderdaad verleden tijd, want tegen de tijd dat Javascript begint is PHP allang klaar en afgesloten.)

Neem nu de volgende code (gejat van Cartman! en aangepast):
PHP:
1
2
3
4
5
6
7
$i = 0;
$arrSql['roepnaam'] = 'Senny';
echo 'roepnaam[' . $i . '] = "' . $arrSql['roepnaam'] . '";';

$i = 1;
$arrSql['roepnaam'] = 'Cartman!';
echo 'roepnaam[' . $i . '] = "' . $arrSql['roepnaam'] . '";';


Bedenk nu wat je op je scherm zult krijgen als dit wordt uitgevoerd en schrijf dat op papier. Ga ook na waarom er een tweede puntkomma staat, en waarvoor die nuttig kan zijn. Voer daarna pas de code echt uit en bekijk de verschillen met wat je opschreef. Ga na waardoor die verschillen ontstonden.

Verder heeft Cartman! gelijk, en heeft hij met z'n stukken code het antwoord al helemaal gegeven.
Tip: combineer zijn beide stukken code. En je hebt twee loops nodig: één in PHP en daarna één in Javascript (om je array uit te lezen).

Meer kan ik niet uitleggen zonder de daadwerkelijke code hier neer te plempen.

edit:
Grijze Vos geeft duidelijk aan wat PHP precies doet, en smeet ook een erg bruikbare tip neer

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

ari schreef op maandag 04 augustus 2008 @ 00:36:
[...]


Je kunt geen variabelen 'overgeven' van PHP naar Javascript
Dat is wat kort door de bocht - je kunt in PHP alle Javascript genereren die je wilt, inclusief variabelen en alles.
HTML:
1
2
3
4
5
6
7
<?php
  $query = mysql_query('select name from table where id = 684') or die(mysql_error());
  $row = mysql_fetch_array($query);
?>
<script type="text/javascript">
alert('<?=$row[0] ?>');
</script>

edit:
vergelijkbaar met wat je al aangeeft, maar het gaat er iig om dat je van PHP naar JS wel kunt passen wat je wilt, andersom idd niet

[ Voor 12% gewijzigd door curry684 op 04-08-2008 01:02 ]

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • ari
  • Registratie: November 2007
  • Laatst online: 01-08 22:36

ari

Je kunt inderdaad met PHP alle Javascript code genereren die je wilt. En ook de waardes van variabelen doorgeven, zoals je doet in je voorbeeld. Alleen kan Javascript niets met de PHP-variabele $row, tenzij je met PHP Javascript-code genereert zodat die informatie overgenomen kan worden.

Ik probeer uit te leggen dat server en client twee compleet gescheiden werelden zijn, omdat de TS dat duidelijk niet doorheeft.

offtopic:
Andersom kan trouwens ook, met een Ajax-request

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Cartman! schreef op zondag 03 augustus 2008 @ 19:42:
Je wil gewoon niet begrijpen dat PHP een serverside taal is en JS een clientside taal volgens mij. Je maakt met PHP je JS array en in JS spreek je die JS array pas aan. Meer dan dat is t niet.
Toch wel. Ik ben ook niet dom te noemen.

Alleen gaf Grijze Vos me ook als Tip van maak eerst je JS volledig werkende en ga dan verder. Ik wou deze info meegeven omdat zo het probleem misschien duidelijker werd.

Ik zal er wat verder op kauwen, groeten & bedankt aan allen.

ps: aangezien het al redelijk offtopic (lus+incr) begint te gaan mag er een slotje op, ik los het wel op

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik zeg ook helemaal niet dat je dom bent, tuurlijk niet. Alsof de mensen die je tips geven alles in 1 keer konden (ik zal t vast verklappen; ik niet iig). Grijze Vos gaf die tip zodat je eerst in JS ziet hoe het daar moet zijn en je zorgt met PHP alleen maar dat de JS array wordt opgebouwd zoals je die nodig hebt (en zoals ie nu is in t voorbeeld). Ik krijg alleen het idee dat je de scheiding tussen PHP en JS niet ziet en dat is iets wat je eerst door zult moeten krijgen voordat je kunt maken wat je wilt.

En het topic hoeft niet dicht, dit is je probleem en daarmee proberen we je t helpen. Als je nog vragen hebt dan kun je die altijd stellen natuurlijk, daar is t voor. Alleen de bedoeling is om dat constructief te doen waarbij je een klein voorbeeld laat zien bijv. met daarbij wat er precies niet werkt. Succes en laat nog even weten of t gelukt is :)

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
:? Jaja..

PHP:
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
<script type="text/javascript">
<?php

$dbhost = 'xxxx';
$dbuser = 'xxxx';
$dbpass = 'xxxx';
$dbname = 'xxxx';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);
?>

var roepnaam = new Array();

<?php

$query=mysql_query("SELECT * FROM repeaters ORDER BY id");

while ($sqlRoepnaam = mysql_fetch_array($query))
    echo 'roepnaam['.$sqlRoepnaam[id].']= "'.addslashes($query_row['roepnaam']).'";';

?>

for (iRnIndex in roepnaam)
   document.write(roepnaam[iRnIndex]);
</script>

:?

[ Voor 12% gewijzigd door r0bert op 04-08-2008 11:14 ]


Acties:
  • 0 Henk 'm!

  • ari
  • Registratie: November 2007
  • Laatst online: 01-08 22:36

ari

r0bert, het is niet de bedoeling om het complete werkende antwoord neer te plempen. Daar leert namelijk niemand wat van.

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Maar het scheelt wel bijna twintig posts en een heleboel mensen die het topic voor niets lezen?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Het doel van GoT is niet om zo min mogelijk te lezen, het doel is om mensen te helpen in techfora en te discussieren over die onderwerpen. De TS heeft niks aan een kant en klaar voorbeeld als hij de basis niet begrijpt. Lijkt me dat je dat wel weet met bijna 2000 posts en een lidmaatschap vanaf 2001...
Pagina: 1