6

Trying to insert image generated from user webcam into mysql database with php, but it does not work. I am using webcam.js and everything works fine. When user takes a snapshot the image is stored on the server, however, the mysql insert does not perform the insert job. Any idea why its not working?

Both code are show below:

cam.php:

session_start();

include_once 'dbconnect.php';//connection to db
if(!isset($_SESSION['user'])){//ensures that it the true user
    header("Location: index.php");  
}

//display current time 
//$arrival_time= date('Y-m-d H-i-s');
//echo "$arrival_time";

if (isset($_POST['send'])) {
    $getname= mysql_real_escape_string($_POST['last_name']);
    $idvalue= $_SESSION['myvalue'];

    $update=mysql_query("UPDATE `employees`.`webcam_clockin` 
        SET `last_name`='$getname' WHERE image_id='$idvalue'");

    if($update)
    {
        //run a check to verify last_name
        $sql=mysql_query("SELECT users.*, employees.* FROM users 
            NATURAL JOIN employees 
            WHERE employees.last_name='$getname'");
        $result=mysql_fetch_array($sql);

        if($result){
            $_SESSION['user'] = $result['user_id'];
            header("Location: home.php");
        }
        else
        {
            ?>
                <script>
                    alert('Wrong Last Nane');
                </script>
            <?php 
        }
    }
    else
    {
        echo "Error Not done";
    }
}
    </style>

    </head>
    <body>
        <div class="container">
            <div align="center">
                <script>
                    webcam.set_api_url( 'camsave.php' );
                    webcam.set_quality( 100 ); // JPEG quality (1 - 100)
                    webcam.set_shutter_sound( true ); // play shutter click sound
                </script>

                <script>
                    document.write(webcam.get_html(640, 480));

                    webcam.set_hook('onComplete', 'my_callback');

                    function my_callback(msg) 
                    {                                               
                        document.getElementById('upload').innerHTML = msg;
                    }

                    function do_upload(){                   
                        webcam.snap();                      
                    }

                    function my_callback(msg) {                     
                        // extract URL out of PHP output
                        if (msg.match(/(https\:\/\/\S+)/)) {
                            var image_url = RegExp.$1;
                            // show JPEG image in page
                            document.getElementById('upload_results').innerHTML = 
                                '<h1>Upload Successful!</h1>' + 
                                '<h3>JPEG URL: ' + image_url + '</h3>';                         
                        }
                        else alert("PHP Error: " + msg);
                    }

                </script>
                </div>  
            <div>
        <form class="form-signin" id="myForm"><br>
        <h3 class="form-signin-heading">Enter Your Name. Take a Nice Picture and Submit</h3>            
            <input type=button class="btn btn-lg btn-primary btn-block" id="snap" 
             onclick="do_upload()" value="Snap">            
        </form> 
        <form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post" class="form-signin" ><br>
            <label for="last_name" class="sr-only">Enter Last Name</label>
            <input type="text" name="last_name" id="last_name" 
             class="form-control" placeholder="Last Name" required autofocus>
            <input type="submit" class="btn btn-lg btn-primary btn-block" name="send" id="send">        
        </form>
            </div>
            </td><td width=50>&nbsp;</td><td valign=top>
            <div id="upload"></div> 
            </td></tr></table>
        </div>  

    </body>
</html>

camsave.php:

session_start();
include_once 'dbconnect.php';

if(!isset($_SESSION['user']))
{
    header("Location: index.php");
}

//get some data about this user
$res2=mysql_query("SELECT users.*, employees.* FROM users  
    NATURAL JOIN employees WHERE user_id=".$_SESSION['user']);
$userRow=mysql_fetch_array($res2);

if ($userRow) {
    echo "correct!!";
}
//Define storage location of original images
$folder = "images/";
$filename = date('Y-m-d-H-i-s') . '.jpg';
$original = $folder.$filename;

//Get JPEG snapshot from webcam
$input = file_get_contents('php://input');

//Blank images are discarded
if(md5($input) == '7d4df9cc423720b7f1f3d672b89362be'){
    exit();
}

//Retreive the snap and save to original dest.
$file= file_put_contents($original, $input);
if(!$file){
    print "ERROR: Failed to write data to $filename, check permissions\n";
    exit();
}
else
{
    //Get the size of the image
    $info = getimagesize($original);
    list($width,$height) = $info;
    if($info['mime'] != "image/jpeg"){//ensure we get right file extension
        unlink($original);
        exit();
    }
    //Move images to the Original folder
    rename($original, "images/original/".$filename);


    $emp_no = $userRow['emp_no'];//employee number
    $user_id = $_SESSION['user_id'];//user ID
    $image_id = NULL;
    $original = "images/original/".$filename;//our image
    $last_name =$_SESSION['last_name'];
    $path = "images/thumbnail/".$filename;

    $sql=mysql_query("INSERT INTO `webcam_clockin` 
        (`image_id`, `user_id`, `images`, `emp_no`, `last_name`) 
        VALUES ('$image_id', '$user_id','$path','$emp_no', '$last_name')");
        move_uploaded_file($original, $path);

    if(move_uploaded_file($filename, $original)){

        echo "The file ". $original.$filename. " has been uploaded, and your information has been added to the directory";
        echo "Thank You "; echo $userRow['username']; echo".\n";
    }
    else{
            echo "Sorry, there was a problem uploading your file.";
            echo "Error inserting entry data: ".mysql_error();
    ?>
        <script>
            alert('Error Inserting your details. Please, see your department manager');
        </script>
        <?php   
    }
    $value=mysql_insert_id();
    $_SESSION["myvalue"]=$value;
}

$url = 'https://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . '/' . $filename;
    print "$url\n";

I finally solved the problem of saving the image to the database. The problem was wrong data type in the phpmyadmin which should be longblob.

Artjom B.
  • 61,146
  • 24
  • 125
  • 222
Mickey Ulasi
  • 93
  • 2
  • 9
  • Please, can anyone help this is the last face of my project and its urgent. Thanks – Mickey Ulasi Dec 16 '15 at 11:31
  • A first measure to debug your problem would be to catch mysql errors and print them. – Ctx Dec 16 '15 at 11:34
  • I have php debug on and no error was printed out, and the same for mysql no error printed – Mickey Ulasi Dec 16 '15 at 11:38
  • Are you sure? Try inserting deliberately an error into your INSERT query and see if an error gets printed – Ctx Dec 16 '15 at 11:39
  • Did that but still no error was printed out – Mickey Ulasi Dec 16 '15 at 11:46
  • Got this error: ERROR: Failed to write data to 2015-12-16-12-50-05.jpg, check permissions – Mickey Ulasi Dec 16 '15 at 11:51
  • Ok, then you have to fix your setup so that you actually _see_ mysql-errors, then things should become clear. – Ctx Dec 16 '15 at 12:15
  • how do i solve that? I did chown www-data buts permission denied – Mickey Ulasi Dec 16 '15 at 12:32
  • @MickeyUlasi - get someone with sufficient privileges to chmod the Dir to 777 or a level where you'll be able to write to it. – yardie Dec 16 '15 at 13:37
  • I have done that yet same problem this is what i get Warning: file_get_contents(/var/www/images/original2015-12-16:14-47-45.jpg): failed to open stream: No such file or directory in /var/www/camsave.php on line 21 ERROR: Failed to write data to /var/www/images/original2015-12-16:14-47-45.jpg, check permissions – Mickey Ulasi Dec 16 '15 at 13:48
  • and the permission is like this ls -ld /var/www/images/original drwxrwxrwx 2 edu edu 4096 Dec 16 13:40 /var/www/images/original – Mickey Ulasi Dec 16 '15 at 13:49
  • and the images are currently been stored on the directory: ls -l /var/www/images/original total 14208 -rwxrwxrwx 1 edu edu 276864 Dec 15 23:30 2015-12-15-23-30-27.jpg -rwxrwxrwx 1 edu edu 290811 Dec 15 23:44 2015-12-15-23-44-11.jpg -rwxrwxrwx 1 edu edu 290811 Dec 15 23:44 2015-12-15-23-44-17.jpg -rwxrwxrwx 1 edu edu 98304 Dec 15 23:46 2015-12-15-23-46-36.jpg -rwxrwxrwx 1 edu edu 292719 Dec 16 07:51 2015-12-16-07-51-20.jpg – Mickey Ulasi Dec 16 '15 at 13:51
  • @MickeyUlasi - Shouldnt there be a slash after the word/folder `original` ? `/var/www/images/original2015-12-16:14-47-45.jpg,` – yardie Dec 16 '15 at 13:55
  • Yes, there is and still not working – Mickey Ulasi Dec 16 '15 at 14:05
  • 1
    I advise to never store big files in MySQL. Instead use a file pointer and manage the deletion of old files yourself. It's way more robust. – twicejr Aug 15 '16 at 11:12
  • 1
    Instead of editing your question to include a solution, you need to post a proper answer to your question and revert your question to an earlier revision. – Artjom B. Apr 02 '17 at 17:24

1 Answers1

0

I am too late to answer but may be it will help others I have written a tutorial over this. You can check it here. In this tutorial i used HTML5, Jquery, PHP this tutorial will use the PHP Class and save the Image in two ways.

  1. Local storage
  2. Base64

In both the cases it will store the image to the database

Vivek
  • 1,446
  • 18
  • 27