PHP image verification code is not displayed - php

Here is checks.php given by my teacher:
<?php
session_start();
header("content-type:image/png");
$image_width=70;
$image_height=18;
srand(microtime()*100000);
for($i=0;$i<4;$i++){
$new_number.=dechex(rand(0,15));
}
$_SESSION[check_checks]=$new_number;
$num_image=imagecreate($image_width,$image_height);
imagecolorallocate($num_image,255,255,255);
for($i=0;$i<strlen($_SESSION[check_checks]);$i++){
$font=mt_rand(3,5);
$x=mt_rand(1,8)+$image_width*$i/4;
$y=mt_rand(1,$image_height/4);
$color=imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
imagestring($num_image,$font,$x,$y,$_SESSION[check_checks][$i],$color);
}
imagepng($num_image);
imagedestroy($num_image);
?>
And I use it by a img tag <img src="checks.php">, but the image doesn't display and no errors show. I remember I have tested it successfully on my experimental class. So I guess if I ignored something. Thanks for helping!

Related

PHP check if file_exists without extension then Ajax a div with appropriate media tag (img or video) based on filepath

First posting here. I know inline php is not preferred but I haven't converted all my scripts to echo json_encoded arrays to work in javascript on the client side...so for now, I have inline php.
I do not know the extension of the user uploaded media because it could be a jpg,mp4,etc and upon upload it goes into a media folder with the user id as an identifier.
When my user first loads the div (and html page), the php script cycles through an array and does a fetch_assoc from sql query to the database each time; It returns the (media_id #) and prints out an li with the respective media displayed next to some other values from the query.
I only know the (media_id) and the file path name without the extension. When the page first loads, everything works great and the file_exists function returns correctly.
THE PROBLEM
When I AJAX the div and do the query again, because the user added a row to the database, the new list prints out with all info, BUT the file_exists function doesn't recognize the exact same paths as before and I don't have an img or video on the page.
I copy/pasted the exact same code from the original div and put it in a file for ajax to re-query and print the new li's.
All variables are the same and when I hard code a test filepath, it prints fine. Maybe there's a caching issue?
THE CODE
<?php
$result=$conn->query($select);
$row=$result->fetch_assoc();
?>
<li>
<?php
if ($row['count']>0) {
echo "<div class='media-container'>";
$pathname = "uploads/".$row["id"]."media1";
$testjpg=$pathname.".jpg";
$testjpeg=$pathname.".jpeg";
$testpng=$pathname.".png";
$testmp4=$pathname.".mp4";
if (file_exists($testjpg)==TRUE || file_exists($testpng)==TRUE || file_exists($testjpeg)==TRUE) {
echo '<img src="'.$pathname.'">';
}if(file_exists($testmp4)==TRUE) {
echo "<video></video>";
}
echo "</div>";
}?>
</li>
I could use some advice on how to fix this and how to print appropriate media tags on unknown media types.
THE OUTPUT
<div class='media-container'>
</div>
DEBUGGING ATTEMPTS
echoing the exact file path of a known image in an <img> tag works fine. putting echo'test'; inside the file_exists case does nothing.
--
Solution (Kind of)
So I've used html's onerror before and I found a workaround, though I'd still like to know why I was getting an error. PSA this uses JQuery but javascript works too:
My Solution
<script>
function img2video(el, src) {
$( el ).replaceWith( '<video class="videoClass"><source src="'+src+'" type="video/mp4"></video>' );
}
</script>
<body>
<img style="width:100%" onerror="img2video(this,'<?php echo$pathname;?>')" src="<?php echo$pathname;?>">
</body>
Alright, so here's the final answer I made to best fit the problem using glob:
Javascript:
function img2video(el,src,place) {
if (place=='type') {
$( el ).replaceWith( '<video controls controlsList="nodownload" disablePictureInPicture style="width:100%;object-fit:contain;" preload="auto"><source src="'+src+'" type="video/mp4"></video>');
}
}
PHP:
<?php for ( $i=1; $i <= $limit; $i++) {
$path ="[DIRECTORY]/".$row["id"]."media".$i;
$path = (!empty(glob($path . '*.{jpg,png,jpeg,avi,mp4}', GLOB_BRACE)[0])) ? glob($path . '*.{jpg,png,jpeg,avi,mp4}', GLOB_BRACE)[0] : false;?>
<div>
<img onerror="img2video(this,'<?php echo$path;?>','type',<?php echo$row["id"];?>,<?php echo$i;?>)" src="<?php echo$path;?>">
</div>
<?php } ?>
I don't know how to mark as duplicate, if someone could help with that. My answer uses Glob_Brace from #Akif Hussain 's response on This Question.

Wrapping a link tag around PHP

I have the following PHP and need to make what's outputted (subheader, not thumbnail) hyperlinked to the parent directory
<?php
//$featured_img=get_template_directory_uri().'/img/default.png';
$featured_img='';
if(get_the_post_thumbnail_url()) {
$featured_img=' style="background-image:url('.get_the_post_thumbnail_url().')"';
}
$subheader= '<p class="entry-subheader"> </p>';
if(get_field('subheader') ) {
$subheader= '<p class="entry-subheader">'.get_field('subheader').'</p>';
}
?>
I have no experience in PHP - only self taught in HTML and CSS so struggling as to where to put in the link.
$subheader= '<p class="entry-subheader">'.get_field('subheader').'</p>';
Cd001's answer worked for me

PHP mouse over not working?

I have tried the following script in my joomla site to check if a file exists and if it does show a mouseover image.. if not show a different mouse over image. The initial image shows but the image fails to load on mouse over or mouse off. I have used the same image for this example..
<?php
$image_on = 'sr_act_i_2.png';
$image_off = 'sr_act_i_1.png';
$actionsloaded = 'location of file I will be checking';
if(file_exists($actionsloaded))
echo '<img src="/administrator/components/com_srshare/images2/'.$image_on.'" onmouseover="this.src=\''.$image_off.'\';" onmouseout="this.src=\''.$image_on.'\';"/>';
else
echo '<img src="/administrator/components/com_srshare/images2/'.$image_on.'" onmouseover="this.src=\''.$image_off.'\';" onmouseout="this.src=\''.$image_on.'\';"/>';
?>
Any ideas what is wrong with my mouse over code?
I forgot to add the path through the whole code:
echo '<img src="/administrator/components/com_srshare/images2/'.$image_on.'" onmouseover="this.src=\''.$image_off.'\';" onmouseout="this.src=\''.$image_on.'\';"/>';
should have been:
echo '<img src="/administrator/components/com_srshare/images2/'.$image_on.'" onmouseover="this.src=\'/administrator/components/com_srshare/images2/'.$image_off.'\';" onmouseout="this.src=\'/administrator/components/com_srshare/images2/'.$image_on.'\';"/>';
Sometimes the obvious just can't be seen.

display a <img> from php( problem)

I wanna return a link inside to <img>. I dont know what is the problem.
categoria.php
<HTML>....
<img src="categoriaMAIN.php?type=celular">
</HTML>
categoriaMAIN.php
<?php
$varcate= $_GET['type'];
if ($varcate == "celular")
echo "http://ecx.images-amazon.com/images/I/41l1yyZuyXL._AA160_.jpg";
?>
categoriaMAIN.php
<?php
switch ($_GET['type'])
{
case 'celular':
header('Location: http://ecx.images-amazon.com/images/I/41l1yyZuyXL._AA160_.jpg');
break;
case '...':
header('Location: http://somesite.com/some/img/path/image.jpg');
break;
//...
}
Everyone else seemed to offer the readfile/grab and forward the content method. I thought I'd let the HTTP protocol do the work for us.
Well, the img tag is pointing to text, not an image.
Try:
header("Content-Type: image/jpg"); //tell the browser that this is an image.
$varcate= $_GET['type']; // you know this part
if ($varcate == "celular")
{
// readfile will grab the file and then output its contents without
// procressing it.
readfile("http://ecx.images-amazon.com/images/I/41l1yyZuyXL._AA160_.jpg");
}
Bit of a warning: if you don't output an image here, then the browser will probably complain about the image it is trying to load. You should add a default.
EDIT
Kristian made the point that this is a lot of work for the server and he is right. It would be much better if you could manage to make it so that the src of the img tag changed directly. The above, however, will get you where you are asking to go, though it may not be the best option.
The img tag has to point at the actual image - not a webpage containing the URL.
<img src="categoriaMAIN.php?type=celular">
has to get evalulated to
<img src="http://ecx.images-amazon.com/images/I/41l1yyZuyXL._AA160_.jpg">
It isn't being right now. How to accomplish this, greatly depends on the rest of your source code and what you actually are trying to accomplish.
This won't work! <img src="" searches for the image file, not its location! Try this:
categoria.php
<?php $varcate='celular'; ?>
<html>....
<img src="<?php include('categoriaMAIN.php'); ?>">
</html>
categoriaMAIN.php
<?php
if ($varcate == "celular")
echo "http://ecx.images-amazon.com/images/I/41l1yyZuyXL._AA160_.jpg";
?>
You give the img a PHP page as its src. So the browser is expecting that PHP page to return an image. Instead, you're having that page simply return a URL to the image. You'll have to change that so that you're actually echo ing the image data. I'm a little rusty will all this, but I think you'd do something like the following:
<?php
$varcate = $_GET['type'];
if ($varcate == 'celular') {
header('Content-type: image/jpg');
echo file_get_contents('http://ecx.images-amazon.com/images/I/41l1yyZuyXL._AA160_.jpg');
}
?>
If you really want to do it this way, your categoriaMAIN.php would need to look more like:
<?php
$varcate = $_GET['type'];
if ($varcate == "celular") {
header("Content-Type: image/jpeg");
echo file_get_contents("http://ecx.images-amazon.com/images/I/41l1yyZuyXL._AA160_.jpg");
}
?>
This will get the actual image data and return it to the browser as an image, which is what the browser needs.

Change background color of a page using php

I have a standard html page so:
<html>
<head>..
.
..
and so on
and i have a php script linked to that html page with:
if blablabla {
change background color;
}
does anyone know how to change the background color of my page if the conditions in the if statement are met?
I hope i made this clear, if not, please say which bit is unclear.
Thanks for any help in advance
put your <body> tag inside the if else
if blablabla {
echo '<body style="background-color:white">';
}
else {
echo '<body style="background-color:orange">';
}
It's not necessarily great practice, but it should get the job done:
if ( your_conditional ) {
$styleBlock = sprintf('
<style type="text/css">
body {
background-color:%s
}
</style>
', $yourColor);
echo $styleBlock;
}
One good (?) thing about this is that with this technique, you can put your if statement anywhere - it'll act on the body tag regardless of where you put it.
One caution: if you have additional style rules for the body tag's background color farther down your page, those will take precedence over the one from your if statement.
here is code that i whant to change background of body
<body bgcolor="<?php echo $name2; ?>">

Categories