[code]
<?php
  session_start ();

  // Dit script maakt een datagrid van een willekeurige MySql tabel
  // Je hoeft dus niet vooraf de kolomnamen te weten of het aantal kolommen
  // De enige aanname is dat de eerste kolom id heet

  // ToDo list:
  // * een delete functie
  // * sorteren (ASC en DESC)
  
  // Veel plezier met het bestuderen van dit script en opmerkingen/vragen zijn welkom

  // hierin de gegevens om te connecten met de database
  require ('db_config.php');
  
  // deze functie kijkt of alle velden van een formulier ingevuld zijn (method=POST)
  function filled_in () {
    foreach ($_POST as $key => $value) {
      // trim () verwacht een string, dus dubbele quotes om $value, anders krijg ik een notice
      $value = trim ("$value");
      
      if (!isset ($key) || empty ($value)) {
        return false;
      }
    }
    return true;
  }
  
  // bescherm tegen MySql injection
  // met dank aan Dave, zie ook http://www.phphulp.nl/php/tutorials/3/244/
  // ik heb lees in de reacties op zijn tutorial dat er misschien andere 
  // (betere?) manieren zijn. Dat hoor ik dan natuurlijk graag
  function quote_smart ($value) {
    if (get_magic_quotes_gpc ()) {
      $value = stripslashes($value);
    }
    if (version_compare (phpversion (),"4.3.0") == "-1") {
      return mysql_escape_string ($value);
    }
    else {
      return mysql_real_escape_string ($value);
    }
  }

  
  function draw_selectbox ($records, $selected) {
    echo '<select id="first" name="first">';
    
    for ($i = 0; $i < $records; $i += 10) {
      if ($i == $selected) {
        echo '<option value="' . $i . '" selected>' . $i . ' tot ' . ($i + 10) . '</option>';
      }
      else {
        echo '<option value="' . $i . '">' . $i . ' tot ' . ($i + 10) . '</option>';
      }
    }

    echo '</select>';
    echo '<input id="go" name="go" type="submit" value="go">';
  }
    
  $first = 0;
  $fields = mysql_list_fields ($db_name, 'test');
  $columns = mysql_num_fields ($fields);
  
  for ($i = 0; $i < $columns; $i++) {
    $fieldnames[$i] = mysql_field_name ($fields, $i);
  }  

  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // saven van de tien (of minder) huidige records
    if (isset ($_POST['update'])) {
      // standaard heb je 10 records, maar het kunnen er ook minder zijn.
      // bijvoorbeeld op de laatste pagina, dus toch maar even tellen
      $num_records = count ($_POST[$fieldnames[0]]);
      
      for ($j = 0; $j < $num_records; $j++) {
        $sql = "
          UPDATE test
          SET ";
        
        for ($i = 1; $i < $columns - 1; $i++) {
          $_POST[$fieldnames[$i]][$j] = quote_smart ($_POST[$fieldnames[$i]][$j]);
          $sql .= "{$fieldnames[$i]} = '{$_POST[$fieldnames[$i]][$j]}', ";
        }
    
        $_POST[$fieldnames[$columns - 1]][$j] = quote_smart ($_POST[$fieldnames[$columns - 1]][$j]);
        $sql .= "
          {$fieldnames[$columns - 1]} = '{$_POST[$fieldnames[$columns - 1]][$j]}'
          ";
          
        $_POST[$fieldnames[0]][$j] = quote_smart ($_POST[$fieldnames[0]][$j]);
        $sql .= "
          WHERE {$fieldnames[0]} = '{$_POST[$fieldnames[0]][$j]}'
          ";
    
        mysql_query ($sql) or die (mysql_error ());
        //echo $sql;
      }
    }
    // nieuwe record toevoegen
    elseif (isset ($_POST['add'])) {
      // alle velden ingevuld?
      if (filled_in ()) {      
        $sql = "
          INSERT INTO test
          VALUES ('',
          ";
  
        for ($i = 1; $i < $columns - 1; $i++) {
          $_POST['add_' . $fieldnames[$i]] = quote_smart ($_POST['add_' . $fieldnames[$i]]);
          $sql .= "'{$_POST['add_' . $fieldnames[$i]]}', ";
        }
        
        $_POST['add_' . $fieldnames[$columns - 1]] = quote_smart ($_POST['add_' . $fieldnames[$columns - 1]]);
        $sql .= "'{$_POST['add_' . $fieldnames[$columns - 1]]}')";
        mysql_query ($sql) or die (mysql_error ());
        // echo $sql;
      }
      else {
        $error = 'Niet alle velden waren ingevuld';
      }
    }
    elseif (isset ($_POST['go'])) {
      $_SESSION['first']  = $_POST['first'];
    }
  }
