Formular -> Multi INSERT

aseco

Mitglied
Hallo zusammen,
seit Tagen beisse ich mir die Zähne aus und anstatt der Lösung näher zu kommen schein ich mich mit hammer Fehlern davon zu entfernen.

Hier was sein sollte:

Ich habe ein Formular das anhand von einer Datenbank mehrere Personen enthält.
Nun sollte man bei jedem Namen am Schluss anklicken können welche Waffe er benutzt (radio(weapon)) und ob er auch mit der Pistole schiesst (checkbox(weapon2)).

Was nun ist:
Entweder wird x Mal (Anzahl der rows in der DB) der selbe Eintrag mit dem letzten Schützen auf der Liste eingetragen oder sonst was haut nicht hin.

Hat jemand ne Idee?
Hier mal das Script:
Formular:
HTML:
<?php
  // Datenbank includieren
  include 'includes/class/db.php';
  // Datensätze aus Datenbank auswählen
  $check = "SELECT * FROM shooter WHERE shooter_sektion='$_POST[sektion]' ORDER BY shooter_name ASC";
  $result = mysql_query($check);
  $row = mysql_num_rows($result); ?>
<form method="post" action="includes/plugins/app/php/anmeldung_sektion.php?row=<?php echo $row ?>">
  <table width="700px" cellpadding="0" cellspacing="0">
  <tr>
    <td><b>Name</b></td>
    <td><b>Vorname</b></td>
    <td><b>Grad</b></td>
    <td><b>Jahr</b></td>
    <td style="padding-left:15px;"><b>Status</b></td>
    <td width="15px;"></td>
    <td width="15px;"><b>90</b></td>
    <td width="15px;"><b>57</b></td>
    <td width="15px;"><b>Ka</b></td>
    <td width="15px;"><b>Pi</b></td>
  </tr>
  <?php // So lange ausgeben bis alle Zeilen ausgegeben sind.
  $lib = 0;
  while($s = mysql_fetch_object($result))
  { ?>
  <tr>
    <td><?php echo "$s->shooter_name" ?></td>
    <td><?php echo "$s->shooter_vorname" ?></td>
    <td><?php echo "$s->shooter_grad" ?></td>
    <td><?php echo "$s->shooter_jahrgang" ?></td>
    <td style="padding-left:15px;">
		<?php 
			// Status inaktiv rotes Icon
			if($s->shooter_status == 0){ ?>
   				<img src="images/ico/bullet_red.png" width="16" height="16" />
			<?php } 
			// Status aktiv grünes Icon
			else{?>
    			<img src="images/ico/bullet_green.png" width="16" height="16" />
		<?php } ?>
    </td>
    <?php 
	$lib++;
	?>
    <td align="center"><input name="weapon<?php echo "$lib;" ?>" type="radio" value="0" checked="checked" /></td>
    <td align="center"><input name="weapon<?php echo "$lib;" ?>" type="radio" value="2" /></td>
    <td align="center"><input name="weapon<?php echo "$lib;" ?>" type="radio" value="3" /></td>
    <td align="center"><input name="weapon<?php echo "$lib;" ?>" type="radio" value="4" /></td>
    <td style="background-color:#ddd;" align="center"><input name="weapon2<?php echo "$lib;" ?>" type="checkbox" value="1" /></td>
    <input name="shooter<?php echo "$lib;" ?>" type="hidden" value="<?php echo "$s->shooter_id" ?>" />
    <input name="status<?php echo "$lib;" ?>" type="hidden" value="1" />
    <input name="year<?php echo "$lib;" ?>" type="hidden" value="<?php echo date(Y); ?>" />
  </tr>
  <tr>
    <td colspan="10" style="border-bottom:1px solid #666;"></td>
  </tr>
  <?php ;}?>
  </table>
  <?php 
  $count = 0;
  $zahl = $row;
  while($count <= $zahl)
  {
    echo $count,", ";
    $count++;
  }
  echo $row;
  ?>
  <input type="submit" value="Anmeldung abschliessen" style="width:700px; height:25px;" />
</form>
PHP Action:
PHP:
<?php 
//Datenbank importieren
include '../../../class/db.php';

//Verbinden mit Datenbank
mysql_select_db("my_db", $connect);
$count = 0;
$zahl = $_GET[row];
  while($count < $zahl){
	$count++;
	$lib = $count++;
	$shooter = shooter.$lib;
	$status = status.$lib;
	$weapon = weapon.$lib;
	$weapon2 = weapon2.$lib;
	$year = year.$lib;
	if($_POST[weapon.$lib] == 2 or $_POST[weapon.$lib] == 3 or $_POST[weapon.$lib] == 4 or $_POST[weapon2.$lib] == 1 ){	  

		//Einfügen des Inhalts in die Datenbank
		$sql="INSERT INTO login (login_shooter, login_status, login_weapon, login_year)VALUES
		('$_POST[$shooter]','$_POST[$status]','$_POST[$weapon]','$_POST[$year]')";
	echo "RIFLE at $lib shooter_id=".$_POST[$shooter]."<br>";
	
		//Prüft ob Pistole aktiviert ist, falls ja wird ein zweiter Eintrag erstellt mit der Pistole
		if($_POST[weapon2.$lib] == 1){ 
		$sql2="INSERT INTO login (login_shooter, login_status, login_weapon, login_year)VALUES
		('$_POST[$shooter]','$_POST[$status]','$_POST[$weapon2]','$_POST[$year]')";
		}
	echo "GUN at $lib shooter_id=".$_POST[$shooter]."<br>";
	
		//Abfrage ob die Verbindung funktioniert hat sonst aushabe ERROR
		if (!mysql_query($sql,$connect))
		  {
		  die('Error: ' . mysql_error());
		  }
	  
		//Abfrage ob die Verbindung funktioniert hat sonst aushabe ERROR
		if (!mysql_query($sql2,$connect))
		  {
		  die('Error: ' . mysql_error());
		  }
		  //Weiterleiten
		echo header ("Location: ../../../../index.php?plugin=anmeldung");
	}
	else{
		echo "ERROR at $lib shooter_id=".$_POST[$shooter]."<br>";
	}
}

