Diskuze: Databáze - průběžné bodování - vyhledávání a přepis dat
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj v PDO by dotaz mohl vypadat nějak takto:
<?php
$query = $pdo->prepare('
UPDATE
uzivatele
SET
body = body + ?
WHERE
jmeno = ?
');
$result = $query->execute([
$_POST['body'],
$_POST['jmeno'],
]);
Díky tomu si nemusíš vytahovat aktuální stav, takže bude mít o dotaz na DB méně.
Také nezapomenout na to, že vkládaná hodnota musí být číslo a pokud se bude pouze přičítat, tak že není záporná, atd..
Aha, nu SQL dotaz bude stejný:
<?php
Db::pripoj('127.0.0.1', 'db_user', 'db_pass', 'db_name');
Db::dotaz('
UPDATE
uzivatele
SET
body = body + ?
WHERE
jmeno = ?
',
[
$_POST['body'],
$_POST['jmeno'],
]
)
Vycházím z tohoto článku:
https://www.itnetwork.cz/…crud-wrapped
a netuším zda jsou ještě nějaké jiné/upravené verze tohoto wrapperu.
Já vycházím z článku: https://www.itnetwork.cz/…sql-ovladace
Takže...
<?php
Db::pripoj('127.0.0.1', 'root', '', 'ks');
Db::dotaz('
UPDATE
body
SET
body = body + ?
WHERE
jmeno = ?
',
[
$_POST['body'],
$_POST['jmeno'],
]
)
?>
<html>
...
Následuje formulář a přes isset ověření, zda je správně
vyplněný.
Výše zmíněný $result se nachází také v té další části?
V mém případě proměnná $result obsahuje návratovou hodnotu metody execute ovladače PDO, ta je logická, takže true nebo false.
Metody místního wrapperu vrací počet ovlivněných řádků, viz. zdrojové kódy z manuálů.
Fomulář vyplním, odešlu, zkontroluje se správnost jeho vyplnění, ale
pořád mám chybu někde na cestě k databázi... Já vím, asi je tam nějaká
úplně jednoduchá chyba, ale...
<?php
require('Db.php');
Db::pripoj('127.0.0.1', 'root', '', 'ks');
Db::dotaz('
UPDATE
body
SET
body = body + ?
WHERE
jmeno = ?
',
[
$_POST['body'],
$_POST['jmeno'],
]
)
?>
<html>
<head></head>
<body>
<H1>Formulář</H1>
<form method="post">
<p>Jméno<br>
<input type="text" name="jmeno" required></p>
<p>Body<br>
<input type="number" name="body" required> </p>
<input type="submit" name="odeslat" value="Zapsat body">
</form>
<?php
if($_POST) {
if(
isset($_POST['jmeno']) && $_POST['jmeno'] &&
isset($_POST['body']) && $_POST['body'])
{
echo('Body zapsány');
}
else {
echo ("Chyba ve vyplňování formuláře!");
}
}
?>
</body>
</html>
Jestli kód výše odpovídá tvému skutečnému projektu, tak ti to už při prvním spuštění musí vyhazovat error, protože se snažíš ukládat, respektive načítat hodnoty z pole $_POST na indexech, které v tu chvíli vůbec neexistují. Ukládání musí být až v podmínce, kde kontroluješ, jestli jsou body a jméno nastavené, viz upravený kód níže.
<?php
require('Db.php');
Db::pripoj('127.0.0.1', 'root', '', 'ks');
?>
<html>
<head></head>
<body>
<H1>Formulář</H1>
<form method="post">
<p>Jméno<br>
<input type="text" name="jmeno" required></p>
<p>Body<br>
<input type="number" name="body" required> </p>
<input type="submit" name="odeslat" value="Zapsat body">
</form>
<?php
if($_POST) {
if(
isset($_POST['jmeno']) && $_POST['jmeno'] &&
isset($_POST['body']) && $_POST['body'])
{
Db::dotaz('
UPDATE
body
SET
body = body + ?
WHERE
jmeno = ?
',
[
$_POST['body'],
$_POST['jmeno'],
]
);
echo('Body zapsány');
}
else {
echo ("Chyba ve vyplňování formuláře!");
}
}
?>
</body>
</html>
Děkuji, již to funguje
Já to tam původně měla a pak jak jsem řešila připojení databáze... No a
ještě zde byl jeden problém - já body v databázi zapsala nulovou hodnotu,
nikoli jako 0 bodů, tím pádem neměl kód číslo s kterým by pracoval a ke
kterému by zadané body přičetl
Oběma vám moc děkuji za pomoc!
Zobrazeno 10 zpráv z 10.