フォーム経由で送信された情報を 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) によって既に送信されたヘッダー