Meerdere records teglijk invoegen

Status
Niet open voor verdere reacties.

speedycyclist

Gebruiker
Lid geworden
26 feb 2009
Berichten
8
Ik zit met het volgende probleem,

ik heb een tabel met leden van een fietsclub, tevens een tabel met een aantal ritten die zij fietsen. Nu heb ik een formulier gemaakt waar 1 rit (uit tabel ritten) bovenaan te voorschijn komt en daaronder komen alle leden te staan van de club (uit de tabel leden). Leden komen te voorschijn met hun naam, voornaam en lidummer. Daarnaast komt nog eens de ritnummer te staan. Daarnaast heb ik een checkbox geplaatst dat ik kan aanvinken. Van zodra ik iedereen heb aangevinkt die met deze bepaalde rit is meegereden en op 1 knop klik zouden al deze records direkt achter elkaar (wel bepaald de lidnummer en ritnummer) moeten worden opgeslagen in een derde tabel waar dan alleen de lidnummers en ritnummers instaan. Dit om later deze gegevens te filteren met welke ritten bepaalde leden hebben meegereden.

Is dit mogelijk door op 1 knop te klikken??? Nu heb ik het zo gemaakt dat ik telkens 1 checkbox aanvink en direkt daarnaast op een knop klik (dus naast elke record staat nu een knop voor die bepaalde record) die dan die record opslaat. Maar ik zou het graag in 1 keer klikken doen.

Hartelijk dank voor uw hulp
 
Dat kan zeker :)

Het beste kun je aan je checkboxes een array hangen:
Code:
<input type="checkbox" name="lijst[]" value="<?php echo $rit_id ?>" /><?php echo $rit_naam ?>

Vervolgens kun je in je code deze array opvragen, en in een loop 1-voor-1 elke INSERT doen:
PHP:
<?php 
  foreach ( $_POST['lijst'] as $rit_id ) {
    $sql = "INSERT INTO koppel_tabel ( rit_id, lid_id )
               VALUES ( " . $rit_id . " , " . $lid_id . ")";
    mysql_query ( $sql );
  }
?>

Succes!
 
Da ga ik is uitproberen ze. Hartelijk dank om mij op weg te helpen. (ik ben dan ook nog een beginner in php)
 
Laatst bewerkt door een moderator:
krijg foutmelding

Hallo ik krijg volgende foutmelding van in mijn browser als ik de pagina in de browser vertoon;

Warning: Invalid argument supplied for foreach() in C:\wamp\www\kaws\ritten\ritten_leden_toevoegen_test.php on line 152

