Autor Zpráva
tess
Profil *
Zdravím,
zkouším práci s databází přes formulář. Mám ale problém s updatováním hodnot v databázi. Při současném stavu se updatuje jen poslední položka ve formuláři. Bude to způsobeno tím, že proměnná $update obsahuje jen poslední položku formuláře (ty předchozí se pochopitelně přepsaly). Jakým způsobem se to dá vyřešit (projít to pole)? Ač je to triviální, nemůžu po dlouhé době přijít na to, jak updatovat celou db...

<?php
  include("connect.php");
  $auto=$_POST['auto'];
  $vykon=$_POST['vykon'];
  $rychlost=$_POST['rychlost'];
  $id=$_POST['id'];
    
  $connect=mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
  mysql_select_db($db); 
  $update="update auta set auto='".$auto."',vykon='".$vykon."',rychlost='".$rychlost."' where id='".$id."'";
  mysql_query($update,$connect);
  mysql_close($connect);
  Header("Location:formular.php");
  exit;
?>
DoubleThink
Profil *
Pojmenuj formuláře jako pole (auto[], vykon[]) - PHP z nich pole udělá.

Mimochodem, sestavuješ SQL z neošetřených externích proměnných. Programátorům se za to běžně lámou palce.
tess
Profil *
Zkoušel jsem ty vstupy do formuláře udělat jako pole a zřejmě jsem tě pochopil špatně, protože to nefunguje. Můžeš mi prosím říct, kam konkrétně doplnit ty závorky? A jak poté upravit $update aby se pole prošlo (zkoušel jsem přes for a bez úspěchu)? Tady je ještě kód souboru, který předchází tomu updatu:

<?php
  include("connect.php");
  $connect=mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
  mysql_select_db($db);
  $query="select * from auta";
  $result=mysql_query($query,$connect);
  $i=0;
  echo "<form action='uloz_db.php' method='POST'>";
  echo "<table border='0'>
        <tr>
        <th>#<th>Auto<th>Výkon<th>Rychlost<th>Smazat";  
  while(list($id,$auto,$vykon,$rychlost)=mysql_fetch_row($result))
  {
    echo "<tr>
          <td>$id
          <td><input type='text' name='auto' value='$auto'>
          <td><input type='text' name='vykon' value='$vykon'>
          <td><input type='text' name='rychlost' value='$rychlost'>
          <td><input type='checkbox' name='smazat'>
          <input type='hidden' name='id' value='$id'>";
  $i++;
  }
  echo "</table>";
  echo "<p><input type='submit' name='rand' value='Uložit'></p>";
  echo "</form>";
  mysql_close($connect);
?>

A díky za upozornění ohledně SQL Injection, budu se tomu později věnovat až se dostanu více do toho PHP.
Davex
Profil
Když přidáš do jmen položek formuláře [], tak ti z nich PHP udělá pole, které pak můžeš projít a jednotlivé položky uložit postupně nebo najednou do databáze.

<td><input type='text' name='auto[]' value='$auto'>
<td><input type='text' name='vykon[]' value='$vykon'>
<td><input type='text' name='rychlost[]' value='$rychlost'>
<td><input type='checkbox' name='smazat'>
<input type='hidden' name='id[]' value='$id'>";


Možná by ses nad tím měl víc zamyslet a do DB ukládat jen změny, protože toto nevypadá moc dobře.
tess
Profil *
Super. Udělal jsem z toho pole, prošel jsem ho pomocí for a updatnul. Tak díky oběma

U větších databází je tento přístup určitě zabijácký, ale k optimálnímu řešení se dostanu až časem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0