0

フォーム経由で送信された情報を MySQL DB に保存しようとしています。次のページをロードしたり、情報を保存したりしません。

私のヘッダーには、正しいデータベース接続資格情報があることを確認できる init.php が必要です。

以下は、私の HTML と「uploader」スクリプトです。何かばかげているに違いないことはわかっていますが、問題は html および/または uploader.php にあります。

誰かが私のコードを実行して、各問題 (およびおそらく私のコードの再作成) を指摘できれば、非常にありがたいです! ありがとうございました!!

HTML (生年月日オプションを減らしたので、ここのコードは少なくなりました)

        <h2>Choose Your File</h2>
                 <form id="submit-photo" action="index.php?p=uploader" enctype="multipart/form-data" method="POST">

    <input type="hidden" name="MAX_FILE_SIZE" value="5242880" />   
            <div id="FileUpload">

                <input type="file" name="photo" id="BrowserHidden" onchange="getElementById('FileField').value = getElementById('BrowserHidden').value;" />

                <div id="BrowserVisible"><input type="text" id="FileField" /></div>
            <span class="error"><?php if(isset($_SESSION['flash_message']['photo'])) echo $_SESSION['flash_message']['photo'] ?>
            </span></div>               

            <fieldset>
                <label for="name">Name</label>
                <input type="text" name="name" id="name">
            </fieldset>

            <fieldset>
            <label for="dob">DOB</label>
            <div class="dob-select">
            <select name="dob_day" id="dob_day">
            <option value="01">01</option>
            <option value="02">02</option>
            <option value="03">03</option>
            <option value="04">04</option>
            <option value="05">05</option>
            </select>
            </div>
            <div class="dob-select">
            <select name="dob_month" id="dob_month">
            <option value="01">Jan</option>
            <option value="02">Feb</option>
            <option value="03">Mar</option>
            <option value="04">Apr</option>
            </select>
            </div>
            <div class="dob-select">
            <select name="dob_year" id="dob_year">
            <option value="2012">2012</option>
            <option value="2011">2011</option>
            <option value="2010">2010</option>
            </select>
            </div>
            </fieldset>

            <fieldset>
                <label for="postcode">Postcode</label>
                <input type="text" class="short" name="postcode" id="postcode">
            </fieldset>

            <fieldset>
                <label for="email">Email</label>
                <input type="email" name="email" id="email">
            </fieldset>

            <fieldset>                
                <label for="subscribe"><input type="checkbox" class="left" id="subscribe"> <p class="left">subscribe</p></label>
                <input type="submit" name="submit">
            </fieldset>       
        </form>

DB 列

  • id (自動インクリメント)
  • 名前
  • 写真(ファイルへのパス)
  • Eメール
  • 日付(生年月日: 日、月、年を組み合わせてこれを形成)
  • 郵便番号
  • サブスクライブ(0 または 1 である必要があります)
  • 承認
  • 作成済み (タイムスタンプ)

データベース

アップローダ PHP

