2017-11-14 28 views
0

短い記事ですが、データベースからのデータに基づいてユーザーのアバターを作成する必要があるプロジェクトがあります。アバターは、imagepng()関数とimagecopy()関数を使用して生成されます。だから、GDライブラリの画像生成がmySQLクエリで機能しない

Screenshot of table in phpmyadmin

ユーザーのアバターは、男性または女性とその優先順位が「0」=女性と「1」=男性コラム「user_gender」として、SQLデータベースに保存されているのいずれかとすることができますデータベースからデータを取り出し、変数に値(0または1)を割り当て、その変数を使用してイメージを生成するという考え方です。それは、ブラウザ上で空白の黒のページにつながるようしかし、動作しない

<?php 

    //Database connection script not included, but works fine 

    $id = 1; 

     $sqlQuery = "SELECT * FROM table WHERE id = :id"; 
     $statement = $db->prepare($sqlQuery); 
     $statement->execute(array(':id' => $id)); 

     while($rs = $statement->fetch()) 
     { 
      $gender = $rs['user_gender']; 

     } 

    if($gender == "0") 
    { 
     //Allocation of images, file paths 
     $bodytype ="images/female/f_body.png"; 
    } 
    else 
    { 
     $bodytype ="images/male/f_body.png"; 
    } 

    header('Content-Type: image/png'); 

    $destination = imagecreatefrompng($bodytype); 

    imagealphablending($destination, true); 
    imagesavealpha($destination, true); 

    imagepng($destination); 
?> 

このコード:以下のコードを参照してください。

しかし、任意のデータベースから引っ張っせずにこのコードは、完全に正常に動作します:

<?php 

//taking out the sql query and just creating a $gender variable for testing 

$gender = "0"; 

if($gender === 0) 
{ 
    $bodytype ="images/female/f_body.png"; 
} 
else 
{ 
    $bodytype ="images/female/f_body.png"; 
} 

header('Content-Type: image/png'); 

$destination = imagecreatefrompng($bodytype); 

imagealphablending($destination, true); 
imagesavealpha($destination, true); 

imagepng($destination); 
?> 

これは、画像生成が実際に機能していると問題が最も可能性が高いことを示し、第二のコードで出力されPHPにSQLから渡さ:​​

Working image generation in browser

私は私が間違っているのか、変数をデータベースから引き出された場合、コードは動作を停止した理由として示唆されているかを知ることが非常に感謝されると思います。

ありがとうございました!

+0

2番目の例では、両方のケースで女性画像を使用しています。 –

+0

まだブラウザに表示されないという問題は解決していません。 – Pinkernox

+0

私はそれを理解していますが、あなたのテストケースは有効ではありません。 1と0の両方の静的な値が、期待どおりに女性と男性のアバターを生成することを確認します。どのように関連性があるか分からないため、トラブルシューティングの手順をスキップしないでください。 –

答えて

0

私はあなたのコードを試してみましたが、同じ問題が発生したので、何か掘り下げて、データベースから何も返されていないことがわかりましたので、データベース名に接頭辞とtablenameが付いていました。以下のコードを参照してください

$gender = ''; 

$sqlQuery = "SELECT * FROM register.users WHERE id = :id"; 
$statement = $db->prepare($sqlQuery); 
$statement->execute(array('id' => 1)); 

while($rs = $statement->fetch()) 
{ 
    $gender = $rs['gender']; 
} 

if($gender == 0) 
{ 
    $bodytype ="images/female/f_body.png"; 
} 
else if($gender == 1) 
{ 
    $bodytype ="images/male/m_body.png"; 
} 

$destination = imagecreatefrompng($bodytype); 

imagealphablending($destination, true); 
imagesavealpha($destination, true); 

header('Content-Type: image/png'); 
imagepng($destination); 

お試しください。

関連する問題