php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.11.2010, 02:11  
Neuer Benutzer
 
Registriert seit: 15.11.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
varix befindet sich auf einem aufstrebenden Ast
Standard Array vergleichen

Hallo Community,

ich bräucte mal wieder eure Hilfe in folgender Sache. Ich habe ein Formular erstellt (soll mal ein Quiz werden) wo man eine Frage und 5 mögliche Antworten eingeben kann. Im letzten Feld wird per Radio-Button abgefragt, welche die richtige Antwort ist (soll später der Admin-Bereich sein).

Code:
<legend><strong>Ihre Frage </strong></legend>
<?php if (!empty ($error['frage'])){echo "<div class='error'>".$error['frage']."<br></div>";} ?>
<?php if (isset($i) && $i<2){echo "<div class='error'>".$error['answer']."<br></div>";} ?>
 <?php if (!empty ($error['correct'])){echo "<div class='error'>".$error['correct']."<br></div>";} ?>
<label for="Frage">Frage</label>
<input type="text" class="text" id="frage" name="frage" size="30" maxlength="100" value="<?PHP if(isset ($_POST['frage'])) echo $_POST['frage'] ;?>"/><br />

<label for="Antwort">Antwort 1:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort'])) echo 'Hallo' ;?>"/><br />
<label for="Antwort">Antwort 2:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort2'])) echo $_POST['antwort2'] ;?>"/><br />
<label for="Antwort">Antwort 3:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort3'])) echo $_POST['antwort3'] ;?>"/><br />
<label for="Antwort">Antwort 4:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort4'])) echo $_POST['antwort4'] ;?>"/><br />
<label for="Antwort">Antwort 5:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort5'])) echo $_POST['antwort5'] ;?>"/><br />
<label for="correct">Richtige Antwort</label>  <br />
<input type="radio" name="correct[]" value="antwort1"> Antwort 1<br />
<input type="radio" name="correct[]" value="antwort2"> Antwort 2<br />
<input type="radio" name="correct[]" value="antwort3"> Antwort 3<br />
<input type="radio" name="correct[]" value="antwort4"> Antwort 4<br />
<input type="radio" name="correct[]" value="antwort5"> Antwort 5<br />
<input type="submit" class="submit" value="Abschicken" name="Submit"/><br />
</fieldset>
</form>
</body>
Nach Stunden von Versuchen, lesen, überlegen und endlosen try & error, bekomme ich es einfach nicht hin, zu überprüfen, ob eine der eingegebenen Antworten und am ende des Formulars auch als richtige Antwort angeklickt wurde. Es soll also ein correct geben, wenn Treffer(feld eingegebene Antwort = feld richtige Antwort angeklickt) und in dem anderen Fall, also kein Treffer ein incorrect.

Folgender Code hat es leider auch nicht gebracht:
PHP-Code:
......
if (!isset(
$_POST['correct'])){
    
#prüfen ob richtige antwort ausgewählt wurde
    
$error['correct'] = "Bitte w&auml;hlen Sie eine richtige Antwort aus";
    }
    elseif (isset(
$_POST['correct'])) {
            foreach (
$_POST['antwort'] as $key1 => $value1){
                foreach (
$_POST['correct'] as $key2 => $value2){
                     if (!empty(
$value1) && !empty($key2)){
                       echo 
'Kein Treffer'; }
                   } 
            }
         } 
Ich hoffe, ich konnte mich verständlich ausdrücken.

Vielen dank für eure Hilfe!

Gruß
varix
varix ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.11.2010, 09:00  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Warum hängst du überhaupt die Klammern an den Radiobutton-Namen an?
Das liefert dir ein Array - aber wenn es eh nur einen zu übermittelnden Wert gibt, was willst du dann mit einem Array?

Lasse dir den einen Wert, der die Antwort identifiziert, übergeben, und vergleiche ihn mit der korrekten Antwort.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline  
Alt 24.11.2010, 13:57  
Neuer Benutzer
 
