Avatar billede tapdrup Nybegynder
25. juni 2005 - 09:35 Der er 27 kommentarer

insert into

i nedenstående tabel har jeg brug for at indstætte en variabel (antal) , som sætter X antal records ind i min database.
Jeg har ingen problemer med at indsætte en enkelt men hvordan sætter jeg den til at indsætte X antal ind?

Tabel:
ini  int(11)  Nej    auto_increment             
  uge  varchar(80)  Nej                 
  bruger  varchar(79)  Nej                 
  type  varchar(89)  Nej       
       
Streng:
  $insertSQL = sprintf("INSERT ? INTO hit (ini, uge, bruger, type) VALUES (%s, %s, %s, %s)",
                      GetSQLValueString($HTTP_POST_VARS['ini'], "int"),
                      GetSQLValueString($HTTP_POST_VARS['uge'], "text"),
                      GetSQLValueString($HTTP_POST_VARS['bruger'], "text"),
                      GetSQLValueString($HTTP_POST_VARS['type'], "text"));
Avatar billede arne_v Ekspert
25. juni 2005 - 09:40 #1
for laver en løkke og laver X INSERT vil jeg tro !?

MYSQL tillader faktisk

INSERT INTO xxx (f1,f2,f3) VALUES (1,11,111),(2,22,222),(3,33,333)

men jeg tror ikke at det hjælper dig
Avatar billede tapdrup Nybegynder
25. juni 2005 - 11:15 #2
Jeg har prøvet mig lidt frem og det ser desværr ikke ud til at virke.
Det skal være på den måde at "ini" er den eneste som for en ny værdi.(auto_increment) mens x antal laver en løkke.
uge,bruger,type står i formularen som et "hidden field" og allerede har en værdi.
PS: Jeg er stadigvæk lidt grøn. (ikke dum tror jeg nok!!)
Avatar billede arne_v Ekspert
25. juni 2005 - 11:17 #3
kan du poste din PHP kode med løkken ?
Avatar billede tapdrup Nybegynder
25. juni 2005 - 11:21 #4
Har du et eks.?
Avatar billede tapdrup Nybegynder
25. juni 2005 - 11:38 #5
Der var jeg vist lidt hurtig, jeg poster den lige lidt senere.
Skal lige rydde lidt op inden konen kommer hjem.
Avatar billede tapdrup Nybegynder
25. juni 2005 - 12:50 #6
<?php
//Connection statement
require_once('../Connections/config.php');

require_once('../includes/functions.inc.php');

// build the form action
$editFormAction = $HTTP_SERVER_VARS['PHP_SELF'] . (isset($HTTP_SERVER_VARS['QUERY_STRING']) ? "?" . $HTTP_SERVER_VARS['QUERY_STRING'] : "");

if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form4")) {
  $insertSQL = sprintf("INSERT INTO hit (ini, uge, bruger, type) VALUES (%s, %s, %s, %s)",
                      GetSQLValueString($HTTP_POST_VARS['ini'], "int"),
                      GetSQLValueString($HTTP_POST_VARS['uge'], "text"),
                      GetSQLValueString($HTTP_POST_VARS['bruger'], "text"),
                      GetSQLValueString($HTTP_POST_VARS['type'], "text"));

  $Result1 = $config->Execute($insertSQL) or die($config->ErrorMsg());

  $insertGoTo = "menu.php";
  if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
  }
  KT_redir($insertGoTo);
}

// begin Recordset
$query_Recordset1 = "SELECT * FROM hit";
$Recordset1 = $config->SelectLimit($query_Recordset1) or die($config->ErrorMsg());
$totalRows_Recordset1 = $Recordset1->RecordCount();
// end Recordset


// rebuild the query string by replacing pageNum and totalRows with the new values
$queryString_news = KT_removeParam("&" . $HTTP_SERVER_VARS['QUERY_STRING'], "pageNum_news");
$queryString_news = KT_replaceParam($queryString_news, "totalRows_news", $totalRows_news);

//keep all parameters except bruger_id
KT_keepParams('bruger_id');

//PHP ADODB document - made with PHAkt 2.6.2



