Avatar billede dr.big Nybegynder
07. september 2008 - 15:40 Der er 11 kommentarer og
1 løsning

Kopi linje fra tabel ned i en form

Hej eksperter,
Jeg har en tabel som henter data fra en mysql database. Til højre fra hver linje har jeg en knap som hedder Rediger og en slet. Kunne nu godt tænke mig en knap som hedder kopi.
Når man klikker på den skal den kopier den valgte linje ned i buden, hvor der er nogle tomme felter i en form, hvor man så kan oprette en kopi at den linje. Håber I kan følge mig :)
Har lavet det i PHP, men vil tro at jeg skal have et javescript som kan gøre det...
Avatar billede dr.big Nybegynder
07. september 2008 - 16:16 #1
Har nu fået lavet en midlertidig løsning, hvor jeg kopier den via SQL, og så derefter kan gå ind og rette den til… Men vil stadig meget gerne høre fra jer, hvis I har en ide til hvordan man kan kopier den direkter via javescript…

Her er SQL, hvis der evt. skulle være andre med samme problem :)
Insert
into table
(col1, col2, col3)
select col1, col2 + col3 from table WHERE id=%s"
Avatar billede olebole Juniormester
07. september 2008 - 21:00 #2
<ole>

JavaScript virker udelukkende i browseren og PHP virker udelukkende på serveren. JavaScript kan altså ikke kikke ned i din DB, så du bliver nødt til at skulle en tur rundt om serveren  =)

/mvh
</bole>
Avatar billede dr.big Nybegynder
07. september 2008 - 21:40 #3
Hej Ole, tak for din besked
Det jeg tænker på er at den har hentet dataerne fra mysql og viser dem i en tabel, og derefter at den kunne kopier den linje som den viser på skærmen ned i nogle tomme textfelter?
Avatar billede michaelthomsendk Nybegynder
07. september 2008 - 23:10 #4
Du flytter indholdet af felter således - eksempel:

<script type="text/javascript">
function kopi1(row) {
  document.getElementById("tekstfelt1").innerHTML =
    document.getElementById(row + "c1").innerHTML;
}
...
</script>

<table>
  <tr>
    <td id="r1c1" onclick='kopi1("r1")'> </td>
    <td id="r1c2" onclick='kopi2("r1")'> </td>
    ...
  </tr>
  ...
</table>

Du må selv skrive om til dine knapper mv.
Avatar billede dr.big Nybegynder
08. september 2008 - 00:06 #5
Hej er ikke lige så skarp til javascript, så jeg tænkte om du evt. kunne hjælpe mig lidt. Har prøvet at sætte det ind så godt jeg kunne i dette eksempler, men kan ikke få det til at virke...

<body>
<script type="text/javascript">
function kopi1(row) {
  document.getElementById("id").innerHTML =
    document.getElementById(row + "c1").innerHTML;
}
...
</script>
<form id="form1" name="form1" method="post" action="">
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
</form>

<form action="<?php echo $editFormAction; ?>" method="post" name="form2" id="form2">
  <p>&nbsp;</p>
  <table border="1">
    <tr>
      <td>id</td>
      <td>maerke</td>
      <td>&nbsp;</td>
    </tr>
    <?php do { ?>
    <tr>
      <td><?php echo $row_bil['id']; ?></td>
      <td><?php echo $row_bil['maerke']; ?></td>
      <td id="r1c1" onclick="'kopi1("r1")'><label>
        <input type="button" name="kopi" id="r1c1" onclick="'kopi1("r1")" value="kopi" />
      </label></td>
      </tr>
    <?php } while ($row_bil = mysql_fetch_assoc($bil)); ?>
  </table>
  <p>&nbsp;</p>
  <table align="center">
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Id:</td>
      <td><input type="text" name="id" value="" size="32" /></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Maerke:</td>
      <td><input type="text" name="maerke" value="" size="32" /></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">&nbsp;</td>
      <td><input type="submit" value="Insert record" /></td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="form2" />
</form>
Avatar billede michaelthomsendk Nybegynder
08. september 2008 - 12:03 #6
Hej igen

... betyder her kan stå noget mere.
Når du bruger javascript skal du have id på alle dine html elementer <?? id="identifikator" ...>,
og der må ikke være to ens id'er.

Du ser om der er fejl i dine javascript på det lille gule ! nederst til venstre i IE.
Bruger du Opera eller Firefox får du bedre fejlmeddelelser.

Ny kopifunktion:
<script type="text/javascript">
function kopi(id) {
  document.getElementById("id").innerHTML =
    document.getElementById("id"+id).innerHTML;
  document.getElementById("maerke").innerHTML =
    document.getElementById("maerke"+id).innerHTML;
}
</script>

