php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Anfänger mit Problem....


 
Goatmilk
16-02-2007, 10:06 
 
Hallo alle zusammen,

ich weiß jetzt gar nicht, ob man hier auch als blutiger Anfänger eine Frage bzw. ein Problem posten darf - ich verstehe von php ungefähr so viel wie von chinesischer Grammatik..

Mein Problem: ich möchte eine Art 'Rätsel-Quest' machen, wo ein Besucher eine Frage oder ein Rätsel lösen muß, die Antwort in eine Textbox tippen soll und bei richtiger Antwort auf die nächste Seite gelangt - wo dann ein neues Rätsel wartet. Es sollen mehrere Seiten sein, weil auf der letzten eine 'Belohnung' wartet, die eine ganz spezielles layout benötigt.

Mit Javascript ist Rätsel schlecht machbar, da der Besucher nur zu leicht den Code einsehen kann, also sollte php her. Leider funktioniert das script nicht so, wie ich es gerne hätte - ich habe schon alle möglichen Varanten probiert (was nicht viel zu sagen hat. Ich gehöre zu den Leuten, die nichts verstehen, was nicht im PhotoShop gemacht werden kann...)

Hier ist mal das Problemkind, ich hoffe, der code ist nicht zu lang:


<?php
$qs=array(
array("Welche Fender Gitarre spielte Jimi Hendrix?","Stratocaster")
);
if(isset($_POST['answer'])) {
$answer=stripslashes($_POST['answer']);
$q_no=stripslashes($_POST['q_no']);
$q=$qs[$q_no][0];
if($answer==$qs[$q_no][1]) {

if(empty($q)) {
$url="http://www.google.com";
$finished=true;

}
}
else {
$message="Leider falsch!";
}
}
else {
$q_no=0;
$q=$qs[0][0];
$message="Fangen wir an!";
}
?>