//PHP ADODB document - made with PHAkt 2.8.2?>
<html>
<head>
<title>menu</title>
<meta http-equiv="content"  content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Type" content="text/html; charset=">
<link href="../china.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
.style3 {font-family: Verdana, Arial, Helvetica, sans-serif}
.style6 {color: #FFFFFF}
.style7 {font-size: 12px}
.style8 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #FFFFFF; }
.style11 {color: #CCCCCC}
.style12 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; }
-->
</style>
</head>

<body>
<div align="left">
<form action="<?php echo $editFormAction; ?>" method="POST" name="form4" id="form4">
  <div align="left">
    <input  name="x" type="text" id="x">
    <input name="uge" type="hidden" id="uge" value="24">   
    <input name="ini" type="hidden">
    <input type="hidden" name="bruger" value="2">
    <input type="hidden" name="type" value="kontakt">
  </div>
    <input type="submit"  value="send">
  <input type="hidden" name="MM_insert" value="form4">
</form>
<p>&nbsp;</p>
</div>
   
</body>
</html>
<?php
$Recordset1->Close();
?>
Avatar billede tapdrup Nybegynder
25. juni 2005 - 12:51 #7
Har lige lagt hele siden på, håber der er en som sidder med guld kornet!!
Avatar billede Slettet bruger
25. juni 2005 - 17:05 #8
Måske er det bare mig, der er forvirret, men hvis du skal indsætte mere end et sæt data, hvor kommer de andre sæt så fra? Den formular har jo kun et sæt.
Avatar billede tapdrup Nybegynder
25. juni 2005 - 17:18 #9
Det må være fordi jeg har brugt dreamweaver til at lave koden i, den fjerner desværre ikke alt når man så fjerner noget bagefter.
Avatar billede Slettet bruger
25. juni 2005 - 17:44 #10
Nu tror jeg nok, jeg fangede, hvad du er ude efter. Ret mig, hvis jeg tager fejl.

1) din tabel har de 4 værdier: ini, bruger,uge og type

2) det er meningen at værdien ini skal indeholde antallet af gange, som den specifikke bruger har sendt formularen i en uge.

3) du ønsker IKKE at oprette en ny række i tabellen, hvis der allerede findes en med samme bruger, uge og type. Så skal ini bare tælles op med 1 i stedet.

Hvis jeg har ret, så skal ini ikke være en autoincrement, men bare en almindelig int. Derudover skal du vistnok sætte bruger, uge og type tilsammen til at være primary key, og så kan du bruge REPLACE INTO i stedet for INSERT.
Avatar billede tapdrup Nybegynder
25. juni 2005 - 20:22 #11
1) rigtig
2) rigtig
3) jeg ønsker at opretten en ny række i tabellen med en unik 'ini', 'uge', 'bruger' og type, der er ingen probelmer med de sidste 3 parameter.

jeg har allerede lavet systemet hvor man kan trykke submit knap og så får jeg det ønskede ind "en" gang, men nu har jeg brug for at kunne lave det samme med x antal 'ini' enten ved selv at skrive hvor mange eller vælge dette ved en drop down menu.
Avatar billede tapdrup Nybegynder
25. juni 2005 - 20:33 #12
Så det jeg har brug for er at den lave en løkke x antal gange alt efter hvad brugeren har valgt.
Håber det gav en ide om hvad der er jeg søger.
Avatar billede Slettet bruger
25. juni 2005 - 20:56 #13
OK, så kan du måske bruge dette:

$insertSQL = "INSERT INTO hit (uge, bruger, type) VALUES ";

for(x=0;x<$_POST['antal'];$x++){
  $insertSQL .= sprintf("(%s, %s, %s),",
  GetSQLValueString($HTTP_POST_VARS['uge'], "text"),
  GetSQLValueString($HTTP_POST_VARS['bruger'], "text"),
  GetSQLValueString($HTTP_POST_VARS['type'], "text"));
}

// Fjern det sidste overflødige komma
$insertSQL=substr($insertSQL,0,-1);

Bemærk forresten at jeg har brugt $_POST i stedet for den ældre $HTTP_POST_VARS.
Avatar billede tapdrup Nybegynder
25. juni 2005 - 21:12 #14
Jeg tester lige og vender tilbage, i morgen.
forløbig tak.
Avatar billede tapdrup Nybegynder
26. juni 2005 - 09:05 #15
if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form4")) {
$insertSQL = "INSERT INTO hit (uge, bruger, type) VALUES ";

