• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Success Callback um Namen Abzufragen und dann mit Daten speichern

Blubbfisch

New member
Hallo,

Allen erst mal ein Frohes Neues Jahr!

Ich bin ein absoluter Noob und habe keine Ahnung von Javascript, PHP, MySql usw.
Ich habe ein Javascript-Spiel und versuche verzweifelt entweder eine Highscore-Liste zu machen oder wenigstens den Spielernamen abzufragen und diesen mit dem Ergebnis zu speichern, damit ich es manuell verarbeiten kann.
Ich sitze daran nun schon seit über einer Woche, habe in anderen Foren um Hilfe geben, sehr viel im Netz recherchiert und mit einem Entwickler Kontakt gehabt. Alles was ich an Code habe, ist legal in gebrauch bzw. von mir.

Nun bin ich durch den Tip eines Entwicklers auf folgendes gestoßen:

Code:
<script type="text/javascript">
		    $(document).ready(function() {
		        // define your own settings
		        var mySettings = {
		            rows: 2,
		            cols: 2,
		            language: 'de',
					success: {
		                callback: function(results) { 
		                    alert('Gelöst in ' + results.moves + ' Zügen und ' +
		                        + results.seconds + ' Sekunden.');
		                }
		            }
		        };
		        // define your own texts
				var myTexts = {
		            secondsLabel: 'Sek.'
		        };
		        // call jqPuzzle with mySettings and myTexts on images with class 'myPics'
		        $('.myPics').jqPuzzle(mySettings, myTexts);
		    });
		</script>

Durch success callback wird ein Fenster mit den Ergebnissen geöffnet. Ich habe jetzt viel über die callback funktion gelesen und nur wenig verstanden. Ist es möglich mit dieser Funktion den Namen des Spielers abzufragen und zusammen mit den Resultaten Züge und Zeit in eine Datei zu speichern? Dann könnte ich selber eine Highscoreliste erstellen und auf der Seite veröffentlichen.

Vielen Dank und Grüße,

Blubbfisch
 
Wie sieht denn dein Ajax Code für das Speichern aus?

Wenn ich ehrlich bin, weiß ich nicht mal was Ajax ist :(
Bei einem anderen Javascript war ein PHP-Code für eine Highscore-Liste dabei, aber ich bekomme es nicht hin, dass das funktioniert. Das wäre als Beispiel vom Entwickler das hier: Perlscripts, Javascripts and custom software Der Code dafür liegt mir legal vor. Das mit dem Schiebepuzzle habe ich auch hinbekommen, nur den Highscore nicht. Habe auch bei dem Entwickler nachgefragt, der meldet sich aber nicht. Deshalb habe ich das andere Script genommen und dachte das mit dem Callback könnte was werden. Aber wenn Du jetzt nach Ajax fragst, kann ich das ganze wohl so langsam vergessen.
 
Das ist Ajax: Ajax (Programmierung) Du kannst damit Requests absetzen, ohne die Seite neu laden zu müssen. (Grob erklärt)

Ein Callback wird immer dann ausgelöst, wenn irgendwas anderes fertig ist. Die success Funcktion z.B. ist auch ein Callback, was dann ausgeführt wird, wenn der Request fertig ist.


Was mikdoe nun meinte war, dass es ein (serverseitiges)Script geben muss, welches die Daten speichert, z.B. ein PHP-Script.
 
D
Was mikdoe nun meinte war, dass es ein (serverseitiges)Script geben muss, welches die Daten speichert, z.B. ein PHP-Script.

Ich habe ein PHP-Script, aber mit dem komme ich nicht klar. Eines meiner Hauptprobleme ist, dass ich nicht verstehe, wie so ein PHP-Script die Daten, also in meinem Fall "Züge" und "Zeit" ausließt. Ich habe mir viel Code-Beispiele und Webseiten angeschaut, wo so etwas gemacht wird, verstehe es aber nicht. Ganz zu schweigen davon, wie ich noch zu den zwei Variablen einen Spielernamen abfragen kann. Das sieht in den Beispielen eigentlich immer ganz einfach aus, aber ich schaffe es dann nicht, es für meine Zwecke anzupassen.
 
Poste bitte mal dein PHP-Script. Dann können wir dir eventuell weiter helfen. :)
 
Zuletzt bearbeitet:
Hallo,

wie muss ein Code in PHP aussehen um auf "results.moves" und "results.seconds" zuzugreifen und diese weiter nutzen zu können?

Danke und Gruß, Blubbfisch

