PHP Anweisung Fehlerhaft

DonDemf

Erfahrenes Mitglied
Hey Leute,
ich habe ein Fußball-Aufstellung System geschrieben mit insgesamt 11 dropdown feldern. In jedem Feld werden alle Spieler meiner Mannschaft augelistet.
Nun wähle ich für jedes DropDow Feld ein Spieler aus, so dass 11 verschiedene Spieler auf dem Feld sind.

Anschließend will ich diese Formation per POST speicher.

Mein Speicher-Script sieht so aus:
PHP:
if($userdata["teamid"]=="") {
	echo 'Du bist nicht befugt, diese Seite aufzurufen.'; } else {
		$c = 1;
for($a = 0; $a < 10; $a++)
{
    for($b = $a + 1; $b < 11; $b++)
    {
        if($_POST['s' . $a] == $_POST['s' . $b])
            $c = 0;
    }
}
if($c == 1)
{
$sfa = 'UPDATE fifa_mannschaften Set
aufstellung = "'.$formation.'"
WHERE id = "'.$userdata["teamid"].'"';
$sfb = mysql_query($sfa);

$aend1 = $s1e["0"];
$s1a = 'UPDATE fifa_spieler Set
pos = "s1"
WHERE id = "'.$aend1.'"';
$s1b = mysql_query($s1a);

$aend2 = $s2e["0"];
$s2a = 'UPDATE fifa_spieler Set
pos = "s2"
WHERE id = "'.$aend2.'"';
$s2b = mysql_query($s2a);

$aend3 = $s3e["0"];
$s3a = 'UPDATE fifa_spieler Set
pos = "s3"
WHERE id = "'.$aend3.'"';
$s3b = mysql_query($s3a);

$aend4 = $s4e["0"];
$s4a = 'UPDATE fifa_spieler Set
pos = "s4"
WHERE id = "'.$aend4.'"';
$s4b = mysql_query($s4a);

$aend5 = $s5e["0"];
$s5a = 'UPDATE fifa_spieler Set
pos = "s5"
WHERE id = "'.$aend5.'"';
$s5b = mysql_query($s5a);

$aend6 = $s6e["0"];
$s6a = 'UPDATE fifa_spieler Set
pos = "s6"
WHERE id = "'.$aend6.'"';
$s6b = mysql_query($s6a);

$aend7 = $s7e["0"];
$s7a = 'UPDATE fifa_spieler Set
pos = "s7"
WHERE id = "'.$aend7.'"';
$s7b = mysql_query($s7a);

$aend9 = $s9e["0"];
$s9a = 'UPDATE fifa_spieler Set
pos = "s9"
WHERE id = "'.$aend9.'"';
$s9b = mysql_query($s9a);

$aend10 = $s10e["0"];
$s10a = 'UPDATE fifa_spieler Set
pos = "s10"
WHERE id = "'.$aend10.'"';
$s10b = mysql_query($s10a);

$aend11 = $s11e["0"];
$s11a = 'UPDATE fifa_spieler Set
pos = "s11"
WHERE id = "'.$aend11.'"';
$s11b = mysql_query($s11a);

$aend = $s8e["0"];
$s8a = 'UPDATE fifa_spieler Set
pos = "s8"
WHERE id = "'.$aend.'"';
$s8b = mysql_query($s8a);

echo 'Deine Formation wurde erfolgreich gespeichert.';
		
		}
else
{
	
	echo 'Bitte beachte, dass jeder Spieler nur einmal aufgestellt werden darf.';
	}

Hierbei soll überprüft werden, ob jeder Spieler wirklich nur einmal aufgestellt ist. Dies passiert anhand der übermittelten IDs die immer einzigartig sind!

Leider gibt er mir immer die ELSE bedingung aus: "Bitte beachte, dass jeder Spieler nur einmal aufgestellt werden darf", aber jeder spieler ist defintiv nur einmal aufgestellt.

Habt ihr eventuell eine idee?

Übrigens, Ausgabe von c ist = 0!
 
Du hast die Felde s1 bis s11? OK
Warum machst du nicht ein Array draus? Dann hast due bereits ein Array $_POST['s'] mit 11 Einträgen
HTML:
<input name="s[1]" ....>

PHP:
//für mich zum testen die Eingabe simulieren
$_POST['s'][1] = 1;
$_POST['s'][2] = 2;
$_POST['s'][3] = 1;
$_POST['s'][4] = 4;

// Spieler definieren. Bei dir währen das natürlich 11
define('C_S_COUNT', 4);

// doppelte Spieler-IDs eleminieren
$sUnique = array_unique($_POST['s']);

//Nur ausgefüllte Spieler auswählen
$sValid = array_filter($_POST['s']);



if(count($sValid) < C_S_COUNT ){
    echo 'Zu wenig Spieler ausgewählt';
}elseif(count($sUnique) < C_S_COUNT){
    echo 'Spieler doppelt ausgewählt';
}else{
    //TODO: In DB speichern 
}

PS: Ich habe deinen Code nicht genauer untersucht - die Formatierung verunmöglicht mir eine detailierte Analyse
 
Hey,
danke für die schnelle antwort! Ich weiß der Code ist nicht der sauberste.. :-(

Ich fang also nochmal ganz genau an, wie ich es machen wollte:

Habe 11 POST variabeln, die anschließend mit einem explode geteilt werden:

PHP:
$s1 = $_POST["s1"]; $s2 = $_POST["s2"]; $s3 = $_POST["s3"]; $s4 = $_POST["s4"]; $s5 = $_POST["s5"]; $s6 = $_POST["s6"]; $s7 = $_POST["s7"]; $s8 = $_POST["s8"]; $s9 = $_POST["s9"]; $s10 = $_POST["s10"]; $s11 = $_POST["s11"];  $formation = $_POST["formation"];


$s1e = explode('|', $s1); $s2e = explode('|', $s2); $s3e = explode('|', $s3); $s4e = explode('|', $s4); $s5e = explode('|', $s5); $s6e = explode('|', $s6); $s7e = explode('|', $s7); $s8e = explode('|', $s8); $s9e = explode('|', $s9); $s10e = explode('|', $s10); $s11e = explode('|', $s11);

Die POST Werte kommen aus:
HTML:
<option value="'.$s11->id.'|'.$s11->name.'">'.$s11->name.'</option>

Deshalb auch der explode...
anschließend folgt der oben genannte code!

Wie füge ich diesen denn zu einem array zusammen, um die oben aufgeführte Lösung anzuwenden****

LG
 
Sprich:

PHP:
<option name="s[11]" value="'.$s11->id.'|'.$s11->name.'">'.$s11->name.'</option>
<option name="s[10]" value="'.$s10->id.'|'.$s10->name.'">'.$s10->name.'</option>

usw...

und anschließend:

PHP:
$_POST['s'][11] = 11;
$_POST['s'][10] = 10;


usw..?

****?
 
Nein?
HTML:
<select name="s[0]">
    <option value="1">Spieler1</option>
    <option value="2">Spieler2</option>
    ... 9 weitere ...
</select>
<select name="s[1]">
    <option value="1">Spieler1</option>
    <option value="2">Spieler2</option>
    ... 9 weitere ...
</select>
<select name="s[2]">
    <option value="1">Spieler1</option>
    <option value="2">Spieler2</option>
    ... 9 weitere ...
</select>

Für jeden Spieler ein Select-Feld mit s[0] bis s[10]...
€: Unglückliche Formulierung.
Für jeden Spieler-SLOT musst du ein Dropdown machen, wo man alle 11 Spieler wählen kann. Jeder Dropdown hat einen Name von s[0] bis s[10]
 
alles klar, ich versuchs und melde mich!

Ok, vielen Dank schon mal für eure Hilfe, ich habe nun folgendes:

Aufstellungs-Datei:

PHP:
<select name="s[0]" id="s11" size="1">';
  
  while($s11 = mysql_fetch_object($spieler2))
   {
   echo '<option value="'.$s11->id.'|'.$s11->name.'">'.$s11->name.'</option>';
   }
   
  echo '</select>
Und davon halt auch für die anderen10 positionen!

Dann habe ich die Speicher Datei:
PHP:
##################### Alle Spielfelder
$_POST['s'][0] = 11;
$_POST['s'][10] = 10;
$_POST['s'][9] = 9;
$_POST['s'][8] = 8;
$_POST['s'][7] = 7;
$_POST['s'][6] = 6;
$_POST['s'][5] = 5;
$_POST['s'][4] = 4;
$_POST['s'][3] = 3;
$_POST['s'][2] = 2;
$_POST['s'][1] = 1;



$s1e = explode('|', $s1); $s2e = explode('|', $s2); $s3e = explode('|', $s3); $s4e = explode('|', $s4); $s5e = explode('|', $s5); $s6e = explode('|', $s6); $s7e = explode('|', $s7); $s8e = explode('|', $s8); $s9e = explode('|', $s9); $s10e = explode('|', $s10); $s11e = explode('|', $s11);

#########################
// Spieler definieren. Bei dir währen das natürlich 11
define('C_S_COUNT', 11);
 
// doppelte Spieler-IDs eleminieren
$sUnique = array_unique($_POST['s']);
 
//Nur ausgefüllte Spieler auswählen
$sValid = array_filter($_POST['s']);
 
 
 
if(count($sValid) < C_S_COUNT ){
    echo 'Zu wenig Spieler ausgewählt';
}elseif(count($sUnique) < C_S_COUNT){
    echo 'Spieler doppelt ausgewählt';
}else{
// speichern
}


Leider funktioniert die abfrage nicht, denn speichern tut er jedes mal! Auch wenn 11 mal die selben Spieler aufgestellt sind!
 
PHP:
##################### Alle Spielfelder
$_POST['s'][0] = 11;
$_POST['s'][10] = 10;
$_POST['s'][9] = 9;
$_POST['s'][8] = 8;
$_POST['s'][7] = 7;
$_POST['s'][6] = 6;
$_POST['s'][5] = 5;
$_POST['s'][4] = 4;
$_POST['s'][3] = 3;
$_POST['s'][2] = 2;
$_POST['s'][1] = 1;
Was soll das?

In den Variablen steht das Ausgewählte vom Select!


Wenn du das auwählst:
HTML:
<select name="s[5]">
   <option value="7">Spieler7</option>
</select>
kannst du es hiermit auslesen:
PHP:
echo $_POST['s'][5];
Dabei sollte dann 7 ausgegeben werden!
 
Sorry,
ich versuche gerade mich am Script von yaslaw zu orientieren und stehe dabei etwas auf dem schlauch!

Habe nun folgendes geändert:

PHP:
<?php
##################### Alle Spielfelder



$s1e = explode('|', $s1); $s2e = explode('|', $s2); $s3e = explode('|', $s3); $s4e = explode('|', $s4); $s5e = explode('|', $s5); $s6e = explode('|', $s6); $s7e = explode('|', $s7); $s8e = explode('|', $s8); $s9e = explode('|', $s9); $s10e = explode('|', $s10); $s11e = explode('|', $s11);

#########################
// Spieler definieren. Bei dir währen das natürlich 11
define('C_S_COUNT', 11);
 
// doppelte Spieler-IDs eleminieren
$sUnique = array_unique($_POST['s']);
 
//Nur ausgefüllte Spieler auswählen
$sValid = array_filter($_POST['s']);
 
 
 
if(count($sValid) < C_S_COUNT ){
    echo 'Zu wenig Spieler ausgewählt';
}elseif(count($sUnique) < C_S_COUNT){
    echo 'Spieler doppelt ausgewählt';
}else{
    //update
}

		
		
	

?>
Jetzt gibt er mir immer aus: "Zu wenig Spieler ausgewählt"

Ich habe nun aber noch folgende Denkfehler:
erst einmal, wie kann er denn nun die IDs des arrays vergleichen, weilja als value nicht nur die ID gesendet wird, sndern auch der name:

PHP:
<option value="'.$s11->id.'|'.$s11->name.'">'.$s11->name.'</option>

Also beispiel: 185 | Cech Fabregas


Ich habe meine Datei mal angehangen.

Niemand mehr eine Lösung? :-(
 

Anhänge

Ich nochmal ;-)
Also ich habe es nun so weit, dass die Abfrage funktioniert. Das Programm erkennt also ob ich doppelte spieler habe oder nicht!

Nun habe ich aber 11 verschiedene werte ala:

10 | fabregas
145 | Goetze

usw.

Ich brauche aber nur die Ids

D.h ich versuche einen explode:

PHP:
$s1e = explode('|', $_POST['s'][0]);

nun teilt er es aber nicht mehr auf, sondern er gibt nur "Array" aus... und nicht nur die id!

Die id benötige ich für die letztlich erfolgende Abspeicherung! Anscheinend die letzte Hürde! Jemand eine Idee************?
 
Zurück