проблема переменной php - PullRequest
0 голосов
/ 21 января 2009

У меня есть следующий php-код, который был сокращен для краткости. У меня возникают проблемы с кодом после объявления $ lastImg, в частности, размер, кажется, никогда не получает какого-либо значения, и, следовательно, outputwidth и outputheight остаются пустыми. Я не смог определить причину этого.

pic_url - это просто строка в базе данных, которая определенно указывает на правильное изображение. Когда я запускаю свою страницу без кода для изменения размера, изображение отображается идеально.

<?php
header("Content-Type: text/html; charset=utf-8");

if (isset($_GET["cmd"]))
    $cmd = $_GET["cmd"];
else
    die("You should have a 'cmd' parameter in your URL");

$pk = $_GET["pk"];
$con = mysql_connect("localhost", "someuser", "notreal");

if(!$con)
{
    die('Connection failed because of' . mysql_error());
}

mysql_query('SET NAMES utf8'); 
mysql_select_db("somedb",$con);

if($cmd == "GetAuctionData")
{
    $sql="SELECT * FROM AUCTIONS WHERE ARTICLE_NO ='$pk'";
    $sql2="SELECT ARTICLE_DESC FROM AUCTIONS WHERE ARTICLE_NO ='$pk'";
    $htmlset = mysql_query($sql2);
    $row2 = mysql_fetch_array($htmlset);

    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result))
    {
        $columns = array('FINISHED', 'WATCH', 'PRIVATE_AUCTION', 'REVISED', 'PAYPAL_ACCEPT', 'PRE_TERMINATED', 'PIC_XXL', 'PIC_DIASHOW');
        foreach($columns as $column)
        {
            $$column = $row[$column] ? 'YES' : 'NO';
        }

        $lastImg = $row['PIC_URL']; 
        $maxWidth  = 250;
        $maxHeight = 300;

            $size = getimagesize($_SERVER['DOCUMENT_ROOT'] . $lastImg);
var_dump($size);
echo "SIZE = ".$size."";
if ($size) {
    $imageWidth  = $size[0];
    $imageHeight = $size[1];
    $wRatio = $imageWidth / $maxWidth;
    $hRatio = $imageHeight / $maxHeight;
    $maxRatio = max($wRatio, $hRatio);
else {
die(print_r(error_get_last())); }
else if ($maxRatio > 1) {
        $outputWidth = $imageWidth / $maxRatio;
        $outputHeight = $imageHeight / $maxRatio;
    } else {
        $outputWidth = $imageWidth;
        $outputHeight = $imageHeight;
    }
}

        echo "<h1>".$row['ARTICLE_NAME']."</h1>
            <div id='rightlayer'>
            <img src='".$lastImg."' width='".$outputWidth."' height='".$outputHeight."'>
            </div>";
    }
}

mysql_free_result($result);

Ответы [ 5 ]

1 голос
/ 21 января 2009

Я бы сказал, что похоже, что $ row ['PIC_URL'] может не указывать на действительное изображение, это единственная причина, по которой getimagesize потерпит неудачу. Как выглядит ваша структура базы данных в AUCTIONS?

0 голосов
/ 21 января 2009

Во-первых, чтобы получить правильное сообщение об ошибке, измените код на:

$size = getimagesize($lastImg);
echo "SIZE = ".$size."";
if ($size) {
    $imageWidth  = $size[0];
    $imageHeight = $size[1];
    $wRatio = $imageWidth / $maxWidth;
    $hRatio = $imageHeight / $maxHeight;
    $maxRatio = max($wRatio, $hRatio);

    if ($maxRatio > 1) {
        $outputWidth = $imageWidth / $maxRatio;
        $outputHeight = $imageHeight / $maxRatio;
    } else {
        $outputWidth = $imageWidth;
        $outputHeight = $imageHeight;
    }
} else {
    die(print_r(error_get_last()));
}

После этого мы можем посмотреть на ошибку и попытаться продолжить расследование.

0 голосов
/ 21 января 2009

Попробуйте:

$lastImg = $row['PIC_URL'];
var_dump($row);
die();

чтобы узнать, есть ли у вас что-то в $ row ['PIC_URL'].

0 голосов
/ 21 января 2009

У вас есть несколько вещей, которые конфликтуют друг с другом:

$size = getimagesize($lastImg);

echo "<img src='".$lastImg."' ...>"

getimagesize ожидает имя файла, а <img> ожидает URL.

Вы можете попробовать что-то вроде этого:

$root = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']);

$size = getimagesize($root . $lastImg);

[ РЕДАКТИРОВАТЬ ] Извините. DOCUMENT_ROOT был не прав.

0 голосов
/ 21 января 2009

первый. сделать

print_r($row) 

чуть ниже вашего

while ($row = mysql_fetch_array($result))

И посмотрите, установлен ли там массив PIC_URL

2-й, вы действительно должны сделать безопасный запрос.

$sql="SELECT * FROM AUCTIONS WHERE ARTICLE_NO ='$pk'";

Должно быть

$sql = sprintf("SELECT * FROM AUCTIONS WHERE ARTICLE_NO = %d", mysql_real_escape_string($pk));

То же самое с другим запросом SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...