Van zodra ik dan een paar checkboxen aanduid en ze invoeg in de Db lukt dit wel maar de laatste record komt er altijd in ook al is deze niet aangeduid. (als hij wel is aangeduid wordt hij 2 maal in de database ingevoegd.

Daarna word het formulier opnieuw geladen en dan verschijnt die foutmelding niet meer. Raar, ik weet niet wat ik verkeerd doe kan iemand mij hier helpen?

De Code is als volgt;
PHP:
<body>
<p>Hier kan je leden toevoegen voor rit (<?php echo $row_rsRitten['ritnaam']; ?>) te <?php echo $row_rsRitten['plaats']; ?> op datum van <?php echo $row_rsRitten['datum']; ?>.</p>
<table width="750" border="0" cellspacing="2" cellpadding="2">
  <tr class="Tabelkop">
    <td width="90">Ritnummer</td>
    <td width="104">Datum</td>
    <td width="151">Plaats</td>
    <td width="242">Naam</td>
    <td width="112">Afstand</td>
  </tr>
  <tr>
    <td><?php echo $row_rsRitten['id']; ?></td>
    <td><?php echo $row_rsRitten['datum']; ?></td>
    <td><?php echo $row_rsRitten['plaats']; ?></td>
    <td><?php echo $row_rsRitten['ritnaam']; ?></td>
    <td><?php echo $row_rsRitten['afstand']; ?></td>
  </tr>
</table>
<p>&nbsp;</p>
<form action="<?php echo $editFormAction; ?>" id="frmLedenToevoegen" name="frmLedenToevoegen" method="POST">
  <table width="750" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td width="157">Achternaam</td>
      <td width="135">Voornaam</td>
      <td width="129">Woonplaats</td>
      <td width="122" align="center">Lidnr</td>
      <td width="118" align="center">Ritnr</td>
      <td width="89" align="center">Aanwezig</td>
    </tr>
    <?php do { ?>
      <tr>
        <td height="39"><?php echo $row_rsLeden['achternaam']; ?></td>
        <td><?php echo $row_rsLeden['voornaam']; ?></td>
        <td><?php echo $row_rsLeden['plaats']; ?></td>
        <td><label>
          <input name="lidnr" type="text" id="lidnr" value="<?php echo $row_rsLeden['lidnr']; ?>" />
        </label></td>
        <td><label>
          <input name="ritnr" type="text" id="ritnr" value="<?php echo $row_rsRitten['id']; ?>" />
        </label></td>
        <td align="center"><label>
          <input type="checkbox" name="aanwezig[]" value="<?php echo $row_rsLeden['lidnr']?>"/>
        </label></td>
      </tr>
      <?php } while ($row_rsLeden = mysql_fetch_assoc($rsLeden)); ?>
  </table>
  <p>
    <label>
    <input type="submit" name="LedenToevoegen" id="LedenToevoegen" value="Leden toevoegen" />
    </label>
  </p>
  	<?php
		foreach ( $_POST['aanwezig'] as $row_rsLeden['lidnr'] ) {
			$sql = "INSERT INTO rit_leden ( lidnr, ritnr )
				VALUES ( " . $row_rsLeden['lidnr'] . "," . $row_rsRitten['id'] . ")";
			mysql_query ( $sql );
			}
	?>
  <input type="hidden" name="MM_insert" value="frmLedenToevoegen" />
</form>
<p>&nbsp;</p>
</body>
 
Laatst bewerkt:
Je checkt nergens of $_POST['aanwezig'] wel bestaat... je kunt niet foreach'en over een niet bestaande waarde. Zet er dus eerst een checkje voor :)
 
Je checkt nergens of $_POST['aanwezig'] wel bestaat... je kunt niet foreach'en over een niet bestaande waarde. Zet er dus eerst een checkje voor :)

Ik dank je nu al voor je hulp maar snap niet wat je bedoelt.
wat bedoel je precies met een checkje ervoor? (sorry dat is voor mij chinees)
Ben maar beginner hé :o
 
Waarschijnlijk een check in de zin van
PHP:
if(isset($_POST['aanwezig'])) {
     foreach ( $_POST['aanwezig'] as $row_rsLeden['lidnr'] ) { 
            $sql = "INSERT INTO rit_leden ( lidnr, ritnr ) 
                VALUES ( " . $row_rsLeden['lidnr'] . "," . $row_rsRitten['id'] . ")"; 
            mysql_query ( $sql ); 
     } 
}
 
ok heb nu het volgende

de foutmelding is weg wanneer ik hem in de browser vertoon maar de laatste record word nog steeds toegevoegd aan mijn database zonder dat ik hem selecteer in de checkbox. Als ik hem wel selecteer word hij 2x toegevoegd. Iemand daar een verklaring voor??

code tot nu toe =

PHP:
<p>Hier kan je leden toevoegen voor rit (<?php echo $row_rsRitten['ritnaam']; ?>) te <?php echo $row_rsRitten['plaats']; ?> op datum van <?php echo $row_rsRitten['datum']; ?>.</p>
<table width="697" border="0" cellspacing="2" cellpadding="2">
  <tr class="Tabelkop">
    <td width="82">Ritnummer</td>
    <td width="102" align="center">Datum</td>
    <td width="133">Plaats</td>
    <td width="240">Naam</td>
    <td width="108" align="center">Afstand</td>
  </tr>
  <tr>
    <td align="center"><?php echo $row_rsRitten['id']; ?></td>
    <td align="center"><?php echo $row_rsRitten['datum']; ?></td>
    <td><?php echo $row_rsRitten['plaats']; ?></td>
    <td><?php echo $row_rsRitten['ritnaam']; ?></td>
    <td align="center"><?php echo $row_rsRitten['afstand']; ?></td>
  </tr>
</table>
<p>&nbsp;</p>
<form action="<?php echo $editFormAction; ?>" id="frmLedenToevoegen" name="frmLedenToevoegen" method="POST">
  <table width="605" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td width="148">Achternaam</td>
      <td width="129">Voornaam</td>
      <td width="131">Woonplaats</td>
      <td width="69" align="center">Lidnr</td>
      <td width="53" align="center">Ritnr</td>
      <td width="75" align="center">Aanwezig</td>
    </tr>
    <?php do { ?>
      <tr>
        <td height="39"><?php echo $row_rsLeden['achternaam']; ?></td>
        <td><?php echo $row_rsLeden['voornaam']; ?></td>
        <td><?php echo $row_rsLeden['plaats']; ?></td>
        <td align="center"><label>
          <input name="lidnr" type="text" id="lidnr" value="<?php echo $row_rsLeden['lidnr']; ?>" size="8" />
        </label></td>
        <td align="center"><label>
          <input name="ritnr" type="text" id="ritnr" value="<?php echo $row_rsRitten['id']; ?>" size="5" />
        </label></td>
        <td align="center"><label>
          <input type="checkbox" name="aanwezig[]" value="<?php echo $row_rsLeden['lidnr']?>"/>
        </label></td>
      </tr>
     <?php } while ($row_rsLeden = mysql_fetch_assoc($rsLeden)); ?>
  </table>
  <p>
    <label>
    <input type="submit" name="LedenToevoegen" id="LedenToevoegen" value="Leden toevoegen" />
    </label>
  </p>
  	<?php
		if(isset($_POST['aanwezig'])) {
			foreach ( $_POST['aanwezig'] as $row_rsLeden['lidnr'] ) {
				$sql = "INSERT INTO rit_leden ( lidnr, ritnr )
					VALUES ( " . $row_rsLeden['lidnr'] . "," . $row_rsRitten['id'] . ")";
				mysql_query ( $sql );
			}
		}
	?>
  <input type="hidden" name="MM_insert" value="frmLedenToevoegen" />
</form>
<p>&nbsp;</p>
</body>
</html>
<?php
 
Is dit de hele code? Want je verwijst op de eerste regel naar allerlei variabelen die niet bestaan.

Daarnaast zou je eens moeten overwegen om de alternatieve syntax van PHP te gebruiken, die is wat leesbaarder:
PHP:
<?php if ( condition ) : ?>
html
<?php endif; ?>
vs.
PHP:
<?php if ( condition ) { ?>
html
<?php } ?>

Daarnaast gebruik je een do {} while () loop hier; dat is niet verstandig, die moet je alleen gebruiken als je gegarandeerd 1 resultaat of meer hebt, en zelfs dan kun je vaak beter gewoon voor een while() {} constructie gaan, die is logischer :)