Registriert seit: 15.11.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
varix befindet sich auf einem aufstrebenden Ast
Standard

Hallo ChrisB,

das hier ein array gelifert wurde, war mir klar. Allerdings hast du natürlich recht, denn wozu brauche ich ein Array? es soll ja nur ein wert geben

Zitat:
Lasse dir den einen Wert, der die Antwort identifiziert, übergeben, und vergleiche ihn mit der korrekten Antwort.
Das ist mein Ziel und ich habe es mit folgendem code probiert:
PHP-Code:
if (!isset($_POST['correct'])){
    
#prüfen ob richtige antwort ausgewählt wurde
    
$error['correct'] = "Bitte w&auml;hlen Sie eine richtige Antwort aus";
    }
    elseif (isset(
$_POST['correct'])) {
            foreach ((
$_POST['antwort']) as $key1 => $value1){
                        if ( (!empty(
$value1)) && $value1 !==&& $key1 == $_POST['correct']){ $x ='2'; }else{$x='1'; echo 'Treffer';}
                             if (
$x='1'){ echo 'Kein Treffer';}
                  }
         } 
Sorry für die schlechte Schreibweise des Codes

Meine Anahme war, wenn 'correct' gesetzt ist, soll das Array 'antwort' durchlaufen werden. Aber nur da, wo ein Wert bei $value1 aus dem Array 'antwort' ist und der nicht Null ist soll verglichen werden (also leere Felder ignorieren). Wenn Wert in $value1 gesetzt ist, soll geprüft werden, ob der entsprechende $key = $_POST['correct']. damit hätten wir einen Treffer und der User hat aus den gegeben Antworten auch eine richtige bestätigt.

Das Ergebnis ist, das er das zwar erkennt (glaube ich zumindest), da er entweder 5mal ausgibt 'kein Treffer' oder bei einem Treffer = 4 mal 'kein Treffer und 1 mal 'Treffer'.......bin selber schon total crashed........

Kannst du mir sagen, wo der Fehler ist, bzw. was ich wie ändern muss, damit es bei kenem match die Fehlermeldung kommt 'Kein Treffer'?????

Das wäre echt genial, da ich schon sehr vieles probiert habe und es nicht hinbekomme!

varix
varix ist offline  
Alt 24.11.2010, 14:05  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Wie sieht denn überhaupt dein Antwort-Array aus?
Wieso übergibst du die Antworten auch per POST, wieso stehen die nicht nur im Script?

Vergiss erst mal sämtlichen Code, den du bisher hast - und überlege dir, wie du das überhaupt umsetzen willst. Wo du welche Werte her holen/abfragen möchtest, und was dann womit zu vergleichen ist.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline  
Alt 24.11.2010, 15:46  
Neuer Benutzer
 
Registriert seit: 15.11.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
varix befindet sich auf einem aufstrebenden Ast
Standard

Hier mal der komplette Code:

PHP-Code:
<?php
if (isset($_POST['Submit']))
{
 
    if (empty(
$_POST['frage'] )){ 
      
// prüfen , ob absender name eingegben wurde
    
$error['frage'] = "Bitte geben Sie eine Frage ein!"
    }

    
$i=0;
    foreach (
$_POST['antwort'] as $key => $value){
    if (!empty(
$value)){ ++$i;} 
    }    
    if (
$i<2) {    // prüfen , ob es weniger als 2 Antworten gibt
    
$error['answer'] = "Bitte geben Sie mindestens zwei Antworten ein!";
    } 

    ------------- 
um diesen Teil geht es -------------------------------

    if (!isset(
$_POST['correct'])){
    
#prüfen ob richtige antwort ausgewählt wurde
    
$error['correct'] = "Bitte w&auml;hlen Sie eine richtige Antwort aus";
    }
    elseif (isset(
$_POST['correct'])) {
            foreach ((
$_POST['antwort']) as $key1 => $value1){
                        if ( (!empty(
$value1)) && $value1 !==&& $key1 == $_POST['correct']){ $x ='2'; }else{$x='1';}
                             if (
$x='1'){ echo 'Kein Treffer';}
                  }
         } 
 ---------------------------------------------------------------------  
};
?>


 <title>Qiuzfragen erstellen</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