Forslag til din nederste form (to løse linier):
      <td><input type="text" id="id" name="id" value="" size="32" /></td>
      <td><input type="text" id="maerke" name="maerke" value="" size="32" /></td>


Forslag til din liste tabel:
    <tr>
      <td id="<?php echo 'id'.$row_bil['id']; ?>"><?php echo $row_bil['id']; ?></td>
      <td id="<?php echo 'maerke'.$row_bil['id']; ?>"><?php echo $row_bil['maerke']; ?></td>
      <td><label>
        <input type="button" name="kopi" onclick="kopi(<?php echo $row_bil['id']; ?>)" value="kopi" />
      </label></td>
    </tr>

Dette er skud fra hoften, så du må selv teste PHP mv.

God fornøjelse
Avatar billede dr.big Nybegynder
08. september 2008 - 22:59 #7
Hej Michael, tusind tak for din tålmodighed, har nu prøvet at sidde og lege lidt med det, men det ser stadig ikke ud til at jeg kan finde ud af det…  Her er den kode som jeg sidder og fumler rundt med hvis du nu skulle have noget tid :)

<?php require_once('Connections/bil.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;
}
}

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

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
  $insertSQL = sprintf("INSERT INTO biler (id, maerke) VALUES (%s, %s)",
                      GetSQLValueString($_POST['id'], "int"),
                      GetSQLValueString($_POST['maerke'], "text"));

  mysql_select_db($database_bil, $bil);
  $Result1 = mysql_query($insertSQL, $bil) or die(mysql_error());
  $insertGoTo = "bil2.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

mysql_select_db($database_bil, $bil);
$query_bil = "SELECT * FROM biler";
$bil = mysql_query($query_bil, $bil) or die(mysql_error());
$row_bil = mysql_fetch_assoc($bil);
$totalRows_bil = mysql_num_rows($bil);
?><!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>
</head>
<body>
    <script type="text/javascript">
function kopi(id) {
  document.getElementById("id").innerHTML =
    document.getElementById("id"+id).innerHTML;
  document.getElementById("maerke").innerHTML =
    document.getElementById("maerke"+id).innerHTML;
}
</script>


<form action="<?php echo $editFormAction; ?>" method="post" name="form2" id="form2">
  <p>&nbsp;</p>


    <table border="1">
      <tr>
        <td>id</td>
        <td>maerke</td>
        <td>&nbsp;</td>
      </tr>
      <?php do { ?>
      <tr>
        <td id="<?php echo 'id'.$row_bil['id']; ?>"><?php echo $row_bil['id']; ?></td>
        <td id="<?php echo 'maerke'.$row_bil['id']; ?>"><?php echo $row_bil['maerke']; ?></td>
        <td><label>
          <input type="button" name="kopi" onclick="kopi(<?php echo $row_bil['id']; ?>)" value="kopi" />
   
      </tr>
      <?php } while ($row_bil = mysql_fetch_assoc($bil)); ?>
    </table>
    <p>&nbsp;</p>
  <table align="center">
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Id:</td>
      <td><input type="text" id="id" name="id" value="" size="32" /></td>
   

    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Maerke:</td>
      <td><input type="text" id="maerke" name="maerke" value="" size="32"  /></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">&nbsp;</td>
      <td><input type="submit" value="Insert record" /></td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="form2" />
</form>
<p>&nbsp;</p>
</body>
</html>
<?php
mysql_free_result($bil);
?>
Avatar billede michaelthomsendk Nybegynder
09. september 2008 - 00:04 #8
Umiddelbart se der ok ud. Hvad virker ikke?
Avatar billede dr.big Nybegynder
09. september 2008 - 08:11 #9
Den kommer bare frem med en fejl når jeg klikker på knappen "kopi"
Når jeg fx klikker på den første linje, som den har udtrækket fra mysql for jeg en fejl på linje 32
$editFormAction = $_SERVER['PHP_SELF'];

Hvis jeg klikker på nr. 2 linje for jeg en fejl i linje39
GetSQLValueString($_POST['id'], "int")
Så det er en forskellig fejl for hver linje:S
Avatar billede michaelthomsendk Nybegynder
09. september 2008 - 11:32 #10
"Den" må være den PHP side du sender formen tilbage til når brugeren klikker på kopi.
Avatar billede dr.big Nybegynder
27. oktober 2008 - 16:21 #11
michaelthomsendk, smider du ikke lige et svar, så for du lige point for din hjælp :)
Avatar billede michaelthomsendk Nybegynder
27. oktober 2008 - 16:30 #12
oki :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester