2016-04-27 13 views
0

アイテムの4つのイメージのリストがあります。 その1つは、そのページからアイテムページへのリンクとして別のページに表示されるはずです。チェックボックスデータでデータベースを更新できません

ボックスをチェックすると、この写真がメインページになり、カテゴリページに表示されます。

これは、フォームのコードです:ここで

$all_pics_of_item = fetch_all_pics_of_item($item_id); 
//print_r($all_pics_of_item); 
if(is_array($all_pics_of_item)) 
{ 
    echo '<ul>'; 
    foreach($all_pics_of_item as $key=>$val) 
    { 
     if ($val['pics_main']=='yes') 
     { 
     $set_checked = "checked"; 
     $action = true; 
     } 
     else 
     { 
     $set_checked = ""; 
     $action = false; 
     } 
     echo '<li style="float: left;margin:10px;border: 1px solid #000;padding:10px;">'; 
     echo '<img style="width:120px;height:120px;" src="../../gallery_images/thumbs/'.$val['pics_source'].'">'; 
     echo '<br>'.$val['pics_name']; 
     echo '<br><a href="delete_pic.php?picsrc='.$val['pics_source'].'&picid='.$val['pics_id'].'&iid='.$item_id.'"><div class="delet"><b>x</b></div></a>'; 
     echo '<br><form method="post" action="update_main_pic.php" enctype="text/plain" > 
       Show in cat. page<input type="checkbox" class="myCheckbox" name="main" value="no"'.$set_checked.'&action='.$action.' data-picid="'.$val['pics_id'].'" data-itemid="'.$item_id.'" /> 
       </form>'; 
     echo '</li>'; 
    } 
    echo '<ul>'; 
} 

はAJAXおよびスクリプトです:ここで

$(document).ready(function(){ 

$(':checkbox').click(function() { 
    $(':checkbox').not(this).removeAttr('checked'); 

    var picid = $(this).attr('data-picid'); 
    var itemid = $(this).attr('data-itemid'); 
    var action = $(this).is(':checked'); 
    //if((this).attr('checked',true)) 
    //{ 
    // var action = true; 
    //} 
    //else 
    // { 
    //  var action = false; 
    // } 


    $.ajax({ 
     url: "ajax_update_main_pic.php", 
     type: "POST", 
     data: "itemid=" + itemid + "&picid=" + picid + "&action=" + action, 
     timeout:5000, 
     dataType: "html", 
     beforeSend:function(){ 


     }, 
     error: function(){ 
      alert('Problem !'); 
     }, 
     success: function(msg){ 
      if(msg == 'no') 
      { 

      } 
      else 
      { 

      } 

     }, 
     complete: function(){ 

     } 
    }) 

}); 

}); //END READY 

は更新関数である:

<?php 

require_once "../../db.php"; 
require_once "../../functions.php"; 

if(isset($_POST['itemid']) && isset($_POST['picid']) && isset($_POST['action'])) 
{ 
$item_id = $_POST['itemid']; 
$pic_id = $_POST['picid']; 
$action = $_POST['action']; 
} 
else 
{ 
header('location: upload_image.php'); 
    die(); 
} 


if($action == 'true') 
{ 
$pic_show = 'yes'; 
} 
else 
{ 
$pic_show = 'no'; 
} 
//print_r($pic_show); 
function update_main_pic($item_id, $pic_id, $pic_show) 

{ 
    global $db; 

    try 
    { 
     $sql = " 
       UPDATE pics SET 
       pics_main = :pic_show 
       WHERE pics_id = :pic_id AND pics_items_id = :item_id 

       ";  

     $stmt = $db->prepare($sql); 
     $stmt->bindParam(':pics_id', $pic_id, PDO::PARAM_INT); 
     $stmt->bindParam(':pics_items_id', $item_id, PDO::PARAM_INT); 
     $stmt->bindParam(':pics_main', $pic_show, PDO::PARAM_STR); 
     $stmt->execute(); 

     return true;  
    } 
    catch(Exception $e) 
    { 
     return false;   
    } 
} 



$result = update_main_pic($item_id, $pic_id, $pic_show); 

if($result == false) 
{ 
    die('Problem updating pics'); 
} 
else 
{ 
    header('location: upload_image.php?iid='.$item_id); 
    die(); 
} 

?> 

私は常に取得'写真の更新中の問題'

のみ確認チェックボックスが送信されるように私はこれが選ばれた1と「いいえ」の敵であれば、列PIC_MAINは「はい」と表示されますことを、他の全ての写真たくながら、それは問題があなたにある

+0

?内部で 'catch(Exception $ e)' – C2486

+0

あなたは:pic_show、:pic_id、:item_idをupdate_main_pic()の名前付きパラメータとして使用しましたが、このためにbindParamを使用していませんか?あなたはバインディングもしています:pics_mainしかしこれはクエリ自体にありませんか? – Matt

答えて

1

、見えます結合。

あなたのSQLには、次の名前の変数:pic_show:pic_id:item_idを持っていますが、:pics_main':pics_items_id:pics_idを結合しています。

にあなたの結合を変更し

: `は$ e-> getMessage()の`で来るどのようなエラー

$sql = " 
     UPDATE pics SET 
     pics_main = :pic_show 
     WHERE pics_id = :pic_id AND pics_items_id = :item_id 

     ";  

    $stmt = $db->prepare($sql); 
    $stmt->bindParam(':pic_id', $pic_id, PDO::PARAM_INT); 
    $stmt->bindParam(':item_id', $item_id, PDO::PARAM_INT); 
    $stmt->bindParam(':pic_show', $pic_show, PDO::PARAM_STR); 
+0

回答ありがとうございます、DBは更新されていますが、私はまだ問題があります。関数は 'pic_main'として選択されたピクチャに対して値 'yes'を設定し、他のすべての写真に値 'no'を与えます。 – Erez

+0

選択した写真の値が「はい」になり、別の写真が「pic_main」としてチェックされても値が「いいえ」に変わらないので、今度は4つの写真が「メイン」として設定されます。誰でも私に$ stmt-> bindParam( ':pic_show'、$ pic_show、PDO :: PARAM_STR)の構造を説明することはできますか?「pics_id」、「pics_id」、「pics_source」、「pics_main」、「pics_items_id」です。それは何とその機能で、私は何かが欠けているようです。ありがとう – Erez

+0

bindParamは、基本的には準備されたステートメントとパラメータが別々に実行され、executeが呼び出されたときにのみ評価されることを意味します。これはセキュリティが入る場所です。 – Matt

関連する問題