-3

データベース ハンドラ クラスに問題があると思います。index.php ファイルにフォーム タグがあり、これが inc/function.php の関数を呼び出し、フォーム データをデータベースのテーブルに保存します。問題は、私がうまくいかず、エラーが見つからないことです。もっと情報を提供したい場合は、そう言ってください:)

関数に $dbh->query($sql) という行を追加するたびに、フォーム全体が消えます:/

index.php:

<form id="signform" action="<?php addSignature($dbh) ?>" method="post">
                <h1>SIGN THE PROPOSED CITIZENS’ INITIATIVE</h1>
                <input type="text" name="firstname" placeholder="Full first name"><br/>
                <input type="text" name="familynames" placeholder="Family name"><br/>
                <input type="text" name="dateofbirth" placeholder="Date of birth"><br/>
                <input type="text" name="placeofbirth" placeholder="Place of birth"><br/>
                <select name="nationality">
                    <option value="" disabled selected>Nationality</option>
                    <option value="Denmark" >Denmark</option>
                </select>
                <hr>
                <textarea name="address" placeholder="Address (street, number, other)"></textarea><br/>
                <input type="text" name="postalcode" placeholder="Postal code"><br/>
                <input type="text" name="city" placeholder="City"><br/>
                <select name="country">
                    <option value="" disabled selected>Country</option>
                    <option value="Denmark" >Denmark</option>
                </select>
                <hr>
                <div id="radiobuttons">
                <input class="radiobutton" type="checkbox" name="certify"><span class="radiobuttonText">I hereby certify that the information provided in this 
 form is correct and that I have not already supported 
this proposed citizens’ initiative.</span><br/><br/>
                <input class="radiobutton" type="checkbox" name="privacy"><span class="radiobuttonText">I have read the privacy statement.</span>
                </div>
                <button type="submit" value="">SIGN UP</button>
            </form>

DbH.php:

<?php

    //DATABASE HANDLER
    class DbH{

        private $connection;
        private $host;
        private $database;
        private $user;
        private $password;
        private $result;

        public function __construct($database, $host='localhost', $user='root', $password='blabla'){
            $this->database = $database;
            $this->host = $host;
            $this->user = $user;
            $this->password = $password;
            $this->connect();
        }

        private function connect(){
            try{
                if(!$this->connection = mysql_connect($this->host, $this->user, $this->password)){
                    throw new Exception("No connection to the MySQL server.");
                }
                if(!mysql_select_db($this->database, $this->connection)){
                    throw new Exception("No connection to the MySQL database.");
                }
            }
            catch(Exception $e){
                die($e->getMessage());
            }
        }

        function query($declaration){
            try{
                if(!$this->result=mysql_query($declaration, $this->connection)){
                    throw new Exception("SELECT ERROR</ br>{$declaration}");
                }
            }
            catch(Exception $e){
                die($e->getMessage());
            }
        }

        function fetch_array(){
            return $rowArray = @mysql_fetch_array($this->result);
        }

        function getDb(){
            return $this->database;
        }

        function getConnection(){
            return $this->connection;
        }
    }
?>

functions.php:

<?php

function addSignature($dbh){

if(!isset($_POST['firstname'], $_POST['familynames'], $_POST['dateofbirth'], $_POST['placeofbirth'], $_POST['nationality'], $_POST['address'], $_POST['postalcode'], $_POST['city'], $_POST['country'])){
    $_POST['firstname'] = 'undefine';
    $_POST['familynames'] = 'undefine';
    $_POST['dateofbirth'] = 'undefine';
    $_POST['placeofbirth'] = 'undefine';
    $_POST['nationality'] = 'undefine';
    $_POST['address'] = 'undefine';
    $_POST['postalcode'] = 'undefine';
    $_POST['city'] = 'undefine';
    $_POST['country'] = 'undefine';
}

$firstname = mysql_real_escape_string($_POST['firstname']);
$familynames = mysql_real_escape_string($_POST['familynames']);
$dob = mysql_real_escape_string($_POST['dateofbirth']);
$pob = mysql_real_escape_string($_POST['placeofbirth']);
$nationality = mysql_real_escape_string($_POST['nationality']);
$address = mysql_real_escape_string($_POST['address']);
$postalcode = mysql_real_escape_string($_POST['postalcode']);
$city = mysql_real_escape_string($_POST['city']);
$country = mysql_real_escape_string($_POST['country']);

$sql = 'INSERT INTO signatures (id, firstname, familynames, dob, birthplace, nationality, address, postalcode, city, country)';
$sql .= sprintf(' VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")', $firstname, $familynames, $dob, $pob, $nationality, $address, $postalcode, $city, $country);


$dbh->query($sql);
}

?>
4

3 に答える 3

4

フォーム アクションは、PHP 関数の呼び出しではなく、ページにする必要があります。

<form id="signform" action="<?php addSignature($dbh) ?>" method="post">

その行を追加すると、ページに出力する前にすべての PHP コードが処理され、ソース コードのアクションが

action=""

フォームを同じページまたは処理ページに渡す必要があります。これにより、POST 変数が addSignature 関数に渡されます。

于 2013-05-20T14:14:04.380 に答える
0

INSERT の VALUES 部分に id パラメータが指定されていないため、ステートメント内のidフィールドINSERTは自動インクリメント フィールドのように見えると思います。または、パラメーター セクションに ID を追加する必要がある場合があります。

$sql = 'INSERT INTO signatures (firstname, familynames, dob, birthplace, nationality, address, postalcode, city, country)';
$sql .= sprintf(' VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")', $firstname, $familynames, $dob, $pob, $nationality, $address, $postalcode, $city, $country);

$dbh->query($sql);

また

$sql = 'INSERT INTO signatures (id,firstname, familynames, dob, birthplace, nationality, address, postalcode, city, country)';
$sql .= sprintf(' VALUES ("%s","%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")', $id, $firstname, $familynames, $dob, $pob, $nationality, $address, $postalcode, $city, $country);

$dbh->query($sql);

また、テーブル内のフィールドに正しい変数タイプが適用されていることも確認してください。

于 2013-05-20T14:14:37.500 に答える
-2

構文エラーがあると思います。ステートメントではコンマを使用してifいますが、&&またはを使用する必要があります||

于 2013-05-20T14:14:47.683 に答える