.formbody {width:600px;margin:auto;}
 label {width:150px;display:block;float:left;}
input {margin-bottom:10px;width:300px;}
input[type="radio"]{width:15px;margin-left:150px;}
.error  {color:red;margin-left:150px;}
.danke {font-style:italic;}
 fieldset {padding:15px;}
 .submit{width:150px;}
.unterstrich {text-decoration: underline;}
</style>
</head>
<body>
<form class="formbody" action="" method="post">
<fieldset>
Bitte geben Sie Ihre Frage und<span class="unterstrich"> mindestens 2 Antworten</span> ein.<br />
Best&auml;tigen Sie bitte auch, welche die richtige Antwort ist.<br /> <br />
<legend><strong>Ihre Frage </strong></legend>
<?php if (!empty ($error['frage'])){echo "<div class='error'>".$error['frage']."<br></div>";} ?>
<?php 
if (isset($i) && $i<2){echo "<div class='error'>".$error['answer']."<br></div>";} ?>
 <?php if (!empty ($error['correct'])){echo "<div class='error'>".$error['correct']."<br></div>";} ?>
<?php 
if (!empty ($error['incorrect'])){echo "<div class='error'>".$error['incorrect']."<br></div>";} ?>
<label for="Frage">Frage</label>
<input type="text" class="text" id="frage" name="frage" size="30" maxlength="100" value="<?PHP if(isset ($_POST['frage'])) echo $_POST['frage'] ;?>"/><br />

<label for="Antwort">Antwort 1:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort']['0'])) echo $_POST['antwort']['0']  ;?>"/><br />
<label for="Antwort">Antwort 2:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort']['1'])) echo $_POST['antwort']['1'] ;?>"/><br />
<label for="Antwort">Antwort 3:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort']['2'])) echo $_POST['antwort']['2'] ;?>"/><br />
<label for="Antwort">Antwort 4:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort']['3'])) echo $_POST['antwort']['3'] ;?>"/><br />
<label for="Antwort">Antwort 5:</label>
<input type="text" class="text" id="antwort" name="antwort[]" size="30" maxlength="100" value="<?PHP if(isset ($_POST['antwort']['4'])) echo $_POST['antwort']['4'] ;?>"/><br />
<label for="correct">Richtige Antwort</label>  <br />
<input type="radio" name="correct" value="0"> Antwort 1<br />
<input type="radio" name="correct" value="1"> Antwort 2<br />
<input type="radio" name="correct" value="2"> Antwort 3<br />
<input type="radio" name="correct" value="3"> Antwort 4<br />
<input type="radio" name="correct" value="4"> Antwort 5<br />
<input type="submit" class="submit" value="Abschicken" name="Submit"/><br />
</fieldset>
</form>
</body>
<?php 

echo "<br />";
print (
$_POST['correct']);

?>
Ich habe die Verarbeitung zunächst in der gleichen Datei gelassen. Ist für mich etwas übersichtlicher, kann aber später auch ausgelagert werden.

Soweit funktioniert auch alles, wie gewünscht. Nur der letzte Teil eben nicht.
Der Admin soll eine Frage formulieren, mind. 2 Antworten eingeben und als letztes anklicken, welche Antwort die richtige ist.

1)Die Überprüfung, ob mind 2. Antworten gegebn wurden funktioniert.
2)Die Überprüfung, ob Feld richtige Antwort ÜBERHAUPT gesetzt ist, funktioniert.