?>









<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html lang="nl">

<head>
  <title> Koehoorn IT </title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

  <script language="javascript" type="text/javascript" src="microapi.js"></script>

  <link href="jankoehoorn.css" rel="stylesheet" type="text/css" media="screen">
</head>

<body>

  <div id="container">
    <h3>Case-study: data-grid</h3>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

    <?php
      $sql = "
        SELECT COUNT(*)
        AS records
        FROM test
        ";
      $res = mysql_query ($sql);
      $obj = mysql_fetch_object ($res);
      
      // als de selectbox gebruikt is, bestaat er een sessievariabele voor
      // de eerste record die getoond moet worden
      if (isset ($_SESSION['first'])) {
        $first = $_SESSION['first'];
      }
      else {
        $first = 0;
      }

      // hebben we meer dan tien records? dan tekenen we een selectbox
      if ($obj->records > 10) {
        draw_selectbox ($obj->records, $first);
      }
      
      $sql = "
        SELECT *
        FROM test
        LIMIT $first, 10
        ";
      $res = mysql_query ($sql);

      echo "\n";
      echo '<table width="80%">';
      
      for ($i = 0; $i < $columns; $i++) {
        echo '<th>' . $fieldnames[$i] . '</th>';
      }

      while ($row = mysql_fetch_assoc ($res)) {
        echo "\n";
        echo '<tr>';

        for ($i = 0; $i < $columns; $i++) {
          echo "\n";
          
          if ($fieldnames[$i] == 'id') {
            echo '<td><input id="' . $fieldnames[$i] . '[]" name="' . $fieldnames[$i] . '[]" type="hidden" value="' . $row[$fieldnames[$i]] . '"></td>';
          }
          else {
            echo '<td><input id="' . $fieldnames[$i] . '[]" name="' . $fieldnames[$i] . '[]" type="text" value="' . $row[$fieldnames[$i]] . '"></td>';
          }
        }

        echo '</tr>';
      }
      
      echo '<tr><th colspan="' . $columns . '"><input id="update" name="update" type="submit" value="wijzigingen opslaan">';
      echo '</table>';

      echo "\n";
      echo '<table width="80%">';
      echo '<tr>';
      
      for ($i = 1; $i < $columns; $i++) {
        echo '<th>' . $fieldnames[$i] . '</th>';
      }

      echo '</tr>';
      echo '<tr>';
      
      for ($i = 1; $i < $columns; $i++) {
        echo "\n";
        echo '<td><input id="add_' . $fieldnames[$i] . '" name="add_' . $fieldnames[$i] . '" type="text" value="' . $row[$fieldnames[$i]] . '"></td>';
      }

      echo '</tr>';
      echo '<tr><th colspan="' . ($columns - 1) . '"><input id="add" name="add" type="submit" value="record toevoegen"></th></tr>';
      echo '</table>';

    ?>
    
    </form>
  </div>
  
  <div id="errors">
  <?php
    if (isset ($error)) {
      echo '<h3>Error: ' . $error . '</h3>';
    }
    else {
      echo '<h3>Geen meldingen</h3>';
    }
  ?>
  </div>
</body>
</html>
[/code]