Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jakub S.
Člen
Avatar
Jakub S.:30.3.2020 20:58

Ahoj,
rád bych aktuálně přihlášenému uživateli, po kliknutí na tlačítko ve formuláři, aktualizoval hodnotu "Skóre" v databázi. Mé pokusy nejsou zdařilé, buď se vizuálně nic neprovede nebo se mi vytvoří úplně nový, prázdný záznam s ukládanou hodnotou "Skóre".

Zkusil jsem: Poslední příklad byl následující... (.php):

<?php
session_start();
require('config.php');
Db::connect('xxx', 'xxx', 'root', '');

if ($_POST)
{
    $user = $_SESSION['uzivatel_id'];

    Db::query('INSERT INTO uzivatel (score,uzivatel_id) VALUES (?,?)', $_POST['Skore'], $user);
}
?>

<form method="post">
    <input type="text" id="mytext" name="Skore">
    <input type="submit" value="Uložit" />
</form>

Vypíše následující chybu:

Warning: PDOStatement::e­xecute(): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '36' for key 'PRIMARY' in C:\xampp\htdoc­s\DoCzech\Pod­stranky\config­.php on line 38

Chci docílit: Jak upravit kód tak, aby se nesnažil vložit nového uživatele s ID 36, ale aktualizoval se již vytvořený uživatel?

Děkuji

 
Odpovědět
30.3.2020 20:58
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:30.3.2020 22:31

google = mysql update example
https://www.tutorialspoint.com/…te-query.htm

mysql> UPDATE tutorials_tbl
   -> SET tutorial_title = 'Learning JAVA'
   -> WHERE tutorial_id = 3;
 
Nahoru Odpovědět
30.3.2020 22:31
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:31.3.2020 9:13

INSERT UPDATE SELECT DELETE jsou 4 zakladni prikazy.
Idealne, udelej si pro praci s tabulkou class, ktere predas data, id.

class classVegetable {

   var $edible;
   var $color;

   function __construct($edible, $color="green")
   {
       $this->edible = $edible;
       $this->color = $color;
   }

   function sql($req, $perm_list)
   {
$query = isset($req['query ']) ? $req['query '] : '';
$id = isset($req['id']) ? $req['id'] : '';
switch ($query)
  case 'insert': ... return $notice/false; break; // insert row
  case 'update': ... return $notice/false; break; // update row
  case 'delete': ... return $notice/false; break; // delete row
  case 'select': ... return $array/false; break; // select row
  case 'list': ... return $array/false; break; // list rows
  case 'necojineho, treba duplikace radku': ... return $notice/false; break;
   }
}

// Vyhodou je, ze takovou class si pak muzes prekopirovat pro jinou tabulku a
// definovat jiny zpusob sobrazeni.

$req = $_REQUEST;
$perm_list = zjisti_prava_uzivatele();
$vegetable = new classVegetable();
$fruit = new classFruit();
$data = $vegetable->sql($req, $perm_list);
$page .= $vegetable->render($data);
$data = $fruit->sql($req, $perm_list);
$page .= $fruit->render($data);
echo $page.
Editováno 31.3.2020 9:15
 
Nahoru Odpovědět
31.3.2020 9:13
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:31.3.2020 9:23

Ja tohle treba pouzivam pro editaci ciselniku, seznam mest, jmena lidi a pod. Uzivatel vetsinou edituje vsechny polozky. Potrebuje ziskat seznam, tabulku, podle filtru, kliknout na edit, nacist cely radek, zmenit polozky. Kazdy ciselnik je jinaci. Nekdy se edituje 5 policek, jindy 2. Nekdy je tam checkbox, jindy radio, selectbox (treba sdileni jineho ciselniku). Ale v podstate mam jednotnou class, kterou celou zkopiruji, prepise 10 udaju, ktere ji definuji a upravim vstupy pro sql, zpracovani dat, vystupy, jakymi se data zobrazuji. To vsechno je v te class.
Samozrejme, opakujici veci mam v jine pomocne class, aby se mi to neduplikovalo. Treba zobraz, precti sadu checkboxu. Bohuzel, nejsem ted u pracovniho pc, tak ti nemuzu poslat celou ukazkovou class. Neni to zadny zazrak, ale je moje a vicemene jsem s ni spokojen.

 
Nahoru Odpovědět
31.3.2020 9:23
Avatar
Odpovídá na Jakub S.
Michal Štěpánek:31.3.2020 10:34

Když chceš v tabulce něco měnit, nemůžeš na to použít příkaz INSERT, ale UPDATE
např

UPDATE Uzivatel SET Neco=@hodnota WHERE userid=@userid
Nahoru Odpovědět
31.3.2020 10:34
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.