Diskuze: Mně neznámá chyba v PHP kódu - Prosím o pomoc!
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 7 zpráv z 7.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Vlož prosím zdrojový kód jako zdrojový kód, do té doby ti nikdo
neporadí 
[code] tvuj kod [/code]
Ahoj, děkuji za radu a omlouvám se.
CATEGORIES.php
<?php ob_start(); ?>
<?php include("includes/admin_header.php"); ?>
<div id="wrapper">
<!-- Navigation -->
<?php include("includes/admin_navigation.php"); ?>
<div id="page-wrapper">
<div class="container-fluid">
<!-- Page Heading -->
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">
Welcome to admin
Author
</h1>
<div class="col-xs-6">
<?php
//ADDING CATEGORIES QUERY
if(isset($_POST['submit'])){
$cat_title = $_POST['cat_title'];
if($_POST['cat_title'] == "" || empty($cat_title)){
echo "This field should not be empty!";
} else {
$query = "INSERT into categories (cat_title)";
$query .= " VALUES ('$cat_title') ";
$create_category = mysqli_query($connection, $query);
if(!$create_category){
die("Something went wrong" . mysqli_error($connection));
}
}
}
?>
<!--ADDING CATEGORIES FORM -->
<form action="categories.php" method="post">
<div class="form-group">
<label for="cat_title">Add Category</label>
<input class="form-control" type="text" name="cat_title">
</div>
<div class="form-group">
<input class="btn btn-primary" type="submit" name="submit" value="Add Category">
</div>
</form>
<!-- UPDATING CATEGORIES FORM -->
<?php
if(isset($_GET['edit'])){
$cat_id = $_GET['edit'];
include("includes/update_categories.php");
}
?>
UPDATE CATEGORIES.php
<!--EDITING CATEGORIES FORM-->
<form action="categories.php" method="post">
<div class="form-group">
<label for="cat-title">Edit Category</label>
<?php
//DEFAULT VALUE OF THE FORM QUERY
if(isset($_GET['edit'])){
$cat_id = $_GET['edit'];
$query = "SELECT * FROM categories WHERE cat_id = $cat_id ";
$select_categories_id = mysqli_query($connection, $query);
while($row = mysqli_fetch_assoc($select_categories_id)){
$cat_title = $row['cat_title'];
$cat_id = $row['cat_id'];
?>
<input value="<?php if(isset($cat_title)) {echo $cat_title;} ?>" class="form-control" type="text" name="cat_title">
<?php
} }
?>
<?php
///UPDATE QUERY
if(isset($_POST['update_category'])){
$the_cat_title = $_POST['cat_title'];
$query = "UPDATE categories SET cat_title = '{$the_cat_title}' WHERE cat_id = {$cat_id} ";
$update_category = mysqli_query($connection, $query);
if(!$update_category){
die("something went wrong" . mysqli_error($connection));
}
}
?>
</div>
<div class="form-group">
<input class="btn btn-primary" type="submit" name="update_category" value="update_category">
</div>
</form>
Ten tvuj kod je celkem chaos.
Nepouzivas skoro vubec isset, abys overil, ze bylo neco poslano.
Neresis zadnou kontrolu udaju, ktere ti uzivatel posle, takze snadno
hackovatelne nebo i omylem moze prijit o data.
Michas php kod s html.
Spolehas na to, ze se odesle hodnota submit tlacitka, coz zalezi tak trochu na
serveru.
Nemas tam zadny vypis chyb. Zkus pouzivat error_reporting a mysqli_error().
"UPDATE categories SET cat_title = '{$the_cat_title}' WHERE cat_id =
{$cat_id} "
To vyzaduje $the_cat_title a $cat_id. Tvuj formular obsahuje jen
<form action="categories.php" method="post">
<div class="form-group">
<label for="cat-title">Edit Category</label>
<input value="<?php if(isset($cat_title)) {echo $cat_title;} ?>" class="form-control" type="text" name="cat_title">
</div>
<div class="form-group">
<input class="btn btn-primary" type="submit" name="update_category" value="update_category">
</div>
</form>
Kdyz to znacne zjednodusim (tez vynecham kontroly), tak by to mohlo vypadat takto. Prikaz, formular, ktery to vyzaduje.
$cat_title = isset($_POST['cat_title']) ? $_POST['cat_title'] : '';
$cat_id = isset($_POST['cat_id']) ? $_POST['cat_id'] : '';
$query = "INSERT INTO `categories` (`cat_title`) VALUES ('$cat_title')";
<form>
<input name="cat_title" value="novy text">
<input type="submit">
</form>
$query = "UPDATE `categories` SET `cat_title`='$cat_title' WHERE `cat_id`=$cat_id";
<form>
<input name="cat_id" value="987">
<input name="cat_title" value="novy text">
<input type="submit">
</form>
$query = "SELECT `cat_id`, `cat_title` FROM `categories` WHERE `cat_id`=$cat_id";
<form>
<input name="cat_id" value="987">
<input type="submit">
</form>
$query = "DELETE FROM `categories` WHERE `cat_id`=$cat_id"; // tady by se dal pouzit $_GET, mazani odkazem
<form>
<input name="cat_id" value="987">
<input type="submit">
</form>
Muzes pouzit i tohle pro vypis formulare:
$form = '
<form>
<input name="cat_id" value="%s">
<input name="cat_title" value="%s">
<input type="submit">
</form>
';
echo vsprintf($form, array($cat_id * 1, "".$cat_title));
To same muze pouzit i pro sql prikaz
$query = "UPDATE `categories` SET `cat_title`='%s' WHERE `cat_id`=%s";
$query = vsprintf($query, array(
mysqli_real_escape_string("".$cat_title),
mysqli_real_escape_string($cat_id * 1)
)); // ale na poradi stringu, title je v tom prikazu pred id
$query = "UPDATE `categories` SET `cat_title`='%s' WHERE `cat_id`=%d"; // dal bych tam pak ale d, jako digit, integer
https://www.php.net/…vsprintf.php
string s
integer d, u, c, o, x, X, b
double g, G, e, E, f, F
Zobrazeno 7 zpráv z 7.