<?php $error = array();
require_once 'init.php';
//Is request?
if(strtolower($_SERVER['REQUEST_METHOD']) == 'post') {

    //$friend = ( $_POST['friend'] == 'true' ) ? 1 : 0;

    $required_array = array(
        'name' => 'Name',
        'dob_day' => 'Day',
        'dob_month' => 'Month',
        'dob_year' => 'Year',
        'postcode' => 'Postcode',
        'email' => 'Email Address',
        'subscribe' => 'subscribe'
    );
    $required_error = array();
    foreach( $required_array as $field_name => $field ) {
        if(!isset($_POST[$field_name]) OR empty($_POST[$field_name]) OR $_POST[$field_name] == '') {
            $required_error[$field_name] = 'Please insert your '. $field;
        }
    }

    $_POST['email'] = verify_email($_POST['email']);
    if($_POST['email'] == FALSE && !isset($error['email']))
        $error['email'] = 'Please use a valid email address';


    //Validate the form key
    if(!isset($_POST['form_key']) || !$formKey->validate()) {
        //Form key is invalid, show an error
        $error['general'] = 'Use the real form!';
    } else {
        if((!empty($_FILES["photo"])) && ($_FILES['photo']['error'] == 0)) {
            $filename = basename($_FILES['photo']['name']);
            $ext = substr($filename, strrpos($filename, '.') + 1);

            //Check if the file is JPEG image and it's size is less than 1Mb
            if ( ($ext == "jpg") && ($_FILES["photo"]["type"] == "image/jpeg") && ($_FILES["photo"]["size"] <= 5242880) ) {
                //Determine the path to which we want to save this file
                $newname = str_replace( ' ', '_', trim( strip_tags( $_POST['name'] ) ) ) . _ . $formKey->generateKey() . '_' . time() . '.jpg';

                //Check if the file with the same name is already exists on the server
                if (!file_exists($newname)) {
                    if (sizeof($required_error) == 0) {
                        //Attempt to move the uploaded file to it's new place
                        if ((move_uploaded_file($_FILES['photo']['tmp_name'], './photos/'. $newname))) {
                            $move_status = 'done';
                        } else {
                            $error['photo'] = "A problem occurred during file upload!";
                        }
                    }
                } else {
                    $error['photo'] = "File ".$_FILES["photo"]["name"]." already exists";
                }
            } else {
                $error['photo'] = "Only .jpg images under 5Mb are accepted for upload". $_FILES["photo"]["size"] . $_FILES["photo"]["type"] . '====' . $ext;
            }
        } else {
            $error['photo'] = "No photo uploaded";
        }
    }

    $error = $error + $required_error;

    if (sizeof($error) == 0 AND $move_status == 'done') {
                    $_POST['date'] = $_POST['dob_day'].'-'.$_POST['dob_month'].'-'.$_POST['dob_year'];
        $query = sprintf("INSERT INTO `$db_name`.`submissionform` (`id` , `name` , `photo` , `email` , `date` , `postcode` , `subscribe` , `approve` , `created` )
            VALUES ( NULL , '%s', '%s', '%s', '%s', '%s', '%s', '0', CURRENT_TIMESTAMP );",
            mysql_real_escape_string($_POST['name']),
            mysql_real_escape_string($newname),
            mysql_real_escape_string($_POST['email']),
            mysql_real_escape_string($_POST['date']),
            mysql_real_escape_string($_POST['postcode']),
            mysql_real_escape_string($_POST['subscribe']),
            mysql_real_escape_string($_POST['approve']),
            mysql_real_escape_string($_POST['message'])
            );
        mysql_query('SET AUTOCOMMIT=0');
        $result1 = mysql_query($query);

        $last_id = mysql_insert_id();

        if ($result1)
            $success = 'Done';
        else
            $error['general'] = 'Error when submitting your form, please try again.';

        //mysql_free_result($result);
        mysql_close();
    }

}


if ($success == 'Done') {
    $page = 'uploader';
    include 'header.php';
    echo '<img height="782" style="float:left;" src="./assets/img/success.png" />';
    include 'footer.php';
} else {
    $_SESSION['flash_message'] = $error;
    $_SESSION['recent_field'] = $_POST;
    header('Location: ./index.php');
}
?>

編集ini_set('display_errors', 'On'); error_reporting(E_ALL);: uploader.phpの先頭に配置して、デバッグを行いました

エラーは次のとおりです。

注意: 未定義の変数: 100 行目の ..../uploader.php で成功

警告: ヘッダー情報を変更できません - 110 行目の ....uploader.php の (出力開始位置 ..../uploader.php:100) によって既に送信されたヘッダー

4

1 に答える 1

1

チェックボックスにはフィールドsubscribeがありません。これらの行には、name

<fieldset>                
   <label for="subscribe"><input type="checkbox" class="left" id="subscribe"> <p class="left">subscribe</p></label>
   <input type="submit" name="submit">
</fieldset>    

なのでcheckforeachは通りません。

foreach( $required_array as $field_name => $field ) {
    if(!isset($_POST[$field_name]) OR empty($_POST[$field_name]) OR $_POST[$field_name] == '') {
        $required_error[$field_name] = 'Please insert your '. $field;
    }
}

また、$_POST['form_key']この行を通過しない設定されていない、

//and subsequently have an $error and not execute the query.
if(!isset($_POST['form_key']) || !$formKey->validate()) { 

id主キーですか?NULLクエリで値を挿入しています。idクエリで値を渡すと、自動インクリメントされません。

于 2012-10-25T13:22:42.883 に答える