Autorius Tema: MVC sistemoje neupdeitinga SQL lenteliu  (Skaityta 5450 kartus)

Neprisijungęs darkInsane

  • Naujokas
  • *
  • Įrašai: 11
  • Karma: +0/-0
    • Žiūrėti profilį
MVC sistemoje neupdeitinga SQL lenteliu
« Įrašytas: 2014-09-17 22:47:25 pm »
Yra taip.. bandau kurtis su pazystamu pagalba mokymosi tikslais MVC tipo tvs sistema. Taigi prie esmes, yra administravimo paneleje articles, categories puslapiai. Jie tures tokias funkcijas kaip koreguoti, uzhaidinti ir istrint is DB. Pastrigau tokioje vietoje kur darau koregavima t.y. paspaudus edit mygtuka ismeta admin/categories/edit.php puslapi. Taip pat yra modelis "adminPosts.php" kuriame yra uz tai atsakingos funkcijos
Stai kodas:

<?php

function getPosts() {
    
$return = array();
    
$result mysql_query("SELECT * FROM articles ORDER BY article_id DESC") or die(mysql_error());
    if (
mysql_num_rows($result) > 0) {
        while (
$post mysql_fetch_assoc($result)) {
            
$return[] = $post;
        }
    } else if (
mysql_num_rows($result) == 0) {
        echo 
"<h4> No posts were found !</h4>";
    }
    return 
$return;
}

function 
addPost() {
    if (isset(
$_POST) && !empty($_POST)) {
        
$postName trim(mysql_real_escape_string($_POST['PostName']));
        
$postAuth trim(mysql_real_escape_string($_POST['PostAuth']));
        
$postDesc htmlentities(trim(mysql_real_escape_string($_POST['PostDesc'])), ENT_QUOTES);
        
$postTags trim(mysql_real_escape_string($_POST['PostTags']));
        
$postCategory trim(mysql_real_escape_string($_POST['PostCat']));
        
$error = array();
        if (!isset(
$postName) || empty($postName)) {
            
$error['PostName'] = "Article Name is required !";
        }
        if (!isset(
$postAuth) || empty($postAuth)) {
            
$error['PostAuth'] = "Article Auth is required !";
        }
        if (!isset(
$postTags) || empty($postTags)) {
            
$error['PostTags'] = "Article tags is required !";
        }
        if (!isset(
$postDesc) || empty($postDesc)) {
            
$error['PostDesc'] = "Article Desc is required !";
        }

        if (!isset(
$postCategory) || empty($postCategory)) {
            
$error['PostCat'] = "Article Category is required !";
        }

        if (empty(
$error)) {
            
$postTime time();
            
mysql_query("INSERT INTO articles (article_title, article_author, article_content, article_tags, cat_id,article_timestamp) VALUES ('$postName', '$postAuth', '$postDesc','$postTags','$postCategory',$postTime)") or die(mysql_error());
            return 
TRUE;
        }
        return 
$error;
    }
    return 
FALSE;
}

function 
editPost() {
    if (isset(
$_POST) && !empty($_POST)) {
        
$postID = (int) $_GET['id'];
        
$postName trim(mysql_real_escape_string($_POST['PostName']));
        
$postAuth trim(mysql_real_escape_string($_POST['PostAuth']));
        
$postDesc htmlentities(trim(mysql_real_escape_string($_POST['PostDesc'])), ENT_QUOTES);
        
$postCat trim(mysql_real_escape_string($_POST['PostCat']));
        
$error = array();
        if (empty(
$error)) {
            
$query mysql_query("UPDATE articles SET article_title ='$postName', article_author = '$postAuth', article_content = '$postDesc', cat_id = '$postCat' WHERE article_id = . '$postID'");
            
mysql_query($query);
            return 
TRUE;
        }
        return 
$error;

    }
    return 
FALSE;
}

function 
deletePost($id) {
    
$id = (int) $id;
    
mysql_query("DELETE FROM articles WHERE article_id = '$id'") or die(mysql_error());
}

