0

データベース内の情報を表示し、顧客が自分の情報を編集できるようにする顧客アカウントページを作成しています。以下のコードは、関連するdb列に値が1つしかない場合に選択された関連オプションを示していますが、列に複数の値がある場合は値の事前選択を停止するため、複数選択要素では機能しませんページ上。

if($row1['notifications']=='New_Items')複数の値が選択されたときに機能するように変更するにはどうすればよいですか?角かっこを追加すると['notifications[]']=='New_Items'、エラーメッセージがスロー"Notice: Undefined index notifications[]"され、値が事前に選択されなくなります。

複数選択フォーム要素はname="element_name []"として構造化され、配列としてデータベースに挿入され、挿入されると配列implodeになります。値がフェッチされるときstr_replace、値をオプションの値と適切に比較できるように、各オプションの後にコンマを削除するために使用しています(値を展開する必要はないようです)

<?php   
try {  
$stmt = $conn->prepare("SELECT * FROM customer_info WHERE user_id = :user_id");  
$stmt->bindValue(':user_id', $user_id); 
$stmt->execute();
}catch(PDOException $e) {echo $e->getMessage();}
$row = $stmt->fetch();
$row1 = str_replace(',', '', $row);
?>
<form action="account_information-exec.php" method="post">
    <select name="notifications[]" multiple="multiple" >            
    <option value="New_Items" <?php if($row1['notifications']=='New_Items') echo "selected='selected'"; ?>>New items</option>           
    <option value="Sale_Items" <?php if($row1['notifications']=='Sale_Items') echo "selected='selected'"; ?>>Sale items</option>
    </select>  
<input type="submit" value="submit">
</form>

account_information-exec.php -DBを挿入および/または更新するファイル

<?php
require_once "config/config.php"; // Connects to db 
$user_id = $_SESSION['SESS_USER_ID'];   
try {        
$stmt = $conn->prepare('INSERT INTO customer_info (user_id, notifications) 
VALUES(:user_id, :notifications)                  
ON DUPLICATE KEY UPDATE notifications = :notifications2');    
    function bindMultiple($stmt, $params, &$variable, $type) {
    foreach ($params as $param) {
        $stmt->bindParam($param, $variable, $type);
        }
    } 
    $stmt->bindParam(':user_id', $user_id);    
    bindMultiple($stmt, array(':notifications', ':notifications2'), implode(',', $_POST['notifications']), PDO::PARAM_STR);
    $result = $stmt->execute();
} catch(PDOException $e) {echo $e->getMessage();}
4

1 に答える 1

0

$row1['notifications'] は、選択された値の連結された文字列として保存されていると思います。もしそうなら、代わりにこれを試してください:

if(strpos($row1['notifications'], 'New_Items') >= 0) 

区切り文字を考慮する必要があることに注意してください (カンマを削除する理由がわかりません。スペースが残っていますか?)。

于 2013-02-13T05:29:31.507 に答える