IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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
Tomi000
Člen
Avatar
Tomi000:28.10.2019 15:42

Ahoj všem, jmenuji se Tomáš a ještě než popíšu problém, chtěl bych jen říci, že jsem v programování nový a vše se učím doma sám, takže psaní kódu možná není zatím nejhezčí, ale snažím se.

Mám takový problém. Dělám podle kurzu z UDEMY takový projektík - webovku. Mým cílem je nyní udělat stránku, kde mohu přidávat, odebírat a editovat (update query) jména kategorií, které mám v SQL databázi. Odebírat a přidávat jde v pořádku, avšak v editu je problém. Snažím se, aby se po kliknutí na tlačítko edit objevilo okno (formulář) ve kterém bude předepsané současné jméno dané kategorie, které mohu přepsat a po kliknutí na update tlačítko změnit na jméno nové. Předepsání hodnot funguje, avšak po vyplnění nového jména a kliknutí na update tlačítko pole zmizí, avšak databáze se nijak nezmění - nevyskočí ani žádná chybová hláška, tváří se to, jak kdyby to normálně prošlo. (Viz obrázky)

Zkusil jsem: Kód jsem již zkoušel několikrát přepsat, tvrdnu nad tím už nějakou chvíli. Zkoušel jsem to různými způsoby, dokonce jsem to i opisoval přesně jako pán ve video kurzu, avšak mně to stále nejde. Z nějakého důvodu to vypadá, že moje if podmínka, ve které je query na UPDATE databáze, nikdy není pravda. Zdrojový kod kopíruji níže, pro jistotu ještě přikládám ve formě obrázků v příloze. Za jakékoliv připomínky, řešení, či nějakou kritiku, co mi pomůže se zlepšit, budu rád. Předem děkuji.

admin/categori­es.php

<?php ob_start(); ?>
<?php include("inclu­des/admin_hea­der.php"); ?>
<div id="wrapper">

<!-- Navigation -->
<?php include("inclu­des/admin_navi­gation.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
<small>Author</sma­ll>
</h1>

<div class="col-xs-6">

<?php

//ADDING CATEGORIES QUERY

if(isset($_POS­T['submit'])){
$cat_title = $_POST['cat_ti­tle'];
if($_POST['cat_ti­tle'] == "" || 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($con­nection, $query);
if(!$create_ca­tegory){
die("Something went wrong" . mysqli_error($con­nection));
}
}
}
?>

<!--ADDING CATEGORIES FORM -->

<form action="catego­ries.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['e­dit'])){
$cat_id = $_GET['edit'];
include("inclu­des/update_ca­tegories.php");

}
?>

includes/upda­te_categories­.php

<!--EDITING CATEGORIES FORM-->
<form action="catego­ries.php" method="post">
<div class="form-group">
<label for="cat-title">Edit Category</label>

<?php

//DEFAULT VALUE OF THE FORM QUERY

if(isset($_GET['e­dit'])){
$cat_id = $_GET['edit'];

$query = "SELECT * FROM categories WHERE cat_id = $cat_id ";
$select_catego­ries_id = mysqli_query($con­nection, $query);

while($row = mysqli_fetch_as­soc($select_ca­tegories_id)){
$cat_title = $row['cat_title'];
$cat_id = $row['cat_id'];
?>

<input value="<?php if(isset($cat_ti­tle)) {echo $cat_title;} ?>" class="form-control" type="text" name="cat_title">

<?php
} }
?>

<?php

///UPDATE QUERY

if(isset($_POS­T['update_cate­gory'])){

$the_cat_title = $_POST['cat_ti­tle'];
$query = "UPDATE categories SET cat_title = '{$the_cat_title}' WHERE cat_id = {$cat_id} ";
$update_category = mysqli_query($con­nection, $query);

if(!$update_ca­tegory){
die("something went wrong" . mysqli_error($con­nection));

}
}
?>

</div>
<div class="form-group">
<input class="btn btn-primary" type="submit" name="update_ca­tegory" value="update_ca­tegory">
</div>
</form>

 
Odpovědět
28.10.2019 15:42
Avatar
Odpovídá na Tomi000
Neaktivní uživatel:28.10.2019 16:05

Vlož prosím zdrojový kód jako zdrojový kód, do té doby ti nikdo neporadí :)

[code] tvuj kod [/code]

Nahoru Odpovědět
28.10.2019 16:05
Neaktivní uživatelský účet
Avatar
Tomi000
Člen
Avatar
Odpovídá na Tomi000
Tomi000:28.10.2019 16:11

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>
 
Nahoru Odpovědět
28.10.2019 16:11
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29.10.2019 8:31

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>
 
Nahoru Odpovědět
29.10.2019 8:31
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29.10.2019 8:51

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));
Editováno 29.10.2019 8:51
 
Nahoru Odpovědět
29.10.2019 8:51
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29.10.2019 8:57

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
Editováno 29.10.2019 8:57
 
Nahoru Odpovědět
29.10.2019 8:57
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29.10.2019 8:59
$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

Editováno 29.10.2019 8:59
 
Nahoru Odpovědět
29.10.2019 8:59
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 7 zpráv z 7.