Ik kan het zo niet echt zien; als dit alles is zou er niks ge-insert moeten worden maar ik heb het gevoel dat de hele code groter is en dat het probleem ergens anders zit :)
 
Het formulier werkt voorlopig wel alleen dat foutje nog van die laatste record dat steeds ingevoegd word

Dit is de volledige code:

PHP:
<?php require_once('../Connections/conKaws.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$colname_rsRitten = "-1";
if (isset($_GET['id'])) {
  $colname_rsRitten = $_GET['id'];
}
mysql_select_db($database_conKaws, $conKaws);
$query_rsRitten = sprintf("SELECT id, ritnaam, datum, plaats, afstand FROM ritten WHERE id = %s", GetSQLValueString($colname_rsRitten, "int"));
$rsRitten = mysql_query($query_rsRitten, $conKaws) or die(mysql_error());
$row_rsRitten = mysql_fetch_assoc($rsRitten);
$totalRows_rsRitten = mysql_num_rows($rsRitten);

mysql_select_db($database_conKaws, $conKaws);
$query_rsLeden = "SELECT lidnr, voornaam, achternaam, plaats, afdeling FROM leden ORDER BY afdeling ASC, achternaam ASC, voornaam ASC";
$rsLeden = mysql_query($query_rsLeden, $conKaws) or die(mysql_error());
$row_rsLeden = mysql_fetch_assoc($rsLeden);
$totalRows_rsLeden = mysql_num_rows($rsLeden);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
<!--
.Tabelkop {font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10pt;
	font-weight: bold;
	color: #003366;
	border: 2px double #003366;
}
.Tabelkop {font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10pt;
	font-weight: bold;
	color: #003366;
	border: 2px double #003366;
}
.Tabelkop {	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10pt;
	font-weight: bold;
	color: #003366;
	border: 2px double #003366;
}
.frmZonderMarge {	margin: 0px;
	padding: 0px;
	border-top-style: none;
	border-right-style: none;
	border-bottom-style: none;
	border-left-style: none;
}
-->
</style>
</head>

<body>
<p>Hier kan je leden toevoegen voor rit (<?php echo $row_rsRitten['ritnaam']; ?>) te <?php echo $row_rsRitten['plaats']; ?> op datum van <?php echo $row_rsRitten['datum']; ?>.</p>
<table width="697" border="0" cellspacing="2" cellpadding="2">
  <tr class="Tabelkop">
    <td width="82">Ritnummer</td>
    <td width="102" align="center">Datum</td>
    <td width="133">Plaats</td>
    <td width="240">Naam</td>
    <td width="108" align="center">Afstand</td>
  </tr>
  <tr>
    <td align="center"><?php echo $row_rsRitten['id']; ?></td>
    <td align="center"><?php echo $row_rsRitten['datum']; ?></td>
    <td><?php echo $row_rsRitten['plaats']; ?></td>
    <td><?php echo $row_rsRitten['ritnaam']; ?></td>
    <td align="center"><?php echo $row_rsRitten['afstand']; ?></td>
  </tr>
</table>
<p>&nbsp;</p>
<form action="<?php echo $editFormAction; ?>" id="frmLedenToevoegen" name="frmLedenToevoegen" method="post">
  <table width="530" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td width="74" align="center">Aanwezig</td>
      <td width="74">Achternaam</td>
      <td width="129">Voornaam</td>
      <td width="131">Woonplaats</td>
      <td width="69" align="center">Lidnr</td>
      <td width="53" align="center">Ritnr</td>
    </tr>
    <?php do { ?>
    <tr class="frmZonderMarge">
      <td height="39" align="center"><input type="checkbox" name="aanwezig[]" value="<?php echo $row_rsLeden['lidnr']?>"/></td>
      <td height="39"><?php echo $row_rsLeden['achternaam']; ?></td>
      <td><?php echo $row_rsLeden['voornaam']; ?></td>
      <td><?php echo $row_rsLeden['plaats']; ?></td>
      <td align="center"><label>
        <input name="lidnr" type="text" id="lidnr" value="<?php echo $row_rsLeden['lidnr']; ?>" size="8" />
      </label></td>
      <td align="center"><label>
        <input name="ritnr" type="text" id="ritnr" value="<?php echo $row_rsRitten['id']; ?>" size="5" />
      </label></td>
    </tr>
    <?php } while ($row_rsLeden = mysql_fetch_assoc($rsLeden)); ?>
  </table>
  <p>
    <label>
      <input type="submit" name="LedenToevoegen" id="LedenToevoegen" value="Leden toevoegen" />
    </label>
  </p>
  <?php
		if(isset($_POST['aanwezig'])) {
			foreach ( $_POST['aanwezig'] as $row_rsLeden['lidnr'] ) {
				$sql = "INSERT INTO rit_leden ( lidnr, ritnr )
					VALUES ( " . $row_rsLeden['lidnr'] . "," . $row_rsRitten['id'] . ")";
				mysql_query ( $sql );
			}
		}
	?>
  <input type="hidden" name="MM_insert" value="frmLedenToevoegen" />
</form>
</body>
</html>
<?php
mysql_free_result($rsRitten);
mysql_free_result($rsLeden);
?>
 
Hallo Frats

Ik dank je eerst al voor uw geboden hulp en tips. Ben al blij dat ik het nu zo ver heb om het te laten werken. Zit nu alleen nog met dat foutje van de laatste record dat nog steeds ingevoegd wordt in de database zonder dat deze aangevinkt is. Ik heb hierboven de volledige code van die pagina gezet. Zie jij nog waar ik die fout moet zoeken???

Hartelijk dank, alle hulp is welkom.
 
Ik kan vanavond of morgen even voor je kijken, ben op dit moment niet achter mijn eigen pc ;)
 
Hmmm, ik zie er echt niks van :/

Volgensmij zit hier geen fout in hoor... kun je voor de zekerheid eens na de isset ( $_POST['aanwezig'] ) een var_dump ( $_POST['aanwezig'] ) doen om te kijken wat er allemaal inzit?

Misschien dat dat helpt; maar ik heb het gevoel dat het ergens anders zit. Heb je niet ergens een test-query zitten ofzo? Misschien in je include?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan