Checkboxen per POST weitergeben und in Datenbank eintragen

DonDemf

Erfahrenes Mitglied
Hallo Jungs,
aufgrund der tollen Hilfe hier, wende ich mich einfach mal weiter an euch.

Meine tabelle sieht folgendermaßen aus:
Tabelle::::Mannschaften:
id/name/liga/besitzer

besitzer ist hirbei standartmäßig leer.


Ich gebe diese tabelle mit folgendem php code aus: das wixchtige sind heirbei ja eigentlich die while-schleifen. Das drumherum ist ja eher unwichtig für meine Frage!
(die Struktur der ausgabe ist: bild/name/liga/checkbox um sie auszuwählen)
PHP:
<?php
// variabeln
$abfrage_bl = "SELECT * FROM fifa_mannschaften WHERE besitzer = '' AND liga = '1. Bundesliga' ORDER BY name";
$ergebnis_bl = mysql_query($abfrage_bl);
// seite
if(!isset($_SESSION["username"])) {
	echo '<table width="592" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><h1>Freie Teams</h1></td>
  </tr>
  <tr>
    <td>Du musst eingeloggt sein, um eine Auswahl zu treffen.</td>
  </tr>
</table>'; } else 
//gebe die freien mannschaften aus + select möglichkeit
{ 
echo '<table width="592" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><h1>Freie Teams</h1></td>
  </tr>
  <tr>
    <td height="256"><p>Hier findest du eine Auswahl an Teams, die noch keinen Trainer haben und somit zur Verfügung stehen! Wenn du am Spielbetrieb teilnehmen möchtest, wähle eines der Teams.</p>
    <p><center><img src="image/bundesliga_banner.gif" width="300" height="104" /></center></p>
    <table width="590" border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td width="50" align="left">&nbsp;</td>
		<td width="245" align="left"><strong>Mannschaft:</strong></td>
        <td width="245" align="left"><strong>Liga:</strong></td>
		<td width="50" align="left">&nbsp;</td>
        
      </tr>
    </table>
   <form id="form_bl" name="form_bl" method="post" action="?seite=selectteam"> <table width="590" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td width="295" align="center"><table width="590" border="0" align="center" cellpadding="0" cellspacing="0">
        ';
		while($row_bl = mysql_fetch_object($ergebnis_bl))
   {
   echo '<tr><td width="50" align="left"><img src="image/vereine/'.$row_bl->id.'.png"></td>
   <td width="245" align="left">'.$row_bl->name.'</td>
          <td width="245" align="left">'.$row_bl->liga.'</td>
		  <td width="50" align="left"><input type="checkbox" name="checkbox" id="checkbox" /></td>
   </tr>
   ';
   } 
          
		  
		  
       echo '</table><br><input type="submit" name="button" id="button" value="Team wählen" /></td>
    </tr>
    </table></form>';
?>

Nun möchte ich, dass die Benutzer eine mannschaft auswählen und wenn sie auf "mannschaft wählen" klicken ein POST Formular(welches ja bereits eingefügt wurde) die Checkbox an eine Seite überliefert, welche dann in die Tabelle als Besitzer den $Session["username"] einträgt.

Nun weiß ich aber nicht, wie mein script erkennen soll, welche Mannschaft. bzw. welche Checkbox aktiviert wurde.


Würde mich über Hilfe freien,
lg!
 
Weil dein input-Feld keine Value hat. Folgendes Beispiel:

HTML:
<form action="foo.php" method="post">
  <input type="checkbox" name="team[]" value="Eintracht Frankfurt"/>
  <input type="checkbox" name="team[]" value="Borussia Dortmund"/>
  <input type="checkbox" name="team[]" value="FC Bayern München"/>
  ....
  <input type="submit" value="Eintragen"/>
</form>

und dann die foo.php

PHP:
$teams = $_POST['team'];
foreach($teams as $team)
{
  echo "Gewählt wurde $team<br/>";
}

Btw: wäre es nicht besser, ein Radio-Button zu verwenden, oder sollen wirklich mehrere Mannschaften ausgewählt werden können?
 
Ne, es darf nur EINE mannschaft gewählt werden. Diese Mannschaf die gewählt wurde soll dann bei in der datenbank den Besitzer $_SESSION["username"] erhalten. :-)

kannst du mir da auch nochmal helfen? mit den rdiobuttons
 
Dann sollte das Formular mit den Radio-Buttons ungefähr so aussehen:

HTML:
<form action="foo.php" method="post">
  <input type="radio" name="team" value="Eintracht Frankfurt"/>
  <input type="radio" name="team" value="Borussia Dortmund"/>
  <input type="radio" name="team" value="FC Bayern München"/>
  ....
  <input type="submit" value="Eintragen"/>
</form>
 
Ok, also ich habe jetzt folgends gemacht, aber leider funktioniert es noch nicht.
So sieht jetzt meine Tabelle aus, wo alle mannschafen die noch keinen besitzer haben angezeigt werden. Hiter jeder mannnschaft ist ein radiobutton und der soll den namen der id des Teams haben. Damit ich hinterher bei meiner selectteam seite einfach nur den besitzer des Datensatzes mit der id $select zu Session[username] ändern muss.



PHP:
while($row_bl = mysql_fetch_object($ergebnis_bl))
   {
   echo '<tr><td width="50" align="left"><img src="image/vereine/'.$row_bl->id.'.png"></td>
   <td width="245" align="left">'.$row_bl->name.'</td>
          <td width="245" align="left">'.$row_bl->liga.'</td>
		  <td width="50" align="left"><input type="radio" name="select" value="'.$row_bl->id.'"/></td>
   </tr>
   ';
   }




Das ist die selectteam seite:

PHP:
<?php
$select = $_POST["select"];
$aendern = 'UPDATE fifa_mannschfen Set
besitzer = "'.$_SESSION["username"].'"
WHERE id = "'.$select.'"';
if($select!="")
   {
   $update = mysql_query($aendern);
   if($update == TRUE) {
	   echo '<b>Herzlichen Glückwunsch!</b><br>Du bist nun Trainer bei Fifa-Place.de! <a href="index.php">Zur Startseite >></a>';
   } else {
	   echo '<b>Achtung:</b> Es ist ein unbekannter Fehler aufgetreten. Bitte kontaktiere einen Administrator oder versuche es erneut!<br><a href="?seite=getateam">Zurück >></a>'; }
   }
else
   {
   echo 'Du musst ein Team auswählen! <a href="?seite=getateam">Zurück >></a>';
   }
?>
 
Was genau funktioniert denn nicht? Kommt die else-Meldung? Kommt überhaupt eine Meldung? Hast du den Query $aendern mal mit echo ausgegeben, um zu sehen, was dann an mysql_query() übergeben wird? Hast du mal mysql_error() verwendet um evtl. Fehler beim Query zu sehen? Hast du das error_reporting und display_errors angeschaltet?
 
Ja, es kam die Else meldung. Da war irgendetwas falsch. Habe es jetzt aber hinbekommen. :-)