function 
hidePost($id$action 0) {
    
$id = (int) $id;
    
$action = (int) $action;
    
mysql_query("UPDATE articles SET is_deleted = '$action' WHERE article_id = '$id'") or die(mysql_error());
}

toliau yra kontrolleris admin.php kuriame yra visa tai:
switch ($action) {
    case 'posts' : {
            $subAction = getSegments(2);
            if (gettype($subAction) == 'string') {
                $id = getSegments(3);
                switch ($subAction) {
                    case 'hide' : {
                            hidePost($id, 1);
                        } break;
                    case 'unhide' : {
                            hidePost($id, 0);
                        } break;
                    case 'delete' : {
                            deletePost($id);
                        } break;
                    case 'edit' : {
                            $message = editPost();
                            $admin_categories = getCategories();
                            $admin_posts = getPosts();
                            if ($message === TRUE) {
                                redirect("admin/posts");
                            }
                            echo load_layout('admin_base', array(
                                'header' => load_view('admin/html/header'),
                                'content' => load_view('admin/posts/edit', array('message' => $message, 'admin_categories_list' => $admin_categories, 'admin_post_list' => $admin_posts)),
                                'footer' => load_view('admin/html/footer')
                                    )
                            );
                            exit;
                        } break;

                    case 'new' : {
                            $admin_categories = getCategories();
                            $message = addPost();
                            if ($message === TRUE) {
                                redirect("admin/posts");
                            }
                            echo load_layout('admin_base', array(
                                'header' => load_view('admin/html/header'),
                                'content' => load_view('admin/posts/add', array('message' => $message, 'admin_categories_list' => $admin_categories)),
                                'footer' => load_view('admin/html/footer')
                                    )
                            );
                            exit;
                        } break;
                }
            }
            $admin_posts = getPosts();
            echo load_layout('admin_base', array(
                'header' => load_view('admin/html/header'),
                'content' => load_view('admin/posts/list', array('list' => $admin_posts)),
                'footer' => load_view('admin/html/footer')
                    )
            );
        }
        break;

na ir pats edit.php failiukas

<?php
$message 
= (isset($params['message']) && !empty($params['message']) ? $params['message'] : NULL);
$admin_categories = (isset($params['admin_categories_list']) && !empty($params['admin_categories_list']) ? $params['admin_categories_list'] : NULL);
$admin_posts = (isset($params['admin_post_list']) && !empty($params['admin_post_list']) ? $params['admin_post_list'] : NULL);
?>


<div class="container">
    <?php if (isset($message) && !empty($message)) { ?>
        <p class="bg-danger">
            <small style="color:#aa0000;">
                <?php echo implode("<br />"$message); ?>
            </small>
        </p>
        <div class="clearfix"></div>
    <?php ?>
    <form action="admin/posts/edit/<?php echo $postID?>" method="post">
        <h4>Edit post</h4>
        <label for="PostName">Post Name:</label>
        <div class="form-group <?php echo (isset($message['PostName']) ? " has-error" "  "); ?>">
            <input type="text" name="PostName" class="form-control" value="<?php echo $admin_post['article_author']; ?>"><br />
        </div>
        <label for="PostAuth">Author Name:</label>
        <div class="form-group <?php echo (isset($message['PostAuth']) ? " has-error" "  "); ?>">
            <input type="text" name="PostAuth" class="form-control" value="<?php echo $admin_post['article_author']; ?>"><br />
        </div>
        <div class="form-group <?php echo (isset($message['PostTags']) ? " has-error" "  "); ?>">
            <label for="PostTags">Post Tags:</label>
            <input type="text" name="PostTags" class="form-control" placeholder="Please insert tags" value="<?php echo $admin_post['article_tags']; ?>">
        </div>
        <label for="PostDesc">Post description:</label>
        <div class="form-group <?php echo (isset($message['PostDesc']) ? " has-error" "  "); ?>">
            <textarea class="form-control" rows="6" name="PostDesc"><?php echo $admin_post['article_content']; ?></textarea>
        </div>

        <label for="PostName">Category:</label>
        <select class="form-control" name="PostCats">
            <?php if (isset($admin_categories) && !empty($admin_categories)) : ?>
                <?php foreach ($admin_categories as $admin_category) : ?>
                    <?php // echo (( $admin_category['category_id']) ? 'selected="selected"' : ''); ?>
                    <option value="<?php echo $admin_category['category_id']; ?>" <?php echo (($admin_category['category_id'] == $post['cat_id']) ? 'selected="selected"' ''); ?>>
                        <?php echo $admin_category['cat_title']; ?>
                    </option>

                <?php endforeach; ?>
            <?php endif; ?>
        </select>

        <button type="submit" name="submit" id="admin_button" class="btn btn-danger" value="1">Edit post</button>
        <input type="hidden" name="id" value="<?php echo $postID?>" />
    </form>
</div>

Prisegu kokia klaida meta
« Paskutinį kartą keitė: 2014-09-19 13:10:57 pm sukūrė darkInsane »

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 968
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #1 Įrašytas: 2014-09-18 00:22:05 am »
Tarkim sita vieta:
case 'edit' : {
                            $message = editPost();
                            $admin_categories = getCategories();
                            $admin_posts = getPosts();
                            if ($message === TRUE) {
                                redirect("admin/posts");
                            }
                            echo load_layout('admin_base', array(
                                'header' => load_view('admin/html/header'),
                                'content' => load_view('admin/posts/edit', array('message' => $message, 'admin_categories_list' => $admin_categories, 'admin_post_list' => $admin_posts)),
                                'footer' => load_view('admin/html/footer')
                                    )
                            );
                            exit;
                        } break;

Sitoje eiluteje tu perduodi i edit.php faila visa content'a
'content' => load_view('admin/posts/edit', array('message' => $message, 'admin_categories_list' => $admin_categories, 'admin_post_list' => $admin_posts)),

Virsuje edit.php failo matau sitas content'as inicijuojamas sukuriant naujus kintamuosius:
<?php
$message 
= (isset($params['message']) && !empty($params['message']) ? $params['message'] : NULL);
$admin_categories = (isset($params['admin_categories_list']) && !empty($params['admin_categories_list']) ? $params['admin_categories_list'] : NULL);
$admin_posts = (isset($params['admin_post_list']) && !empty($params['admin_post_list']) ? $params['admin_post_list'] : NULL);
?>


Bet niekur nematau is kur tu trauki tiek $admin_post, tiek $post, del kuriu meta klaidas ir yra templeito edit.php faile. O nematau todel, kad jie tiesiog nera perduoti is kontrolerio ir aplamai kazkur sukurti.
« Paskutinį kartą keitė: 2014-09-18 00:25:09 am sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs Lukas

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7431
  • Karma: +232/-15
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #2 Įrašytas: 2014-09-18 08:37:30 am »
nelabai turiu laiko gilintis i koda ir ieskoti atsakymo, bet pastebejimas:

nenaudok mysql_ funkciju. nei vienos. jos nesaugios, joms reikia daugiau apsaugu, tikriausiai visko vistiek neapsaugosi ir bus bedu. Jei noresi sukurti unit testus savo kodui, tai bus dar blogiau, testuoti koda bus praktiskai neimanoma. Taip pat nenaudok tokiu "funkciju" kaip matau pirma faila.

vietoj mysql_ naudok pdo arba koki nors ORM http://www.mehdi-khalili.com/orm-anti-patterns-part-1-active-record https://www.google.lt/search?q=what+is+orm

vietoj funkciju failo, sudek viska i viena namespace'a http://daylerees.com/php-namespaces-explained http://php.net/manual/en/language.namespaces.php jei jie nepatinka, tada MVC sistemoje pridek "plugins" ir naudok pluginus. Pasiziurek dokumentacijoj savo naudojamo framework'o kaip jam rasyti plugin'us.

jei naudoji full-stack framework'a, tai jame tikriausiai yra ir ORM ir pluginai ir dar template engine'as.

jei nenaudoji framework'u, tai siulau naudoti. sprendziant is to, kad tavo kodas nera tvarkingas, tai tikriausiai nenaudoji. siulau isbandyti kanors is situ:

http://phalconphp.com/en/
http://symfony.com/
jei pastarieji pasirodys per sudetingi ir nepavyks ju niekaip pasileisti, tada siulau imti kazka mazesnio.

mazesniu gali gal labiau parekomenduoti kiti, man ju praktiskai neteke naudoti. As pradejau mokytis nuo full-stack frameworku, tai jei domina apie juos galiu daugiau. pries juos kodinau su plain php, nes dar nelabai budavo tu framework'u.. perejimas is plain php i full-stack framework yra isukis, ji praejus niekada nesinori grizti ;) cia panasiai kaip 10 metu vaikstai i kur nors 7km pestute ir viena diena ismoksti vairuoti masina ir pamatai, kad gali nukeliauti ir 7 ir 700 km ;)

gal nelabai atsakau as i tavo klausima, bet gal tai pades tau mokytis toliau.
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Gerda Photography
Serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs darkInsane

  • Naujokas
  • *
  • Įrašai: 11
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #3 Įrašytas: 2014-09-18 11:09:32 am »
To ganjabest na jo nepasiduoda bet matai kas gaunas toks dalykas kai irasau va taip su foreach:
<form action="admin/categories" method="post">
        <h4>Edit category</h4>
        <label for="CatName">Category Name:</label>
        <div class="form-group <?php echo (isset($message['CatName']) ? " has-error" " "); ?>">
            <?php if (isset($admin_categories) && !empty($admin_categories)) : ?>
                <?php foreach ($admin_categories as $admin_category) : ?>
                    <input type="text" name="CatName" class="form-control" id="CatName" value="<?php echo $admin_category['cat_title']; ?>">

                </div>
                <label for="CatDesc">Category Description:</label>
                <div class="form-group <?php echo (isset($message['CatDesc']) ? " has-error" " "); ?>">
                    <input type="text" name="CatDesc" class="form-control" id="CatDesc" value="<?php echo $admin_category['cat_description']; ?>">

                <?php endforeach; ?>
            <?php endif; ?>
        </div>

        <button type="submit" name="submit" id="admin_button" class="btn btn-danger">Edit category</button>
        <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>">
    </form>

tada reiksmes paduoda, bet.. input laukeliai susidubliuoja (: tai nepagaunu kas netaip

To Lukas na dekoju uz patarima, siuo metu karts nuo karto pasizaidziu su Codeigniter, jis man toks is suprantamesniu atrodo :) Dar gal veliau meginsiu studint visu isgirta Laravel beje del pdo naudojimo vietoj mysql_ su juom jau daugiau kaip suprantu prie objektu varai ar ne ?
« Paskutinį kartą keitė: 2014-09-18 11:13:50 am sukūrė darkInsane »

Manualai.lt Forumas

Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #3 Įrašytas: 2014-09-18 11:09:32 am »

Neprisijungęs Lukas

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7431
  • Karma: +232/-15
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #4 Įrašytas: 2014-09-18 11:43:36 am »
taip, pdo yra objektinis abstrakcijos layer'is. http://php.net/manual/en/intro.pdo.php bet as bent jau praktiskai jo nenaudojau niekada, nebent kelioms uzklausoms kazkur, kur reikejo esancia sistema pamodifikuoti. Dazniausiai naudoji ORM'a kuris jau buna framework'e.
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Gerda Photography
Serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 968
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #5 Įrašytas: 2014-09-18 16:03:13 pm »
To ganjabest na jo nepasiduoda bet matai kas gaunas toks dalykas kai irasau va taip su foreach:
<form action="admin/categories" method="post">
        <h4>Edit category</h4>
        <label for="CatName">Category Name:</label>
        <div class="form-group <?php echo (isset($message['CatName']) ? " has-error" " "); ?>">
            <?php if (isset($admin_categories) && !empty($admin_categories)) : ?>
                <?php foreach ($admin_categories as $admin_category) : ?>
                    <input type="text" name="CatName" class="form-control" id="CatName" value="<?php echo $admin_category['cat_title']; ?>">

                </div>
                <label for="CatDesc">Category Description:</label>
                <div class="form-group <?php echo (isset($message['CatDesc']) ? " has-error" " "); ?>">
                    <input type="text" name="CatDesc" class="form-control" id="CatDesc" value="<?php echo $admin_category['cat_description']; ?>">

                <?php endforeach; ?>
            <?php endif; ?>
        </div>

        <button type="submit" name="submit" id="admin_button" class="btn btn-danger">Edit category</button>
        <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>">
    </form>

tada reiksmes paduoda, bet.. input laukeliai susidubliuoja (: tai nepagaunu kas netaip

Nu tai tu jausk skirtuma tarp kodu. Kode kuri dabar parasei nera nei $admin_post, nei $post, del kuriu tau ir meta klaidas ankstesniame kode. Tu skaityk ka raso. Aiskiai juk parasyta kad del situ kintamuju yra klaidos. Ir ten reiskia kad nezinomi kintamieji. Kaip tu gali lyginti kazkokias reiksmes, kuriu tu net nesukures? 
Is kur tavo kode isvis tas $post['cat_id'] istrauktas? As tau cia nesakau, kad "galbut" cia klaida, bet sakau, kad cia 100% klaida ir neieskok kitur po s..na smegenu  ;)
« Paskutinį kartą keitė: 2014-09-18 16:08:02 pm sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs Haris

  • Dalyvis
  • **
  • Įrašai: 833
  • Karma: +56/-0
    • Žiūrėti profilį
    • www.RubikoKubas.Lt
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #6 Įrašytas: 2014-09-18 21:45:10 pm »
Man atrodo, kad radau klaida.

Kai tu admin.php controllerije kreipiesi i editPost() funkcija, gauni atsakyma is funkcijos true ir tu ta true prilygini $message kintamajam.

Kodas: (php) [Pasirinkti]
case 'edit' : {
                            $message = editPost(); // Cia gauni true
                            $admin_categories = getCategories();
                            $admin_posts = getPosts();
                            if ($message === TRUE) {
                                redirect("admin/posts");
                            }
                            echo load_layout('admin_base', array(
                                'header' => load_view('admin/html/header'),
                                'content' => load_view('admin/posts/edit', array('message' => $message, 'admin_categories_list' => $admin_categories, 'admin_post_list' => $admin_posts)),
                                'footer' => load_view('admin/html/footer')
                                    )
                            );
                            exit;
                        } break;

Kodas: (php) [Pasirinkti]
function editPost() {
    if (isset($_POST) && !empty($_POST)) {
        $postID = (int) $_GET['id'];
        $postName = trim(mysql_real_escape_string($_POST['PostName']));
        $postAuth = trim(mysql_real_escape_string($_POST['PostAuth']));
        $postDesc = htmlentities(trim(mysql_real_escape_string($_POST['PostDesc'])), ENT_QUOTES);
        $postCat = trim(mysql_real_escape_string($_POST['PostCat']));
        $error = array();
        if (empty($error)) {
            $query = mysql_query("UPDATE articles SET article_title ='$postName', article_author = '$postAuth', article_content = '$postDesc', cat_id = '$postCat' WHERE article_id = . '$postID'");
            mysql_query($query);
            return TRUE; // Pagal tavo koda, sitas true keliauja i message kintamaji.
        }
        return $error;

    }
    return FALSE;
}

Kadangi, gauni true i message kintamaji, tai automatiskai:
$message = (isset($params['message']) && !empty($params['message']) ? $params['message'] : NULL); // sitas tavo message kintamasis taip pat turi reiksme [b]true[/b]

pabandyk debugginti edit.php faile.

$message = (isset($params['message']) && !empty($params['message']) ? $params['message'] : NULL);
print_r($message);

ir as garantuoju, kad tau rasys true.

Siulau paprasta sprendima, jeigu $_POST kintamasis yra tuscias, tada trauk is duomenu bazes posto duomenis ir return'ink juos, jeigu yra $POST, tada vykdai posto updeita.

EDIT.

sorry, nusisnekejau. neperskaites viso kodo atrasiau. ganjabest yra teisus.
« Paskutinį kartą keitė: 2014-09-19 08:50:15 am sukūrė Haris »

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 968
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #7 Įrašytas: 2014-09-18 22:05:48 pm »
Dar karta kartoju zmones  ;D

Butent sitoje kodo vietoje yra templeito failo uzkrovimas (header, content, footer)

                        case 'edit' : {
                            $message = editPost();
                            $admin_categories = getCategories();
                            $admin_posts = getPosts();
                            if ($message === TRUE) {
                                redirect("admin/posts");
                            }
                            echo load_layout('admin_base', array(
                                'header' => load_view('admin/html/header'),
                                'content' => load_view('admin/posts/edit', array('message' => $message, 'admin_categories_list' => $admin_categories, 'admin_post_list' => $admin_posts)),
                                'footer' => load_view('admin/html/footer')
                                    )
                            );
                            exit;
                        } break;

Sitoje eiluteje mes puikiai matome kaip i edit.php template faila perduodami kintamieji (message, admin_categories_list, admin_post_list):
'content' => load_view('admin/posts/edit', array('message' => $message, 'admin_categories_list' => $admin_categories, 'admin_post_list' => $admin_posts))

Tada edit.php faile mes puikiai matome, kaip sitie kintamieji patikrinami ir naudojami toliau:
<?php
$message 
= (isset($params['message']) && !empty($params['message']) ? $params['message'] : NULL);
$admin_categories = (isset($params['admin_categories_list']) && !empty($params['admin_categories_list']) ? $params['admin_categories_list'] : NULL);
$admin_posts = (isset($params['admin_post_list']) && !empty($params['admin_post_list']) ? $params['admin_post_list'] : NULL);
?>


Bet is kazkur dar tame faile atsirade ir $admin_post ir $post masyvai. Is kur??? Juk jie nera perduodi is kontrolerio ar kazkaip panasiai. Todel ir matome puikiai tas klaidas del situ vietu. Juk ir raso "Undefined variable $admin_post ir t.t.". Tai butent, tai ka reikia sutvarkyti. O jus ieskot kazkur kitur slieku. Net eilutes klaidos pranesimuose parasytos, kuriose butent ir yra sitie nezinomi kintamieji. As jau trecia karta autoriui aiskinu, bet ziuriu niekas neskaitot  ;D

P.S. ir dar faktas, kad pirmame variante klaida yra ir del $postID kintamojo, nes ir jis nematau, kad kazkur sukurtas. Tik tiesiog, klaidos pranesimas yra nematomas, nes idetas tokiose vietose, kur ir siaip rezultatas nematomas. Bet jeigu toje vietoje mes pasitikrintume per narsykle paspaudus "Inspect element" ir t.t. tarp html'o puikiai turetu buti isiraite ir sitie klaidu pranesimai.
« Paskutinį kartą keitė: 2014-09-18 22:13:25 pm sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs darkInsane

  • Naujokas
  • *
  • Įrašai: 11
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #8 Įrašytas: 2014-09-19 13:17:24 pm »
Dar karta kartoju zmones  ;D

Butent sitoje kodo vietoje yra templeito failo uzkrovimas (header, content, footer)

                        case 'edit' : {
                            $message = editPost();
                            $admin_categories = getCategories();
                            $admin_posts = getPosts();
                            if ($message === TRUE) {
                                redirect("admin/posts");
                            }
                            echo load_layout('admin_base', array(
                                'header' => load_view('admin/html/header'),
                                'content' => load_view('admin/posts/edit', array('message' => $message, 'admin_categories_list' => $admin_categories, 'admin_post_list' => $admin_posts)),
                                'footer' => load_view('admin/html/footer')
                                    )
                            );
                            exit;
                        } break;

Sitoje eiluteje mes puikiai matome kaip i edit.php template faila perduodami kintamieji (message, admin_categories_list, admin_post_list):
'content' => load_view('admin/posts/edit', array('message' => $message, 'admin_categories_list' => $admin_categories, 'admin_post_list' => $admin_posts))

Tada edit.php faile mes puikiai matome, kaip sitie kintamieji patikrinami ir naudojami toliau:
<?php
$message 
= (isset($params['message']) && !empty($params['message']) ? $params['message'] : NULL);
$admin_categories = (isset($params['admin_categories_list']) && !empty($params['admin_categories_list']) ? $params['admin_categories_list'] : NULL);
$admin_posts = (isset($params['admin_post_list']) && !empty($params['admin_post_list']) ? $params['admin_post_list'] : NULL);
?>


Bet is kazkur dar tame faile atsirade ir $admin_post ir $post masyvai. Is kur??? Juk jie nera perduodi is kontrolerio ar kazkaip panasiai. Todel ir matome puikiai tas klaidas del situ vietu. Juk ir raso "Undefined variable $admin_post ir t.t.". Tai butent, tai ka reikia sutvarkyti. O jus ieskot kazkur kitur slieku. Net eilutes klaidos pranesimuose parasytos, kuriose butent ir yra sitie nezinomi kintamieji. As jau trecia karta autoriui aiskinu, bet ziuriu niekas neskaitot  ;D

P.S. ir dar faktas, kad pirmame variante klaida yra ir del $postID kintamojo, nes ir jis nematau, kad kazkur sukurtas. Tik tiesiog, klaidos pranesimas yra nematomas, nes idetas tokiose vietose, kur ir siaip rezultatas nematomas. Bet jeigu toje vietoje mes pasitikrintume per narsykle paspaudus "Inspect element" ir t.t. tarp html'o puikiai turetu buti isiraite ir sitie klaidu pranesimai.
gerai suprantu tai kad neranda tu kintamuju, bet tada toks durnas klausimas, tai kaip tada juos perduot? Kituose failuose kur "ideti article" ar tiesiog atvaizduoti juos, naudoju if (isset) is_empty tikrinimus su foreach o kaip galima kitu budu ?

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 968
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #9 Įrašytas: 2014-09-19 19:22:08 pm »
Kaip perduodami message ir kiti, taip perduok ir tuos.

Nu pvz tau reikia sitoje vietoje:
<?php
                        
case 'edit' : {
                            
$message editPost();
                            
$admin_categories getCategories();
                            
$admin_posts getPosts();

                            
$post getPost(); // Tarkim cia uzkrauni post'a

                            
if ($message === TRUE) {
                                
redirect("admin/posts");
                            }
                            echo 
load_layout('admin_base', array(
                                
'header' => load_view('admin/html/header'),
                                
'content' => load_view('admin/posts/edit', array(
                                    
'message' => $message
                                    
'admin_categories_list' => $admin_categories
                                    
'admin_post_list' => $admin_posts,
                                    
'post' => $post //Cia perduodi $post kintamaji i savo faila. Siuo atveju edit.php
                                
)),
                                
'footer' => load_view('admin/html/footer')
                                    )
                            );
                            exit;
                        } break;
?>



Ir edit.php faile pasimi kaip ir kitus ten esancius kintamuosius. Nu ir t.t. :) Kazkaip keistai cia jus su tuo draugu, kuriat TVS, bet kintamuju net nemokat perduoti faila :D
« Paskutinį kartą keitė: 2014-09-19 19:25:08 pm sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs darkInsane

  • Naujokas
  • *
  • Įrašai: 11
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #10 Įrašytas: 2014-09-23 11:16:51 am »
va dabar duomenys pasiduoda, bet spaudziant submit neupdeitina i sql kazko.. :/

function editCategory() {

    if (isset($_POST['submit'])) {
        $catName = trim(mysql_real_escape_string($_POST['CatName']));
        $catDesc = htmlentities(trim(mysql_real_escape_string($_POST['CatDesc'])), ENT_QUOTES);
        $id = (int) $id;
        $error = array();

        if (!isset($catName) || empty($catName)) {
            $error['CatName'] = "Category name is required !";
        }
        if (!isset($catDesc) || empty($catDesc)) {
            $error['CatDesc'] = "Category description is required !";
        }
        if (empty($error)) {
            mysql_query("UPDATE categories SET cat_title = '$catName', cat_description = '$catDesc' WHERE category_id = '$id'") or die(mysql_error());
            return TRUE;
        }
        return $error;
    }
    return FALSE;
}

 na jei tiksliau tai as ale mokinuos ir keleta zmoniu man padeda, tai kai jiems baigiu ikyret, kartais ir forumuose prasau help :D

« Paskutinį kartą keitė: 2014-09-23 11:21:25 am sukūrė darkInsane »

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 968
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #11 Įrašytas: 2014-09-23 23:27:28 pm »
Visu pirma, tavo kodas negauna $id reiksmes, todel ir neupdeitina. Kazkur per Request'a turi perduoti id reiksme. Siuo atveju kazkas tokio turi buti:
$id = trim(mysql_real_escape_string($_POST['id']));
O tarp html, formoje ten maciau ir buvo hidden inpute tas id, bet po to isemes tu ji buvai kazkodel...

O daugiau neskaiciau  :D
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs justinas

  • Naujokas
  • *
  • Įrašai: 164
  • Karma: +16/-3
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #12 Įrašytas: 2014-09-24 09:03:09 am »
Košė kažkokia, ne MVC :)

