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.

Člen

Zobrazeno 7 zpráv z 7.
//= 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.
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.