Avatar billede nemlig Professor
24. juni 2008 - 21:02 Der er 7 kommentarer og
1 løsning

Rette i flere MySql poster via Submit

Hej alle.
Jeg ønsker at lave et udtræk af flere poster fra MySQL, hvor der skal være mulighed for at rette i flere poster på én gang.
Jeg lister posterne med følgende kode, men kan ikke finde ud af, hvordan jeg opdaterer MySQL ved tryk på Submit.

if(isset($_POST['context']) && $_POST['context']=='update')
{
    .......noget array-halløj måske........
    $sql = "UPDATE `kundeliste` ..... WHERE .........;
    database($sql);

    echo "Kunderne er rettet.";
}

echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>";
echo "<input type='hidden' name='context' value='update'>";

  $sql = "SELECT `pasnr`, `tlfnr` FROM `kundeliste`";
  $res = database($sql);
 
echo "<table>"; 
while($row = mysql_fetch_assoc($res))
{
  echo "
  <tr>   
  <td><input value='$row[tlfnr]' type=text name=tlf[] size=50></td>
  <td><input value='$row[pasnr]' type=text name=pas[] size=50></td>
  </tr>";
}

echo "</table><input type='submit' value='Opdater'></form>";
Avatar billede coderdk Praktikant
24. juni 2008 - 22:07 #1
Har du en primær nøgle i kundeliste? kundeid? Så skal du nok lave formen om:

$sql = "SELECT `kundeid`, `pasnr`, `tlfnr` FROM `kundeliste`";
  $res = database($sql);

echo "<table>";
while($row = mysql_fetch_assoc($res))
{
  echo "
  <tr> 
  <td><input value='$row[tlfnr]' type=text name=tlf[".$row['kundenr']."] size=50></td>
  <td><input value='$row[pasnr]' type=text name=pas[".$row['kundenr']."] size=50></td>
  </tr>";
}

Så kan din POST se nogenlunde sådan ud:

if(isset($_POST['context']) && $_POST['context']=='update')
{
    foreach ( $_POST['tlf'] as $key => $val )
    {
      $sql = sprintf("
          UPDATE `kundeliste`
          SET tlfnr = '%s'
              pas = '%s'
          WHERE kundeid = %d
          "
          ,mysql_real_escape_string($val);
          ,mysql_real_escape_string($_POST['pasnr'][$key]);
          ,intval($key)
          );
      database($sql);
    }

    echo "Kunderne er rettet.";
}
Avatar billede nemlig Professor
24. juni 2008 - 22:23 #2
Jeg er i fuld gang med at afprøve, og jeg har også en primær nøgle, "id". Jeg har derfor tilrettet koden - både i`SELECT og i INPUT.
Men jeg får fejl:
Parse error: syntax error, unexpected ';' in C:\.....ret_kunde_flere.php on line 31
Linje 31 = ,mysql_real_escape_string($val);
Avatar billede coderdk Praktikant
24. juni 2008 - 22:38 #3
Ah

          ,mysql_real_escape_string($val);
          ,mysql_real_escape_string($_POST['pasnr'][$key]);

skal naturligvis være

          ,mysql_real_escape_string($val)
          ,mysql_real_escape_string($_POST['pasnr'][$key])
Avatar billede nemlig Professor
24. juni 2008 - 22:56 #4
UPDATE fejler, og skriver følgende:

MySQL-sætningen var:
UPDATE `rejser_kunder` SET tlf1 = '97149392' pasnr1 = '202730037' WHERE id = '1'

Og jeg går ud fra at linjen:
,mysql_real_escape_string($_POST['pasnr'][$key])

skal være:
,mysql_real_escape_string($_POST['pas'][$key])
Avatar billede nemlig Professor
24. juni 2008 - 22:58 #5
Jeg skriver lige hele koden, for der er nogle felt- og tabelnavne, som er lidt anderledes:

if(isset($_POST['context']) && $_POST['context']=='update')
{
    foreach ( $_POST['tlf'] as $key => $val )
    {
      $sql = sprintf("
          UPDATE `rejser_kunder`
          SET tlf1 = '%s'
              pasnr1 = '%s'
          WHERE id = '%d'
          "
            ,mysql_real_escape_string($val)
          ,mysql_real_escape_string($_POST['pas'][$key])
          ,intval($key)
          );
      database($sql);
    }

    echo "Kunderne er rettet.";
}

echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>";
echo "<input type='hidden' name='context' value='update'>";

  $sql = "SELECT `id`, `pasnr1`, `tlf1` FROM `rejser_kunder`";
  $res = database($sql);

echo "<table>";
while($row = mysql_fetch_assoc($res))
{
  echo "
  <tr> 
  <td>Tlfnr.<input value='$row[tlf1]' type=text name=tlf[".$row['id']."] size=50></td>
  <td>Pasnr.<input value='$row[pasnr1]' type=text name=pas[".$row['id']."] size=50></td>
  </tr>";
}


echo "</table><input type='submit' value='Opdater'>
</form>";
Avatar billede coderdk Praktikant
24. juni 2008 - 23:01 #6
der mangler et komma:

      $sql = sprintf("
          UPDATE `rejser_kunder`
          SET tlf1 = '%s'
              ,pasnr1 = '%s'
          WHERE id = '%d'
          "
            ,mysql_real_escape_string($val)
          ,mysql_real_escape_string($_POST['pas'][$key])
          ,intval($key)
          );
Avatar billede nemlig Professor
24. juni 2008 - 23:28 #7
Så fungerer det  -  tusind tak for hjælpen. Send venligst et svar.
Avatar billede coderdk Praktikant
24. juni 2008 - 23:36 #8
aight :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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