smile
smile

Reputation: 117

updating information Mysqli_php

i'm trying to make admin panel for simple website

now i'm trying to update the information

but i don't know why it don't update

on ControlPage

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once("../guest.php");
require_once("../db.php");

global $tf_handle;
$gb = new guest();


$id = 0;    
//get id from url
if(isset($_GET['id']))
{
    $id = (int)$_GET['id'];
}

$message = $gb->getMessage($id);

if(isset($_POST['submit']))
{
    $uid   = $_POST['id'];
    echo $uid;
    $name = $_POST['name'];
    echo $name;
    $msg  = $_POST['message'];
    echo $msg;
    $update = $gb->Update($id,$name,$msg);
    if($update)
    {
        echo('updated');
    }
    else
    {

        echo("not updated");
    }
}


?>    

<!DOCTYPE html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>Guestbook control panel</title>

    <!-- Bootstrap Core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom CSS -->
    <link href="css/sb-admin.css" rel="stylesheet">

    <!-- Morris Charts CSS -->
    <link href="css/plugins/morris.css" rel="stylesheet">

    <!-- Custom Fonts -->
    <link href="font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->

</head>

<body>

    <div id="wrapper">

        <!-- Navigation -->
        <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="index.php">GuestBook Admin</a>
            </div>
            <!-- Top Menu Items -->
            <ul class="nav navbar-right top-nav">


                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-user"></i> Ambaleh <b class="caret"></b></a>
                    <ul class="dropdown-menu">

                        <li>
                            <a href="#"><i class="fa fa-fw fa-gear"></i> Settings</a>
                        </li>
                        <li class="divider"></li>
                        <li>
                            <a href="#"><i class="fa fa-fw fa-power-off"></i> Log Out</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
            <div class="collapse navbar-collapse navbar-ex1-collapse">
                <ul class="nav navbar-nav side-nav">
                    <li class="active">
                        <a href="index.php"><i class="fa fa-fw fa-dashboard"></i> Dashboard</a>
                    </li>
                    <li>
                        <a href="index.php"><i class="fa fa-fw fa-bar-chart-o"></i>Messages</a>
                    </li>
                    <li>
                        <a href="logout.php"><i class="fa fa-fw fa-bar-chart-o"></i>Logout</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </nav>

        <div id="page-wrapper">

            <div class="container-fluid">

                <!-- Page Heading -->


                                <!-- Page Heading -->
                <div class="row">
                    <div class="col-lg-12">
                        <h1 class="page-header">
                            Admin Panel
                        </h1>
                        <ol class="breadcrumb">
                            <li>
                                <i class="fa fa-dashboard"></i>  <a href="index.html">Dashboard</a>
                            </li>
                            <li class="active">
                                <i class="fa fa-table"></i> Messages
                            </li>
                        </ol>
                    </div>


                </div>
                <div class="row">
                    <div class="col-lg-12">
                        <h2>Update Messages</h2>
                        <form role="form" action="update.php" method = "post">
                            <div class="form-group">
                                <label>Name</label>
                                <input type="text" name="name" value = '<?php echo $message['name'];?>'  class="form-control">
                            </div>
                            <div class="form-group">
                                <label>Message</label>
                                <textarea name="message" class="form-control" rows="3"><?php echo $message['message'];?></textarea>
                            </div>
                            <input type="hidden" name="id" value='<?php echo $id;?>' >
                            <input type="submit" name="submit" value="save!">



                        </form>                         

                    </div>                    


                    </div>    

                </div>
                <!-- /.row -->

            </div>
            <!-- /.container-fluid -->

        </div>
        <!-- /#page-wrapper -->

    </div>
    <!-- /#wrapper -->

    <!-- jQuery -->
    <script src="js/jquery.js"></script>

    <!-- Bootstrap Core JavaScript -->
    <script src="js/bootstrap.min.js"></script>

    <!-- Morris Charts JavaScript -->
    <script src="js/plugins/morris/raphael.min.js"></script>
    <script src="js/plugins/morris/morris.min.js"></script>
    <script src="js/plugins/morris/morris-data.js"></script>

</body>

</html>

i tried to echo the variables to check

but it already echo & takes the information from the POST request so the problem from another thing

update.php

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('db.php');
class guest
{

    //get all the messages
    public function getMessage($id)
    {
        global $tf_handle;

        $querycheck = mysqli_query($tf_handle,"SELECT * FROM `messages` WHERE `id` = $id");
        if($querycheck)
        {
            $message = mysqli_fetch_assoc($querycheck);
            return $message;
        }
        else
        {
            die('Failed');
        }
        tinyf_db_close() ;
    }
    //".$name."

    public function Update($id,$name,$message)
    {
        global $tf_handle;

        $query = mysqli_query($tf_handle,"UPDATE `guest`.`messages` SET `name` = ".$name.", `message` = ".$message." WHERE `messages`.`id` = ".$id);
        if($query)
        {
            echo "query Works";
            return TRUE;
        }
        else
        {

            tinyf_db_close() ;
            return False;
        }
        tinyf_db_close() ;
    } 

}
?>

i think the problem in this line

$query = mysqli_query($tf_handle,"UPDATE `guest`.`messages` SET `name` = ".$name.", `message` = ".$message." WHERE `messages`.`id` = ".$id);

Upvotes: 0

Views: 49

Answers (1)

RiggsFolly
RiggsFolly

Reputation: 94672

There may well be other issues but this is the first I see.

text fields in any query need to be wrapped in quotes, single quotes is my preference, so this update wont compile.

$query = mysqli_query($tf_handle,
            "UPDATE `guest`.`messages` 
             SET `name` = ".$name.", `message` = ".$message." 
             WHERE `messages`.`id` = ".$id);

You can also simplify the building of the query if you remember that double quoted string literals will expand variables automatically

SO Change to

$query = mysqli_query($tf_handle,
            "UPDATE `guest`.`messages` 
             SET `name` = '$name', `message` = '$message' WHERE  
             `messages`.`id` = $id" );

Also after any mysql calls you should really do something with the actual error message rather than just return false.

    if($query) {
        echo "query Works";
        return true;
    } else {
        $this->LastError = mysqli_error($tf_handle);
        tinyf_db_close() ;
        return false;
    }

Then in the calling code do

if(isset($_POST['submit']))
{
    $uid   = $_POST['id'];          <-- also change this to
    $id   = $_POST['id'];           <-- this so it matches Update() params
    echo $uid;
    $name = $_POST['name'];
    echo $name;
    $msg  = $_POST['message'];
    echo $msg;
    $update = $gb->Update($id,$name,$msg);

    if($update) {
        echo('updated');
    } else {
        echo $gb->LastError;
    }

Upvotes: 1

Related Questions