//Verbindung beenden
mysql_close($connect)
?>
 
Derzeit erstellst Du eine neue Reihe in der Datenbank für jedes Mal wenn sich jemand einloggt. Ist das beabsichtigt - willst Du also eine history aufbauen und dem User später anzeigen, welche Waffen er bei jedem Login hatte?

Du hast
PHP:
/Einfügen des Inhalts in die Datenbank
        $sql="INSERT INTO login (login_shooter, login_status, login_weapon, login_year)VALUES
        ('$_POST[$shooter]','$_POST[$status]','$_POST[$weapon]','$_POST[$year]')";
    echo "RIFLE at $lib shooter_id=".$_POST[$shooter]."<br>";
    
        //Prüft ob Pistole aktiviert ist, falls ja wird ein zweiter Eintrag erstellt mit der Pistole
        if($_POST[weapon2.$lib] == 1){ 
        $sql2="INSERT INTO login (login_shooter, login_status, login_weapon, login_year)VALUES
        ('$_POST[$shooter]','$_POST[$status]','$_POST[$weapon2]','$_POST[$year]')";
        }

Wenn Du keine history brauchst (was ich vermute), dann würde ich es mit UPDATE probieren, etwa so:

PHP:
//bestehenden Eintrag aktualisieren
$sql = "UPDATE login VALUES
login_shooter = '$_POST[$shooter]',
login_status = '$_POST[$status]',
login_weapon = '$_POST[$weapon]',
login_year = '$_POST[$year]'
WHERE login_id = '$user_id'";

Du fügst also nicht eine Reihe hinzu, sondern Du aktualisierst einen bestehenden Eintrag für den geloggten User. $user_id wäre dann also die ID des derzeit eingeloggten Users; idealerweise solltest Du diesen Wert in der Session gespeichert haben. All dies vorausgesetzt natürlich, dass Du der Tabelle login eine neue Reihe für jeden User hinzufügst, sobald diese einen Account erstellen.
 
Ja dies ist sehr wohl beabsichtig.
Bei diesem Tool handelt es sich nicht um irgend ein Gamescript für CS oder sowas, sondern dies ist für ein historisches Schützenfest. Somit muss ich auch in 4 Jahren noch wissen wer sich für was angemeldet hatte und was er geschossen hatte. Dies ist wichtig für die Ranglisten und genau so für die Statistik.
Wobei sich diese Ranglisten immer verzwickter darstellen. Ich hab gestern das komplette Programm erhalten, also wie was gewertet werden muss, langsam aber sicher zweifle ich dran das es einfach so möglich ist.
Evtl hilft dir dieser Link hier: http://www.aseco.ch/projects/sempacher hier ist das Tool online. Ich lade all paar Stunden die aktuellste Version hoch.
 
Huhu,

so erstmal, ich bin nicht derjenige der den schönsten PHP-Quellcode schreibt :D

Aber eine kleine verständnis frage.

Nehmen wir an du hast 1 Personen da drin.
dann hast du nachher

Person1
-Weapon1
-Weapon2
-Weapon3
-Weapon4
-Geschossen
Dann willst du eine der Waffen anklicken
und zu dieser dann sagen ob geschossen wurde
bei mehreren Personen würde sich dat da oben nur wiederholen?!

Weil wenn das nicht stimmt, dann musste nun nicht weiterlesen :D

Würde ich mich versuchen mit einem Array zu lösen.

PHP:
<?php
<td align="center"><input name="weapon[<?php echo "$lib;" ?>][0]" type="radio" value="0" checked="checked" /></td>
    <td align="center"><input name="weapon[<?php echo "$lib;" ?>][0]" type="radio" value="2" /></td>
    <td align="center"><input name="weapon[<?php echo "$lib;" ?>][0]" type="radio" value="3" /></td>
    <td align="center"><input name="weapon[<?php echo "$lib;" ?>][0]" type="radio" value="4" /></td>
    <td style="background-color:#ddd;" align="center"><input name="weapon[<?php echo "$lib;" ?>][1]" type="checkbox" value="1" /></td>
    <input name="weapon[<?php echo "$lib;" ?>][2]" type="hidden" value="<?php echo "$s->shooter_id" ?>" />
    <input name="weapon[<?php echo "$lib;" ?>][3]" type="hidden" value="1" />
    <input name="weapon[<?php echo "$lib;" ?>][4]" type="hidden" value="<?php echo date(Y); ?>" />
?>

Im nächsten Fenster sollteste das wie folgt auslesen können

PHP:
for ($i = 0; $i <= count($weapon); $i++) {
  echo "Waffe: $weapon[$i][0]<br>";
  echo "Geschossen: $weapon[$i][1]";
  echo "ID: $weapon[$i][2]";
  echo "Status: $weapon[$i][3]";
  echo "Year: $weapon[$i][4]";
}
Oder meinet wegen direkt inne DB hauen.

P.S. Ich bin mir selber nicht 100% sicher , dass das funktioniert, aber ich meine das ma so gemacht zuhaben :D

Greetz
Haribo3k
 
Zuletzt bearbeitet:
Zurück