Neprisijungęs darkInsane

  • Naujokas
  • *
  • Įrašai: 11
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #13 Įrašytas: 2014-09-26 12:36:49 pm »
Visu pirma, tavo kodas negauna $id reiksmes, todel ir neupdeitina. Kazkur per Request'a turi perduoti id reiksme. Siuo atveju kazkas tokio turi buti:
$id = trim(mysql_real_escape_string($_POST['id']));
O tarp html, formoje ten maciau ir buvo hidden inpute tas id, bet po to isemes tu ji buvai kazkodel...

O daugiau neskaiciau  :D


o kaip del sios vietos ?

  <form action="admin/categories" method="post">
        <h4>Edit category</h4>
        <label for="CatName">Category Name:</label>
        <div class="form-group <?php echo (isset($message['CatName']) ? " has-error" " "); ?>">
            <input type="text" name="CatName" class="form-control" value="<?php echo (isset($admin_category['cat_title']) ? $admin_category['cat_title'] : ''); ?> ">
        </div>
        <label for="CatDesc">Category Description:</label>
        <div class="form-group <?php echo (isset($message['CatDesc']) ? " has-error" " "); ?>">
            <input type="text" name="CatDesc" class="form-control" value="<?php echo (isset($admin_category['cat_description']) ? $admin_category['cat_description'] : ''); ?>">
        </div>
        <button type="submit" name="submit" id="admin_button" class="btn btn-danger">Edit category</button>
      <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>">  <--------
    </form>
dabar dar pasiduodu $id

$id = (isset($params['id']) && !empty($params['id']) ? $params['id'] : NULL);

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 968
  • Karma: +41/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #14 Įrašytas: 2014-09-27 12:35:29 pm »
Nu tai jeigu $id pasiduoti taip:

$id = (isset($params['id']) && !empty($params['id']) ? $params['id'] : NULL);

tai sitoje vietoje, taip:
<input type="hidden" name="id" value="<?php echo $id?>">  <--------

Bet siaip jeigu narsikles link'e yra id=... reiksme, kuri neisvengiamai turetu buti jeigu, redaguoji kazkoki elementa, tai nereikia tau cia nieko keisti.
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Manualai.lt Forumas

Ats: MVC sistemoje neupdeitinga SQL lenteliu
« Atsakymas #14 Įrašytas: 2014-09-27 12:35:29 pm »