Vielen Dank für die grandiose Hilfe hier! Werde ich mit sicherheit noch öfters beanspruchen :P
 
Im Übrigen, in SQL-Statements sollte man bei Zeichenketten immer einfache Anführungszeichen (Single-Quotes) notieren, statt der doppelten. Was ich richtig cool finde, sind solche Commands:

PHP:
$aendern = sprintf("UPDATE fifa_mannschfen Set besitzer = '%s' WHERE id = %d", $_SESSION["username"], $select);

Sieht erstens viel schöner aus und zweitens kommt da gleiche ein bisschen Sicherheit rein.

Außerdem vertraut man nicht einfach Daten, die aus einem Formular oder einem Link kommen, denn die könnten manipuliert worden sein. Daher hier noch ein etwas erweitertes Beispiel:

PHP:
$aendern = sprintf("UPDATE fifa_mannschfen Set besitzer = '%s' WHERE id = %d",
                    mysql_real_escape_string($_SESSION["username"]),
                    intval($select) );
 
Außerdem vertraut man nicht einfach Daten, die aus einem Formular oder einem Link kommen, denn die könnten manipuliert worden sein.
Siehe auch in mein Tutorial Sicherheit in PHP-Codes schaffen - Punkt 3.

Wo wir schon beim Thema sind: Sollte man eigene $_SESSION-Variablen auch in *escape-Funktionen packen? Eigentlich können die ja nicht manipuliert werden, außer wenn man die Session-Dateien auf dem Webserver modifiziert!
 
Zuletzt bearbeitet:
Zurück