0

私はPHPにまったく慣れておらず、チェックボックス値の合計量をデータベースに保存しようとしていますが、何らかの理由で(おそらくロジックが不足しています)。それは機能しません:

<?php
        mysql_connect( 'localhost',  'root', '')or die("cannot connect");
        mysql_select_db('webgame')or die("cannot select DB");

        $perms = array(
                    'writePost' => 1,
                    'readPost' => 2,
                    'deletePost' => 4,
                    'addUser' => 8,
                    'deleteUser' => 16,
        );



        echo "<form method='post' action='v3.php'>";
        foreach($perms as $key => $value)
        {
            echo "<input type='checkbox' value='".$value."'>\n";
            echo "<label for='".$key."'>".ucfirst($key)."</label><br>\n";
        }
            echo "<input type='text' name='name'>";
            echo "<input type='submit' name='submit'>";

        if(isset($_POST['submit']))
        {
            $total = 0; 

            foreach ($_POST as $key => $value) 
            {
                if( isset($perms[ $value ]) )
                    $total += $perms[ $value ]; 
            }



            mysql_query("INSERT INTO perms (name, rights) VALUES(name, $total)") or die(mysql_error());
        }




    ?>
4

2 に答える 2

0

チェックボックスのマークアップを次のように変更してみてください。

 foreach($perms as $key => $value)
    {
       echo "<input type='checkbox' value='".$value."' name='checkbox[]'>\n";
        echo "<label for='".$key."'>".ucfirst($key)."</label><br>\n";
    }

そして、次のようにアクセスします。

  if(isset($_POST['submit']))
    {
        $total = 0; 

        foreach ($_POST['checkbox'] as $checkbox) 
        {
                $total += $checkbox; 

        }


        echo $total;
        mysql_query("INSERT INTO perms (name, rights) VALUES(name, $total)") or die(mysql_error());
    }
于 2012-12-20T01:52:16.880 に答える
0

いくつかの問題があります。他のものよりも多くの問題を引き起こすものもあります。

name(1)チェックボックスに属性がありません。</form>(2) 終了タグがありません。(3) あなたのクエリはおそらく失敗してVALUES(name, $total)いますnameVALUES('name', $total)VALUES('$name', $total)

また、最初のページの読み込み時にデータベースに接続している理由がわかりません。私はそれをあなたの中に移動しますisset($_POST['submit'])

これを試して -

<?php
    $perms = array(
                'writePost' => 1,
                'readPost' => 2,
                'deletePost' => 4,
                'addUser' => 8,
                'deleteUser' => 16,
    );

    echo "<form method='post' action='v3.php'>";
    foreach($perms as $key => $value)
    {
        echo "<input type='checkbox' name='checkboxes[]' value='".$value."'>\n";  
        echo "<label for='".$key."'>".ucfirst($key)."</label><br>\n";
    }
        echo "<input type='text' name='name'>";
        echo "<input type='submit' name='submit'>";
        echo "</form>";

    if(isset($_POST['submit']))
    {
       mysql_connect( 'localhost',  'root', '')or die("cannot connect");
       mysql_select_db('webgame')or die("cannot select DB");

        $total = 0; 
        $name  = mysql_real_escape_string($_POST['name']); 
        foreach ($_POST['checkboxes'] as $keys=>$vals)
        {
                $total += $vals;
        }

    mysql_query("INSERT INTO perms (name, rights) VALUES('$name', $total)") or die(mysql_error()); 
   }
?>

また、このmysql_*拡張機能は PHP 5.5.0 で非推奨になり、将来的に削除される予定です。代わりに、MySQLiまたはPDO_MySQL拡張機能を使用する必要があります。詳細については、MySQL: API ガイドの選択および関連する FAQも参照してください。

于 2012-12-20T02:53:02.937 に答える