for(x=0;x<$HTTP_POST_VARS['antal'];$x++),
  $insertSQL .= sprintf("(%s, %s, %s)",
  GetSQLValueString($HTTP_POST_VARS['uge'], "text"),
  GetSQLValueString($HTTP_POST_VARS['bruger'], "text"),
  GetSQLValueString($HTTP_POST_VARS['type'], "text"));
 
                     
               

  $Result1 = $config->Execute($insertSQL) or die($config->ErrorMsg());

  $insertGoTo = "menu.php";
  if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?",
    $insertSQL=substr($insertSQL,0,-1);
    $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
  }

Jeg har en fejl i syntaksten på linie 13, kan du se hvad jeg gør galt?
Avatar billede tapdrup Nybegynder
26. juni 2005 - 09:06 #16
som er denne linie:
for(x=0;x<$HTTP_POST_VARS['antal'];$x++),
Avatar billede Slettet bruger
26. juni 2005 - 14:21 #17
Tastefejl fra min side, men jeg synes næsten du burde kunne opdage det selv.

Der skal også være et $-tegn foran do to første x-er på linien.
Avatar billede tapdrup Nybegynder
27. juni 2005 - 09:12 #18
Jeg er ikke så skarp endnu, men jeg takker mange gange.
Avatar billede Slettet bruger
27. juni 2005 - 12:11 #19
Jeg går ud fra, det virker, som du vil have det så?
Avatar billede tapdrup Nybegynder
02. juli 2005 - 12:10 #20
Hej igen

Desværre kan jeg ikke sige at jeg har fået det til at virke.
Jeg har prøvet utallige forsøg uden held.
Det er dog lykkes mig nu at lave siden på en måde hvor jeg ikke får
fejl på den ene eller den anden måde.
Men den lægger kun en ny record ind så løkken virker ikke efter hensigten.

Lægger lige hele koden frem igen, du kan måske gennemskue hvad der er galt.
Avatar billede tapdrup Nybegynder
02. juli 2005 - 12:10 #21
<?php
//Connection statement
require_once('Connections/config.php');

//Aditional Functions
require_once('includes/functions.inc.php');

// build the form action
$editFormAction = $HTTP_SERVER_VARS['PHP_SELF'] . (isset($HTTP_SERVER_VARS['QUERY_STRING']) ? "?" . $HTTP_SERVER_VARS['QUERY_STRING'] : "");

if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form1")) {
for($x=0;$x<$HTTP_POST_VARS['ini'];$x++)
  $insertSQL = sprintf("INSERT INTO hit (uge, bruger, type) VALUES (%s, %s, %s)",
                     
                      GetSQLValueString($HTTP_POST_VARS['uge'], "text"),
                      GetSQLValueString($HTTP_POST_VARS['bruger'], "text"),
                      GetSQLValueString($HTTP_POST_VARS['type'], "text"));

  $Result1 = $config->Execute($insertSQL) or die($config->ErrorMsg());

  $insertGoTo = "hit";
  if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertSQL=substr($insertSQL,0,-1);
    $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
  }
  KT_redir($insertGoTo);
}

// begin Recordset
$query_Recordset1 = "SELECT * FROM hit";
$Recordset1 = $config->SelectLimit($query_Recordset1) or die($config->ErrorMsg());
$totalRows_Recordset1 = $Recordset1->RecordCount();
// end Recordset

//PHP ADODB document - made with PHAkt 2.6.2
//PHP ADODB document - made with PHAkt 2.6.2?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Ini:</td>
      <td><select name="ini">
          <option value="1" >1</option>
          <option value="2" >2</option>
          <option value="3" >3</option>
        </select>
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Insert record"></td>
    </tr>
  </table>
  <input type="hidden" name="uge" value="24">
  <input type="hidden" name="bruger" value="kt">
  <input type="hidden" name="type" value="kontakt">
  <input type="hidden" name="MM_insert" value="form1">