Code:
<script type="text/javascript">
		    $(document).ready(function() {
		        // define your own settings
		        var mySettings = {
		            rows: 2,
		            cols: 2,
		            language: 'de',
					success: {
		                callback: function(results) { 
		                    alert('Gelöst in ' + results.moves + ' Zügen und ' +
		                        + results.seconds + ' Sekunden.');
		                }
		            }
		        };
		        // define your own texts
				var myTexts = {
		            secondsLabel: 'Sek.'
		        };
		        // call jqPuzzle with mySettings and myTexts on images with class 'myPics'
		        $('.myPics').jqPuzzle(mySettings, myTexts);
		    });
		</script>
 
Zuletzt bearbeitet von einem Moderator:
Ok,

zur Info diese PHP-Scripte gehören nicht zu der success callback.

hier wird irgendwie der Spieler Name abgefragt.
submitscore.php:

PHP:
<?php
$score = $_POST[score];
?>


<html>
 <head>
  <title>Score Board</title>
 <body>
  <table>
   <tr style="height: 80;">
    <td></td>
   </tr>
   <tr>
    <td align="center">
     <form action="addscore.php" method="post">
      Name: <input type="text" name="name"><br>
      <input type="hidden" value="<?php echo "$score"; ?>" name="highscore">
      Score: <?php echo "$score"; ?><br>
      <input type="submit" value="Submit high score">
     </form>
    </td>
   </tr>
  </table>
</body>
</html>

Hier werden Spielername und Spielergebnis in die highscore.csv geschrieben
addscore.php:

PHP:
<?php
$name = $_POST['name'];
$score = $_POST['score'];
?>
<?php
@extract($_POST);
$fp = fopen('highscores.csv','a');
$content = "$name,$highscore\n";
fwrite($fp,$content);
fclose($fp);
?>
<?php include('viewscores.php'); ?>

Hier wird die highscore.csv angezeigt
viewhighscore.php:

PHP:
<html>
 <head>
  <title>Scoreboard</title>
 <body>
  <table>
   <tr style="height: 80;">
    <td></td>
   </tr>
   <tr>
    <td align="center">


<?php 
$fileContent = file("highscores.csv");   

foreach ($fileContent as $line) { 
    list($user, $result) = explode(',', $line); 
    $sort[$result] = $user; 
} 

// sort and create new arrays 
    
    krsort($sort, SORT_NUMERIC); 
 // ksort($sort); remove comments if your score is not numeric         
    $users = array_values($sort); 
    $userResults = array_keys($sort); 
            
// number of high scores to show
//e.g. to show top 10 $maxResults = 10;
//Too display all players $maxResults = count($fileContent);            
$maxResults = 10;       

for($i=0; $i<$maxResults; $i++) { 

echo "<p>$users[$i]       $userResults[$i]</p>\n"; 
            
}    
?> 


    </td>
   </tr>
  </table>
</body>
</html>

Hier noch zwei Beispiele, wie das ganze in der "Praxis" aussehen soll:

PHP:
<html>
 <head>
  <title>Score board</title>

<script>
function go(){ 
			document.forms.submitscore.score.value = 800;
			document.forms.submitscore.submit();

}
</script>
 </head>
 <body>
  <table >
   <tr style="height: 80;">
    <td></td>
   </tr>
   <tr>
    <td align="center">

<a href="#" onclick="go();">Go</a>

<form id="submitscore" method="post" action="submitscore.php" style="visibility: hidden;">
<input type="hidden" name="score" value="" style="visibility: hidden;">
<button type="submit" style="visibility: hidden;"></button>
</form>
</td>
   </tr>
  </table>
</body>
</html>

Hier mal die ganzen Dateien im Zusammenhang. Ist alles legal erworben!:

https://sloth.bootes.uberspace.de/public.php?service=files&t=cffbeee0d96b8169f90ea5ee4de5c23e

- - - Aktualisiert - - -

Hallo,

ich bin ein Stück weiter gekommen:

Code:
					success: {
		                callback: function(results) { 
		                    window.open ("https://www.*********/Spieler.php")
//		                    document.write('Gelöst in ' + results.moves + ' Zügen und ' +
//		                        + results.seconds + ' Sekunden.');
		                }
		            }
		        };

Das funktionier soweit, dass nach dem Spiel eine neue Seite geöffnet wird. Nun habe ich auf der neu geöffneten Seite:

Code:
<script type="text/javascript">
		    $(document).ready(function() {
		        // define your own settings
		       
					success: {
		                callback: function(results) { 
		                   
		                    document.write('Gelöst in ' + results.moves + ' Zügen und ' +
		                        + results.seconds + ' Sekunden.');
		                }
		            }
		        };
		        // define your own texts
				var myTexts = {
		            secondsLabel: 'Sek.'
		        };
		        // call jqPuzzle with mySettings and myTexts on images with class 'myPics'
		        $('.myPics').jqPuzzle(mySettings, myTexts);
		    });
		</script>

Leider wird hier das Ergebnis nicht ausgegeben. Woran kann das liegen?
 
*aus JS hier her verschoben*

Da ich mit PHP nichts am Hut habe kann ich dazu wenig Allgemeines sagen.
Kannst du eine konkrete Frage formulieren? Dann kann ich vielleicht zum Prinzip was antworten. Sonst müssten wir auf Julian, Rico oder jemand anderen warten.
 
document.write auf neue Seite verlinken

Hallo,

ich habe folgenden code:

Code:
 document.write('Gelöst in ' + results.moves + ' Zügen und ' +
		                        + results.seconds + ' Sekunden.')

Damit wird mir ja nur eine neue html-Seite geöffnet und der entsprechende Text oben links in die Ecke geschrieben.
Kann ich den Text auch auf eine bestimmte Seite an einen bestimmten Platz verlinken oder sogar dort an ein Objekt?

Danke und Gruß,

Blubbfisch
 
AW: document.write auf neue Seite verlinken

Du verwendest besser .innerHTML statt document.write. Denn das .innerHTML kannst du mit einem vorgeschalteten Objektselektor steuern, wie z.B. mit document.getElementById().
 
Dein Problem ist im Moment, dass du "results" in dem neuen Fenster nicht hast. window.open() ist in meinen Augen auch der falsche Ansatz, da du damit keine Parameter/Werte übergeben kannst. Wenn ich dich jetzt richtig verstanden habe, möchtest du nachdem das Spiel fertig ist, eine neue Seite öffnen und dort die Werte ausgeben. Richtig?

Zwei weitere Fragen die sich mir auftun:
- Warum so kompliziert? Warum nicht auf der gleichen Seite?
- Kannst du uns noch den Code von Spieler.php zeigen?


BTW: Versteh mich bitte nicht falsch, es ist nur wahnsinnig kompliziert sich in so ein Problem hineinzudenken. Deswegen müssen wir immer wieder nachfragen, auch wenn sich die Fragen eventuell bescheuert anhören.
 
Zuletzt bearbeitet:
AW: document.write auf neue Seite verlinken

Du verwendest besser .innerHTML statt document.write. Denn das .innerHTML kannst du mit einem vorgeschalteten Objektselektor steuern, wie z.B. mit document.getElementById().

Ok, wäre das hier dann richtig:

Code:
<script type="text/javascript">
		    $(document).ready(function() {
		        // define your own settings
		        var mySettings = {
		            rows: 2,
		            cols: 2,
		            language: 'de',
					success: {
		                callback: function(results) { 		                    
		                    [B]document.getElementById('Ergebnis').innerHTML =('Gelöst in' + results.moves + 'Zügen und' +
		                        results.seconds + ' Sekunden.');[/B]
		                }
		            }
		        };

Kann ich nurn mit z.B.
Code:
<div id='Ergebnis'</div>
den Text überall auf der Homepage aufrufen?
 
Dein Problem ist im Moment, dass du "results" in dem neuen Fenster nicht hast. window.open() ist in meinen Augen auch der falsche Ansatz, da du damit keine Parameter/Werte übergeben kannst. Wenn ich dich jetzt richtig verstanden habe, möchtest du nachdem das Spiel fertig ist, eine neue Seite öffnen und dort die Werte ausgeben. Richtig?

Ja richtig, und dann möchte ich noch dort den Namen des Spielers erfassen und das ganze speichern.

Zwei weitere Fragen die sich mir auftun:
- Warum so kompliziert? Warum nicht auf der gleichen Seite?
- Kannst du uns noch den Code von Spieler.php zeigen?

1. Ich dachte es wäre weniger kompliziert, da ja auf der seite schon das Puzzle ist. Es kann natürlich gerne auf der selben Seite ausgegeben werden.

2. Das wird schwierig, da wie Du ja siehst, ich keine Ahnung habe, benutze ich den "WYSIWYG Web Builder" und der gesamte Code sieht etwas "komisch" aus.

BTW: Versteh mich bitte nicht falsch, es ist nur wahnsinnig kompliziert sich in so ein Problem hineinzudenken. Deswegen müssen wir immer wieder nachfragen, auch wenn sich die Fragen eventuell bescheuert anhören.

Überhaupt nicht. Es liegt ja an mir, weil ich mich so komisch ausdrücke und sicherlich Dinge mache, die kein normaler Mensch machen würde.
Ich bin super froh, dass ich hier Hilfe finde.

- - - Aktualisiert - - -

Ich kann nun mit der ID meine Ergebnisse anzeigen nur leider nicht auf einer neuen Seite. Geht das auf einer neuen Seite? Ich könnte mir vorstellen, dass ich die ID im Header der neuen Seite erwähnen muss, aber ich finde nichts im Internet dazu.
 
Zuletzt bearbeitet von einem Moderator:
AW: document.write auf neue Seite verlinken

Sieht gut aus. Rechts die Klammern noch weg, die sind unnötig.

Kann ich nurn mit z.B. <div id='Ergebnis'</div> den Text überall auf der Homepage aufrufen?
Aufrufen wäre falsch formuliert, weil ja das div nichts aufruft sondern das .innerHTML etwas rein schiebt. Aber ja, du kannst das div an jede beliebige Stelle innerhalb von <body> setzen.
 
AW: document.write auf neue Seite verlinken

Sieht gut aus. Rechts die Klammern noch weg, die sind unnötig.
Aufrufen wäre falsch formuliert, weil ja das div nichts aufruft sondern das .innerHTML etwas rein schiebt. Aber ja, du kannst das div an jede beliebige Stelle innerhalb von <body> setzen.

Welche Klammern rechts meinst Du? Das funzt schon mal so. Gibt es eine Möglichkeit
Code:
<div id='Ergebnis'</div>
auch auf einer anderen Seite der Homepage aufzurufen? Das hat nicht funktioniert.
 
AW: document.write auf neue Seite verlinken

Welche Klammern rechts meinst Du?
document.getElementById('Ergebnis').innerHTML =('Gelöst in' + results.moves + 'Zügen und' + results.seconds + ' Sekunden.');
-> document.getElementById('Ergebnis').innerHTML = 'Gelöst in' + results.moves + 'Zügen und' + results.seconds + ' Sekunden.';
Ist nicht falsch, aber wie mikdoe erwähnte braucht man die nicht.


Ich kann nun mit der ID meine Ergebnisse anzeigen nur leider nicht auf einer neuen Seite. Geht das auf einer neuen Seite? Ich könnte mir vorstellen, dass ich die ID im Header der neuen Seite erwähnen muss, aber ich finde nichts im Internet dazu.
Gibt es eine Möglichkeit
Code:
<div id='Ergebnis'</div>
auch auf einer anderen Seite der Homepage aufzurufen? Das hat nicht funktioniert.
Versteh ich leider nicht. Kannst du das nochmal mit anderen Worten erklären?



[HIGHLIGHT]Anmerkung: Threads zusammengeführt und aufgeräumt[/HIGHLIGHT]
 
Ich kann nun mit der ID meine Ergebnisse anzeigen nur leider nicht auf einer neuen Seite. Geht das auf einer neuen Seite?
Das wurde gerade in einem anderen Thread behandelt, aber ich weiß nicht, wie ich ihn wiederfinden soll. Hier wird erklärt, wie Du die Werte an die neue Seite übergeben kannst:
Javascript-Wertbergabe zwischen HTML-Dokumenten
Nachdem sie aus der URL extrahiert wurden, kannst Du den Text in das Ziel-div eintragen.
Einfacher als die Parameter mit Javascript zu extrahieren geht es jedoch mit PHP.
 
Zuletzt bearbeitet:
In diesem Fall würde ich jedoch wenn dann localStorage verwenden - das ist um ein Vielfaches unkomplizierter und der Nutzer bekommt auch nichts davon mit bzw. besteht nicht die Fehleranfälligkeit, dass dieser die ID ändert...
Local Storage - Dive Into HTML5
 
Ich bin ein gutes Stück weiter gekommen.

Nun fehlt mir erst mal noch eine sache. Ich habe ein Formular in das ich durch js ein Ergebnis eintragen lassen möchte. Beides liegt auf einer Seite. Ich habe das gestern bzw. heute bis um 4:30 Uher versucht, aber komme nicht so recht weiter:

Code:
<input type="text" id="Editbox2" style="position:absolute;line-" name="Ergebnis" value="" autocomplete="off">
<script type="text/javascript">
		    $(document).ready(function() 
		       document.getElementById('Editbox2').value = (id='Ergebnis')
		</script>

Also in value="" soll quasi der Inhalt von <div id='Ergebnis'</div> geschrieben werden. Aber das bekomme ich nicht hin. Nach meinen Recherchen im Netz muss das wohl möglich sein und es gibt diverse Ansätze, aber bei mir hat keine Funktioniert.
 
Zuletzt bearbeitet:
Zurück
Oben