November Black Friday C# týden
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Pouze tento týden sleva až 80 % na e-learning týkající se C#

Diskuze: Mně neznámá chyba v PHP kódu - Prosím o pomoc!

Aktivity (2)
Avatar
Tomi000
Člen
Avatar
Tomi000:28. října 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
Author
</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. října 15:42
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Tomi000
Daniel Vítek:28. října 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. října 16:05
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Tomi000
Člen
Avatar
Odpovídá na Tomi000
Tomi000:28. října 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. října 16:11
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29. října 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. října 8:31
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29. října 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. října 8:51
 
Nahoru Odpovědět
29. října 8:51
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29. října 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. října 8:57
 
Nahoru Odpovědět
29. října 8:57
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29. října 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. října 8:59
 
Nahoru Odpovědět
29. října 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.