</form>
<p>&nbsp;</p>
</body>
</html>
<?php
$Recordset1->Close();
?>
Avatar billede Slettet bruger
02. juli 2005 - 13:57 #22
Du skal - lige som i mit eksempel - sætte starten af SQL-strengen før løkken, og derefter huske at bruge .= inde i løkken, ikke bare = (For ellers overskriver du den tidligere udgave af strengen).

Eller, hvis du absolut vil udføre et kald til databasen for hver gennemgang af løkken, så din databaseserver ikke keder sig (dårlig ide), så skal du sørge for at SQL-koden bliver udført inde i løkken.

Hint: Hvad gør følgende?

for($x=0;$x<2;$x++)
  echo 'Hej';
  echo ' med dig';

Og hvad med

for($x=0;$x<2;$x++) {
  echo 'Hej';
  echo ' med dig';
}
Avatar billede tapdrup Nybegynder
04. juli 2005 - 16:48 #23
for($x=0;$x<2;$x++)
  echo 'Hej';
  echo ' med dig';
denne skriver "hej med dig"
den næste skriver kun dette hvis betingelserne er i orden.

Når jeg laver koden som du siger får jeg denne fejl, det var derfor jeg har prøvet at lave lidt om på den.

"You have an error in your SQL syntax near '' at line 1"
Avatar billede tapdrup Nybegynder
04. juli 2005 - 16:48 #24
<?php
//Connection statement
require_once('Connections/config.php');

//Aditional Functions
require_once('includes/functions.inc.php');

// build the form action
$editFormAction = $HTTP_SERVER_VARS['PHP_SELF'] . (isset($HTTP_SERVER_VARS['QUERY_STRING']) ? "?" . $HTTP_SERVER_VARS['QUERY_STRING'] : "");{
if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form1"));

$insertSQL .= "INSERT INTO hit (uge, bruger, type) VALUES ";
for($x=0;$x<$HTTP_POST_VARS['ini'];$x++) {
$insertSQL .= sprintf("(%s, %s, %s)",
  GetSQLValueString($HTTP_POST_VARS['uge'], "text"),
  GetSQLValueString($HTTP_POST_VARS['bruger'], "text"),
  GetSQLValueString($HTTP_POST_VARS['type'], "text"));
  }
 
                     

  $Result1 = $config->Execute($insertSQL) or die($config->ErrorMsg());

  $insertGoTo = "hit";
  if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertSQL=substr($insertSQL,0,-1);
    $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
  }
  KT_redir($insertGoTo);
}

// begin Recordset
$query_Recordset1 = "SELECT * FROM hit";
$Recordset1 = $config->SelectLimit($query_Recordset1) or die($config->ErrorMsg());
$totalRows_Recordset1 = $Recordset1->RecordCount();
// end Recordset

//PHP ADODB document - made with PHAkt 2.6.2
//PHP ADODB document - made with PHAkt 2.6.2?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Ini:</td>
      <td><select name="ini">
          <option value="1" >1</option>
          <option value="2" >2</option>
          <option value="3" >3</option>
        </select>
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Insert record"></td>
    </tr>
  </table>
  <input type="hidden" name="uge" value="24">
  <input type="hidden" name="bruger" value="kt">
  <input type="hidden" name="type" value="kontakt">
  <input type="hidden" name="MM_insert" value="form1">
</form>
<p>&nbsp;</p>
</body>
</html>
<?php
$Recordset1->Close();
?>
Avatar billede Slettet bruger
04. juli 2005 - 18:01 #25
Den skulle nu gerne skrive "HejHej med dig" - altså to gange "Hej" men kun en gang "med dig".

Jeg glemte, at der skal komma mellem parenteserne med data. Ret

$insertSQL .= sprintf("(%s, %s, %s)",

Til

$insertSQL .= sprintf("(%s, %s, %s),",

Og så skal der lige en linie til at fjerne det overflødige sidste komma, når løkken er færdig. Denne linie skal indsættes efter } og før selve kaldet til databasen.

$insertSQL = substr($insertSQL,0,-1);
Avatar billede tapdrup Nybegynder
04. juli 2005 - 22:28 #26
Hej sandbox

Tak for hjælpen :-)
Avatar billede Slettet bruger
04. juli 2005 - 22:53 #27
Velbekomme.

Husk at lukke spørgsmålet.
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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