Zitat:
Vergiss erst mal sämtlichen Code, den du bisher hast - und überlege dir, wie du das überhaupt umsetzen willst. Wo du welche Werte her holen/abfragen möchtest, und was dann womit zu vergleichen ist.
Meine Überlegung: Wie überprüfe ich, ob es eine Übereinstimmung zwischen dem array 'antwort' (also die eingegeben antworten) und der Variable $correct gibt. Dann wäre alles ok! Da $correct einen Wert zw. 0-4 hat (5 select-Button), wollte ich diesen Wert vergleichen, ob aus dem Array 'antwort' ein wert gesetzt ist, wo der Schlüssel identisch ist.

Bsp. Array 'Antwort' = Antwort2 ausgefüllt = key1 gesetzt
Wenn dann $correct = 2 gesetzt, da Array = ist also auch 1 gesetzt und wir hätten einen Treffer. damit hätte der Admin eine eingegebene Antwort auch als richtige Antwort erklärt.

Ich denke dass diese Grundüberlegung richtig ist, allerdings kann ich es trotz vieler, wirklich vieler Versuche, nicht umsetzten

varix
varix ist offline  
Alt 24.11.2010, 16:19  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Du meinst sowas?

PHP-Code:
if(strlen(trim($_POST['antwort'][$_POST['correct']])) > 0){
  echo 
"alles gut";
}else{
  echo 
"Die richtige Antwort ist nix?!";

cycap ist offline  
Alt 24.11.2010, 16:40  
Neuer Benutzer
 
Registriert seit: 15.11.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
varix befindet sich auf einem aufstrebenden Ast
Standard

Ja, das war es. Hab es wahrscheinlich viel zu kompliziert gemacht. Werde mir mal deinen Code genauer anschauen und versuchen ihn zu verstehen (php manual).

Du hast meinen Tag gerettet.

Vielen Dank euch beiden

Gruß
varix
varix ist offline  
Alt 24.11.2010, 16:46  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

da gibts nicht so viel zu verstehen, der Kern ist halt das ich auf Element x von $_POST['antwort'] zugreifen muss und das x steht in $_POST['correct'].

Das gleiche würde das hier machen:

PHP-Code:
$x $_POST['correct'];
if(
strlen(trim($_POST['antwort'][$x])) > 0){
  echo 
"alles gut";
}else{
  echo 
"Die richtige Antwort ist nix?!";

trim entfernt evtl. vorhandene leerzeichen (und ähnliches) an Anfang und Ende und strlen gibt halt die Länge des Strings zurück. Das wars schon.
cycap ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mehrdimensionales array inhalte tauschen pidaman PHP Tipps 2010 18 27.08.2010 16:58
Feed in Datenbank eintragen (Formate: json, php serialized, xml) high_five Datenbanken 5 17.06.2010 03:04
[Erledigt] Sortierung mehrerer Arrays philosapiens PHP Tipps 2010 16 08.06.2010 05:22
IE8 verliert Session Lenki PHP-Fortgeschrittene 10 25.04.2010 01:10
[Erledigt] Problem bei update mit array feldern fulltilt PHP Tipps 2010 6 13.02.2010 00:59
[Erledigt] Tabellen die sich selbst referenzieren Squall PHP Tipps 2009 19 04.08.2009 21:33
[Erledigt] array sortieren PHP Tipps 2004 17 13.05.2009 10:44
Array umwandeln von zwei zu mehrdimensional erselbst PHP Tipps 2009 6 02.04.2009 23:30
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php array vergleichen, php arrays vergleichen, array vergleichen, array vergleichen php, php array vergleich, arrays vergleichen php, array php vergleichen, array vergleich php, array vergleich, array mit array vergleichen, php array values vergleichen, php arry vergleichen, php vergleich arrays, php vergleichen, array mit array vergleichen php, php mit array vergleichen, arrays vergleichen, array values vergleichen, array vegleichen php, vergleichen php

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:20 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum