JS und PHP das Gleiche macht nicht das Gleiche

Riebensiel

Grünschnabel
Hallo liebe Leute,

wie meistens bei mir - ein Prob bei der Übergabe von Variablen von PHP nach JS.
Ich übergebe ein zweidimensionales Array und muss dabei einen JS Zaehler hochzählen und einen PHP Zaehler hochzaehlen.

Wenn ich in meinem JS schreibe:

"<?php $ZAEHLER++; ?>";
"<?php $ZAEHLER++; ?>";
"<?php $ZAEHLER++; ?>";
"<?php $ZAEHLER++; ?>";
"<?php $ZAEHLER++; ?>";
"<?php $ZAEHLER++; ?>";
"<?php $ZAEHLER++; ?>";
"<?php $ZAEHLER++; ?>";
"<?php $ZAEHLER++; ?>";
"<?php $ZAEHLER++; ?>";

steht die php Variable $ZAEHLER auf 9, wenn sie mit Null initialisiert war.

wenn ich in meinem JS schreibe:
for(i = 0; i < 10;i++)
{
"<?php $ZAEHLER++; ?>";
}
steht die php Variable $ZAEHLER auf 1, wenn sie mit Null initialisiert war.

Es ist logisch das Gleiche, liefert aber unterschiedliche Ergebnisse, kann mir jemand sagen, warum das so ist bzw. wie ich es bewerkstelligen kann, dass der Zähler in einer Schleife tatsächlich hochgezählt wird? Ich bin mir noch nicht mal im klaren darüber, ob es ein JS oder ein PHP Problem ist. Um bei der Datenübergabe flexibel zu sein, brauche ich eine Lösung mit einer Schleife, da ich nicht weiß, wieviele Daten zu übergeben sind.

Für sachdienliche Hinweise bin ich sehr dankbar.

Schöne Grüße aus HH

Rudolf
 
Nein, es ist nicht das Gleiche. Bei deinem ersten Codeschnipsel inkrementierst du die Variable $ZAEHLER zehnmal, beim zweiten nur einmal. Du kannst nämlich keinen PHP-Code aus JavaScript heraus aufrufen, da PHP auf dem Server, JS hingegen auf dem Client abgearbeitet wird. Dein PHP-Skript wird also erst auf dem Server abgearbeitet und die Ausgabe dann zum Client (Browser des Benutzers) gesendet. Und erst da kann dann ggf. JavaScript-Code ausgeführt werden.
 
Vielen Dank für die schnelle Antwort. Ich glaube, dass es mir nun klar ist, warum es nicht wie gewünscht funktioniert - aber das Problem ist damit nicht gelöst.

Dieses ist die entscheidende Stelle in meinem JS
Code:
myjs2dimarray= new Array();
 
myjs2dimarray[0] = new Array("<?php print(implode('","', $myphp2dimarray[0])); ?>");


$myphp2dimarray ist ein zweidimensionales Array, das mir Verzeichnispfade in der ersten Dimension und Dateinamen in der zweiten Dimension zur Weiterverarbeitung in JS liefert.

myjs2dimarray ist das Aufnahmearray in JS..
Code:
myjs2dimarray[0] = new Array("<?php print(implode('","', $myphp2dimarray[0])); ?>");
myjs2dimarray[1] = new Array("<?php print(implode('","', $myphp2dimarray[1])); ?>");
myjs2dimarray[2] = new Array("<?php print(implode('","', $myphp2dimarray[2])); ?>");

ist meine derzeitige Notlösung.So kann ich drei Verzeichnispfade und die Verzeichnisinhalte übergeben, immerhin funktioniert das wenigstens (es wäre natürlich noch etwas weiter aufbohrbar, ist aber keine "Programmiererlösung"). Ich beschäftige mich noch nicht lange mit Internetprogrammierung, und bei C/C++ oder ähnlichen Sprachen kommen solche Probleme nicht vor. Das eine kann JS nicht, das andere kann PHP nicht und die Kommunkation zwischen PHP und JS ist ein wenig sperrig.Ich möchte natürlich möglichst unbegrenzt (mal vom Speicher abgesehen) Arrayelemente übergeben können und dazu brauche ich eine Möglichkeit die Indizees von beiden Arrays hochzuzählen. Fällt jemandem dazu was ein? Vielleicht bin ich ja auch auf einem ganz falschen Weg und das gewünschte kann ganz anders gelöst werden.

Mir schwebt so etwas vor
Code:
myjs2dimarray[i] = new Array("<?php print(implode('","', $myphp2dimarray[$i])); ?>");

wobei dann i und $i inkrementiert werden sollen. Die Frage ist WIE? Oder ist mein Wunsch gar nicht realisierbar?

Ich danke Euch für Eure Geduld.

Gruß

Rudolf
 
Zuletzt bearbeitet:
Hallo Sven,

ich habe mich nur hier verschrieben, im Code ist es richtig, aber ich habe es nacheditiert, damit niemand mehr über diese Stelle stolpert. Wie Du zwei Zeilen weiter unten siehst, weiß ich wohl, wie man ein JS Array vereinbart, das ist nicht mein Problem. Mein Code läuft ja auch, ich suche nur nach einer Lösung für das Problem sowohl das JS Array als auch das PHP Array im JS zu inkrementieren oder eine andere Möglichkeit für eine unbeschränkte Übergabe zu finden. Wenn Du mir da weiterhelfen könntest, wäre ich DIr sehr verbunden..

Gruß

Rudolf
 
Meinst du so:confused:
Code:
<script type="text/javascript">
<!--
myjs2dimarray= new Array();

<?php 
for($i=0;$i<count($myphp2dimarray);++$i)
    {
    echo "myjs2dimarray[$i] = new Array('".implode("','", $myphp2dimarray[$i])."');\n";
    }
?>
//-->
</script>
 
:-) Yeehoo! Das ist es!

Viele, vielen Dank! Ein PHP Schnipsel in JS der von PHP an JS übergibt. Darauf muss man erst mal kommen. Ein kleines Problemchen gab es noch, wo ich noch ordentlich suchen musste, weil sich PHP anders verhält als JS. In einem String, der übergeben wird, gibt es ein einfaches Hochkomma (jemand heißt O' Neal). PHP interpretiert das anders als JS. Bei meiner ersten Lösung mit JS gab es bei der Übergabe kein Problem, aber für PHP hat dieses Zeichen in einem String eine andere Bedeutung. Vermutlich gibt es eine Möglichkeit PHP dazu zu bewegen, dieses Zeichen nur als Zeichen zu interpretieren, aber erstmal habe ich es einfach duch das Zeichen ` ersetzt und es funktioniert. Suuuper! Sehr schön.....

Schöne Grüsse

Rudolf
 

Neue Beiträge

Zurück