webForumDet fria alternativet

lägga in värden från checkboxgrupp till referenstabell

PHP

2 svar · 853 visningar · startad av Willy

Medlem sedan juli 20123 inlägg
Frågan#1

Hej!

Jag har nosat igenom internet för att lösa detta men inte lyckats bli så mycket klokare av det även om ärendet behandlats på många ställen.

Jag har en tabell analys_kund med bl.a. ett fält id som är primärnyckel.
Sedan har jag en tabell exercise med ett fält drillID primär samt bl.a. en kolumn rubrik. Tanken är att man skall välja upp till 20 övningar från exercise för en golfspelare i analys_kund

Från den senare tabellen bygger jag en checkbox med rubriken som namn och drillID som value. kolla här

Med en Dreamweaver extention från Tom Muck loopar jag igenom tabellen och presenterar checkboxarna i 4 kolumner, detta för att det kommer att vara kanske 100 olika val när det är klart och jag vill inte ha en lång lista rakt ner.

Nu vill jag para ihop id från första tabellen med drillID från den andra i en referenstabell tror jag det heter (lookup table) den heter exercise_spelare_ref. Varje spelare skall som sagt kunna ha ett antal övningar listade för sig. Ref. tabellen har två komposit primärnycklar id och drillID samt även en kolumn för kommentarer som jag tänkt använda i ett senare skede för såväl tränare som spelare att kommentera varje övning för sig.

Med koden nedan kan jag lägga in en rad i ref. tabellen, välue från den sist valda checkboxen drillID och spelar ID.

Antar att jag behöver någon sorts foreach loop vid insättandet i ref. tabellen för att få med alla val men har inte lyckats räkna ut hur man gör detta.

Jag tror att jag vill ha en ny rad för varje övning i ref. tabellen så här

id drillID kommentar
21 32 NULL
21 34 NULL
21 47 NULL
35 31 NULL
35 33 NULL

<?php
if(!isset($tfm_rows) || intval($tfm_rows) == 0){$tfm_rows = -1;}
if(!isset($tfm_columns) || intval($tfm_columns) == 0){$tfm_columns = 4;}
if(!isset($tfm_vertical)){$tfm_vertical = "true";}
?>
<?php require_once('mappnamn/filnamn.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $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;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO exercise_spelare_ref (id, drillID) VALUES (%s, %s)",
                       GetSQLValueString($_POST['spelareID'], "text"),
                       GetSQLValueString($_POST['drillSelect'], "text"));

  mysql_select_db($database_connect, $connect);
  $Result1 = mysql_query($insertSQL, $connect) or die(mysql_error());
}

// Horizontal looper block 1 -- set up array, row and column values
$HLoop_Recordset1 = array();
$HLoop_Recordset1_rows = $tfm_rows;
$HLoop_Recordset1_columns = $tfm_columns;
$HLoop_Recordset1_vertical = $tfm_vertical;

if($HLoop_Recordset1_vertical == "true") {
	$HLoop_Recordset1_loopTo = $HLoop_Recordset1_rows;
}else{
	$HLoop_Recordset1_loopTo = $HLoop_Recordset1_columns;
}
$HLoop_Recordset1_i = 0;
$HLoop_Recordset1_ii = 0;
$HLoop_Recordset1_actualrows = 1;

mysql_select_db($database_connect, $connect);
$query_Recordset1 = "SELECT * FROM exercise";
$Recordset1 = mysql_query($query_Recordset1, $connect) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

$colname_rsSpelare = "-1";
if (isset($_GET['id'])) {
  $colname_rsSpelare = $_GET['id'];
}
mysql_select_db($database_connect, $connect);
$query_rsSpelare = sprintf("SELECT id, user_login, first_name, last_name FROM analys_kund WHERE id = %s", GetSQLValueString($colname_rsSpelare, "int"));
$rsSpelare = mysql_query($query_rsSpelare, $connect) or die(mysql_error());
$row_rsSpelare = mysql_fetch_assoc($rsSpelare);
$totalRows_rsSpelare = mysql_num_rows($rsSpelare);

mysql_select_db($database_connect, $connect);
$query_rsRef = "SELECT * FROM exercise_spelare_ref";
$rsRef = mysql_query($query_rsRef, $connect) or die(mysql_error());
$row_rsRef = mysql_fetch_assoc($rsRef);
$totalRows_rsRef = mysql_num_rows($rsRef);
$query_Recordset1 = "SELECT drillID, categori, rubrik FROM exercise";
$Recordset1 = mysql_query($query_Recordset1, $connect) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

if ($HLoop_Recordset1_rows < 1){
	$HLoop_Recordset1_rows = ceil($totalRows_Recordset1 / $HLoop_Recordset1_columns);
	if($HLoop_Recordset1_loopTo < 1) {
		$HLoop_Recordset1_loopTo = $HLoop_Recordset1_rows;
	}
} 
?>
<!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>Välj Övningar</title>
</head>

<body>
<strong>Spelare: <?php echo $row_rsSpelare['first_name']; ?>  <?php echo $row_rsSpelare['last_name']; ?></strong><br />
<br />
<form id="form1" name="form1" method="POST" action="<?php echo $editFormAction; ?>">
  <?php 
// Horizontal Looper start code for Recordset1

do {
ob_start();
?>
    <input type="checkbox" name="drillSelect" value="<?php echo $row_Recordset1['drillID']; ?>" id="drillSelect" />
    <?php echo $row_Recordset1['rubrik']; ?>
    </label>
    <?php
// HLooper manage the arrays for Recordset1
$HLoop_Recordset1_temp = ob_get_contents(); //dump buffer to variable
ob_end_clean(); //clear buffer
$HLoop_Recordset1[$HLoop_Recordset1_i][$HLoop_Recordset1_ii] = $HLoop_Recordset1_temp;
$HLoop_Recordset1_ii++;
if($HLoop_Recordset1_ii >= $HLoop_Recordset1_loopTo){
	$HLoop_Recordset1_i++;
	$HLoop_Recordset1_ii = 0;
	$HLoop_Recordset1_actualrows++;
};
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
if($HLoop_Recordset1_actualrows < $HLoop_Recordset1_rows && $HLoop_Recordset1_vertical == "false") $HLoop_Recordset1_rows = $HLoop_Recordset1_actualrows;
if($HLoop_Recordset1_actualrows < $HLoop_Recordset1_columns && $HLoop_Recordset1_vertical == "true") $HLoop_Recordset1_columns = $HLoop_Recordset1_actualrows;

?>
  <table class="hloop">
    <?php for($i = 0; $i < $HLoop_Recordset1_rows; $i++) { ?>
    <tr>
      <?php for($ii = 0; $ii < $HLoop_Recordset1_columns; $ii++) { ?>
      <td><?php
            if($HLoop_Recordset1_vertical == "true") {
              echo(isset($HLoop_Recordset1[$ii][$i]) ? $HLoop_Recordset1[$ii][$i] : "&nbsp;");
             }else{
              echo(isset($HLoop_Recordset1[$i][$ii]) ? $HLoop_Recordset1[$i][$ii] : "&nbsp;");
            } ?></td>
      <?php } ?>
    </tr>
    <?php } // End Horizontal/Vertical Looper code for Recordset1 ?>
  </table>
  <input name="spelareID" type="hidden" value="<?php echo $row_rsSpelare['id']; ?>" />
  <input type="hidden" name="MM_insert" value="form1" />
  <input type="submit" name="submit" id="submit" value="Välj övningar" />
</form>
<p>
</p>

</body>
</html>
<?php
mysql_free_result($Recordset1);

mysql_free_result($rsSpelare);

mysql_free_result($rsRef);
?>

Hoppas att jag utryckt mig begripligt och att någon vänlig själ orkar kolla på detta.

Willy

Medlem sedan juli 20123 inlägg
#2

Ok!
Jag lyckades lägga in värdena som önskat med:

<?php
$id = $_POST['spelarID']; 
    $drills = $_POST['drillSelect']; 
	
$inserts = array(); 
foreach ($drills as $drills)
    $inserts[] = "('$id','$drills','')"; 
 
$query = "INSERT INTO exercise_spelare_ref VALUES ". implode(", ", $inserts); 
 
//echo "query = $query"; // for debugging purposes, remove this once it is working 
mysql_query($query) or die(mysql_error()); 

?>

Då uppstår ju ett nytt problem, hur jag skall bygga updateringssidan så att de lagrade värdena visar relevanta checkboxar som markerade.

Normalt gör man ju nånting sånthär när det inte handlar om dynamiska checkboxar:

<input <?php if (!(strcmp($row_rsRef['drillID'],1))) {echo "checked=\"checked\"";} ?> type="checkbox" name="CheckboxGroup1" value="1" id="CheckboxGroup1_0" />

        chkbox1</label>

Någon som kan?

Medlem sedan juli 20123 inlägg
#3

echo checked

Jag kan nu lägga in värden i referens tabellen "exercise_spelare_ref" så här:

id drillID kommentar
21 32 NULL
21 34 NULL
21 47 NULL
35 31 NULL
35 33 NULL

id och drillID är komposit primär.

Jag kan (av testskäl) echo värdena id och drillID med:

$id = $row_rsRef['id']; 
$drills = $row_Recordset1['drillID'];

//echo $id;
//echo $drills;
$arr = array($id,$drills);
$selected = implode(", ", $arr);
echo $selected;

kolla här

Då tycker jag att jag borde kunna få checkboxarna som tidigare valts och finns i tabellen "checked" med något liknande:

$id = $row_rsRef['id']; 
$drills = $row_Recordset1['drillID'];

//echo $id;
//echo $drills;
$arr = array($id,$drills);
$selected = implode(", ", $arr);
echo $selected;

 

<input <?php if ($row_rsRef['$selected']==true) {echo "checked=\"checked\"";} ?> type="checkbox" name="drillSelect[]" value="<?php echo $row_Recordset1['drillID']; ?>" id="drillSelect" />
    <?php echo $row_Recordset1['rubrik']; ?>
    </label>

Men icke!
Någon som kan?

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)