Warum funktioniert das nicht??? :{

Und mir hat man gesagt, php sei leichter als cgi....

Es wäre schön, wenn mir jemand da etwas helfen könnte..


Liebe Grüße

Goatmilk

nachträglich eingefärbt

 
unset
16-02-2007, 10:16 
 
Hier gibts PHP-Tags, die den Code auch noch einfärben.

Was genau funktioniert denn nicht?

 
Goatmilk
16-02-2007, 10:49 
 
Danke für Deine Antwort, an das Einfärben hatte ich nicht gedacht..

Was nicht funktioniert - wenn die Antwort eingegeben ist und Submit gedrückt wird, wird die Antwort gelöscht und sonst rührt sich nichts.

Die Seite geht auch nicht auf die Ziel-Url, es bleibt einfach stehen.

Das Ursprungsscript sah so aus:

<?php
$qs=array(
array("Welche Fender spielte Jimi Hendrix?","Stratocaster")
);
if(isset($_POST['answer'])) {
$answer=stripslashes($_POST['answer']);
$q_no=stripslashes($_POST['q_no']);
$q=$qs[$q_no][0];
if($answer==$qs[$q_no][1]) {
$message="Right!";
$q_no=$q_no+1;
$q=$qs[$q_no][0];
if(empty($q)) {
$url="http://www.google.com";
$finished=true;
}
}
else {
$message="Leider falsch!";
}
}
else {
$q_no=0;
$q=$qs[0][0];
$message="Fangen wir an!";
}
?>


... aber das hupfte auch nicht weiter, sondern zeigte nur 'Right!' an..

edit: Das Ursprungsscript sollte mehrere Fragen enthalten, da ich aber von einer page zur nächsten hupfen wollte und jede page nur ein Rätsel enthält, wurde das 'Richtig' bzw. Right' überflüssig und ich hab's rausgenommen.

Liebe Grüße,

Goatmilk

 
unset
16-02-2007, 10:53 
 
Und weiter gehts: Das ist nicht das komplette Script bzw fehlen relevante Stellen. Bitte entsprechend posten. Hier fliegt irgendwo auch ein Thread rum, in dem sich Hinweise zum richtigen posten befinden. Bitte mal suchen und lesen.

So jedenfalls wird dir keiner helfen können.

 
Goatmilk
16-02-2007, 11:16 
 
Ich habe aber doch nur das... jedenfalls ist das das ganze php... (soweit ich's verstanden habe..)

Sonst ist auf der Seite nur noch normaler Code, außer bei der form:


<?php
$qs=array(
array("Welche Fender Gitarre spielte Jimi Hendrix?","Stratocaster")
);
if(isset($_POST['answer'])) {
$answer=stripslashes($_POST['answer']);
$q_no=stripslashes($_POST['q_no']);
$q=$qs[$q_no][0];
if($answer==$qs[$q_no][1]) {

if(empty($q)) {
$url="http://www.google.com";
$finished=true;

}
}
else {
$message="Leider falsch!";
}
}
else {
$q_no=0;
$q=$qs[0][0];
$message="Fangen wir an!";
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Quiz</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<style type="text/css">


form, fieldset {
width:15em;
padding:1em;
}
p {
margin:1em;
font-size:1.5em;
}
form p {
font-size:1em;
margin:1em 0;
}
</style>

</head>
<BODY
STYLE="background-attachment:fixed; background-image:url(../gifs/woods.jpg);"
BGCOLOR="#45250E" TEXT="#E7D3AD" LINK="#E6B388" VLINK="#E6B388">
<BR><BR>
<IMG SRC="../gifs/hugin.gif" ALT="Jimi" BORDER="0" HSPACE="150"><BR>

<p><?php echo $message; ?></p>
<?php
if(!$finished) {
echo '
<form id="q" action="'.$_SERVER['PHP_SELF'].'" method="post">
<fieldset>
<legend>Question '.($q_no+1).'</legend>
<p>'.$q.'</p>
<input type="text" name="answer">
<input type="hidden" name="q_no" value="'.$q_no.'">
<input type="submit" value="go">
</fieldset>
</form>';
}
?>
</body>
</html>


Das ist das ganze Teil. Ich hatte in der Ankündigung gelesen, man solle nur die relevanten Stellen posten und nicht die ganzen Seiten, da die zu lang seien, deswegen hatte ich nur den Anfang.

Ich sehe jetzt in der Vorschau, daß die ganze Form mit eingefärbt ist, die hatte ich größtenteils für html gehalten.. ich lass das jetzt mal so, wer weiß, ob der Rest nicht irgendwo auch wichtig ist.

Liebe Grüße,

Goatmilk

 
Jaws
16-02-2007, 11:18 
 
explizit: uns fehlt noch der Code deiner Formular-Seite. Wir müssen eben wissen wie du die Daten an das obige PHP-Script übergibst. Weil scheinbar funktioniert ja die Übergabe nicht...

Edit: Also bei mir funktioniert das Script!

Füge einfach mal Testweise nach dem if($answer==$qs[$q_no][1]) {

folgendes ein: $message="Richtig";

Dann wirst du sehen dass es klappt!
Wenn du jetzt auf eine neue Seite weiterleiten willst, dann musst du statt der "Message" eben eine Weietrleitung - z.B. mit header() - einbauen...

 
Goatmilk
16-02-2007, 11:33 
 
Was für ein code???

Ich könnte jetzt höchstens noch das ganze alte posten, welches zu der 'Gut gemacht' message führte und damit einwandfrei funktionierte.

Das unterscheidet sich von meinen Murksversuchen nur im oberen Teil, denn nur in dem habe ich herumgefuhrwerkt:


<?php
$qs=array(
array("Welche Fender spielte Jimi Hendrix","Stratocaster")
);
if(isset($_POST['answer'])) {
$answer=stripslashes($_POST['answer']);
$q_no=stripslashes($_POST['q_no']);
$q=$qs[$q_no][0];
if($answer==$qs[$q_no][1]) {
$message="Right!";
$q_no=$q_no+1;
$q=$qs[$q_no][0];
if(empty($q)) {
$message="Gut gemacht!";
$finished=true;
}
}
else {
$message="Leider falsch!";
}
}
else {
$q_no=0;
$q=$qs[0][0];
$message="Fangen wir an!";
}
?>


Alles, was danach kommt, ist bei allen Versionen absolut gleich.

Mein Versuch war, das script dazu zu bringen, bei der richtigen Antwort nicht die message 'Gut gemacht' auf die Seite zu schreiben, sondern auf eine andere url zu springen. Dabei muß ich in dem oberen Teil irgendwas gewaltig verbockt haben, ich weiß nur nicht, was..

Danke für Eure Geduld...

Goatmilk

 
Goatmilk
16-02-2007, 11:39 
 
Danke, Jaws, ich hatte Dein edit erst gesehen, nachdem ich gepostet hatte.

Die Weiterleitung - die ist das Problem! Ich kriege sie nicht hin...

Du schreibst: statt der "Message" eben eine Weiterleitung - z.B. mit header() - einbauen

Aber wie? Wie genau schaut so eine Zeile aus? Ein $ und was dann?

Braucht man das 'Richtig!' dann überhaupt noch, wenn die Seite gleich weiterhupfen soll?

Liebe Grüße

Goatmilk

 
Jaws
16-02-2007, 11:45 
 
sorry, ich hatte nur meinen ersten beitrag editiert... da warst du schneller mit dem code-posten als ich mit beitrag schreiben. des hat sich also erledigt. wir haben alles was wir brauchen ;-)

Schau dir mal deinen Code an:
if($answer==$qs[$q_no][1]) {

if(empty($q)) {
$url="http://www.google.com";
$finished=true;

}
}
Hier frägst du ab, ob die Antwort stimmt. Wenn ja, wird überprüft ob weitere Fragen existieren. Die existieren nicht, also wird der Variablen $url ein Wert zugewiesen und der Status auf Finished gesetzt.
Aber was machst du dann mit der Variablen? Die verwendest du ja nicht weiter...

Da müsstest du jetzt also einen header()-Weiterleitung einbauen:header('Location:' . $url );

Außerdem musst du diesen Teil aus dem Orginal noch im Script drinlassen: $q_no=$q_no+1;
$q=$qs[$q_no][0];
Sonst wird der Fragen-Counter nicht hochgezählt, und deine weiterleitung "springt nicht an"...


Also, hier die komplette Modifikation: if($answer==$qs[$q_no][1]) {
$q_no=$q_no+1;
$q=$qs[$q_no][0];
if(empty($q)) {
$url="http://www.google.com";
$finished=true;
header('Location:' . $url );
}
}
else {

 
Goatmilk
16-02-2007, 11:54 
 
Mein Held!!! :jo:

Tausend Dank - das hätte ich nicht allein geschafft! Header... da wäre ich im Leben nicht drauf gekommen.

Ich glaube, ich muß mich da wirklich mal in die Grundlagen von php einlesen. Ich wollte nur mein Javascript durch etwas mehr Sicheres ersetzen, dabei ist schon Javascript für mich eine Herausforderung. Ich hab's einfach nicht mit der Technik...

Aber jetzt kann ich mich auf mein Layout stürzen! Vielen Dank!!

Liebe Grüße

Goatmilk

 
Jaws
16-02-2007, 11:56 
 
No Problem ;-)
Joa, les dich da wirklich mal rein! Kann nicht schaden!

Aber jetzt nochmal zum Script? Warum willst du die Weiterleitung, wenn du mehrere Fragen hast?
Ich mein, dafür ist das ursprüngliche Script ja ausgelegt, mehrere Fragen auf einer Seite in einem Script zu handeln!

 
Goatmilk
16-02-2007, 12:06 
 
Ich weiß.. aber ich bin ein ziemlich altmodischer Hobby-Designer, der sich auf seinen Layouts liebend gerne graphisch austobt - vorzugsweise in html. Das hätte bei geplanten 40+ Fragen zu einer Monsterdatei geführt, da die Seiten ja alle unterschiedlich aussehen sollen.

Die letzte Seite ist dann auch noch ein frameset, weil sie ein script enthält, das ohne frames nicht läuft (ja, ich liebe frames...). Wie ich die da hätte reinbringen sollen, war mir auch schleierhaft.

Und da ich die meisten Seiten schon halb fertig hatte - eben mit dem Javascript - suchte ich nur eine Möglichkeit, das Javascript zu ersetzen.
(..nachdem mir der 15jährige Nachbarsjunge grinsend gezeigt hat, wie schnell er an die js-Datei kommt...)

Liebe Grüße

Goatmilk


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:58 Uhr.