我是相當新的程式員。或者以前我開始使用 mysqli 和 php。但現在我又開始了整個編程。
還有一個全新的領域。我使用 ajax 來處理表單資料。我正在更新用戶資訊。一切都很順利,直到訪問電子郵件驗證。注冊或添加用戶沒有問題。因為舊資料不是從資料庫中獲取的電子郵件。
現在資料正在從資料庫中獲取表單,當我嘗試編輯它并檢查電子郵件是否已經存在時,這也會檢查該表單上已經存在的資訊。也就是說,當我檢查電子郵件是否已經存在時,它還會檢查表單中的電子郵件。我可以使用 ajax 以某種方式檢查輸入欄位是否已更改,或者我應該做什么?是的,我知道我應該使用 pdo,但首先我想了解全部內容(ajax、javascript 等)。我的英語不是很好,但我希望你能弄清楚。
抱歉,如果代碼中的不同語言會帶來混亂。資料庫連接功能不是必需的。沒有錯誤。所以我現在不把它放在這里。
這是我在這個論壇提出的第一個問題。所以要有耐心。
這是html表單
<div class="modal-body">
<div id="loytyyko-email-edit"></div>
<form method="post" id="muokkaa_kayttaja">
<div class="row">
<div class="col-md-6 mb-3 mb-md-0">
<label>Etunimi <!--Firstname--></label><span class="error"> *</span><span class="error" id="add-virhe-etunimi"></span>
<input type="text" name="edit_etunimi" class="form-control etunimi" value='<?php echo htmlspecialchars($row1['etunimi']);?>' />
</div>
<div class="col-md-6 mb-3 mb-md-0">
<label>Sukunimi <!--Lastname--></label><span class="error"> *</span><span class="error" id="add-virhe-sukunimi"></span>
<input type="text" name="edit_sukunimi" class="form-control sukunimi" value='<?php echo htmlspecialchars($row1['sukunimi']);?>' />
</div>
<div class="col-md-6 mb-3 mb-md-0">
<label>S?hk?posti <!--email--></label><span class="error"> *</span></span><span class="error" id="add-virhe-email"></span>
<input type="text" name="edit_email" id="edit_email" class="form-control email" value='<?php echo htmlspecialchars($row1['email']); ?>' />
</div>
<div class="col-md-6 mb-3 mb-md-0">
<label>Yritys <!--company--><small>(valinnainen)</small></label>
<input type="text" name="edit_yritys" class="form-control yritys" value='<?php echo htmlspecialchars($row1['yritys']);?>' />
</br>
</div>
<div class="col-sm-12">
<label>Haluatko muuttaa k?ytt?j?n yll?pit?j?ksi? <!--make admin?--><small>(valinnainen)</small> </label></br>
<p></p><input type="checkbox" class="valittu" name="yllapito" value="1"> Kyll?, muuta yll?pit?j?ksi</p>
</br>
</div>
<input type="hidden" name="kayttaja_id" value='<?php echo $row1['kayttaja_id'];?>' /> <!--user_id-->
<div class="col-md-6 mb-3 mb-md-0">
<input type="submit" name='tallentaa' class="btn btn-success" value='Tallenna' /><!--save button-->
<button type="button" class="btn btn-danger" data-dismiss="modal">Peruuta <!--Cancel button--></button>
</div>
</form>
</div>
</div>
</div>
</div>
阿賈克斯
$(document).ready(function(){
$('#muokkaa_kayttaja').on("submit", function(event){
event.preventDefault();
var kayttaja_id = $("#kayttaja_id").val();
var etunimi = $("#etunimi").val();
var sukunimi = $("#sukunimi").val();
var yritys = $("#yritys").val();
var email = $("#email").val();
var yllapito = $("#yllapito").val();
//is admin checked
$('.valittu').each(function () {
var id = $(this).attr('id');
if ($('#' id).prop('checked')) {
var yllapito = $("#yllapito").val('1');
}
});
//a variable is defined as true (if there are no errors)
var isValid = true;
//firstname cannot be empty
if(etunimi === ''){
isValid = false;
$("#add-virhe-etunimi").html(' pakollinen');
}else{
$("#add-virhe-etunimi").html("");
}
//email cannot be empty
if(email === ''){
isValid = false;
$("#add-virhe-email").html(' pakollinen');
}else{
$("#add-virhe-email").html("");
}
//surname cannot be empty
if(sukunimi === ''){
isValid = false;
$("#add-virhe-sukunimi").html(' pakollinen');
}else{
$("#add-virhe-sukunimi").html("");
}
//if not mistakes, isValid is true
if(isValid === true){
$.ajax({
url:"muokkaakayttaja.php", //edit user php-file
method:"POST",
data:$('#muokkaa_kayttaja').serialize(),
success:function(data){
if (data == 'taken' ) {
$("#loytyyko-email-edit").html('<div >S?hk?posti on jo k?yt?ss? toisella k?ytt?j?ll?!</div>');
return false;
}else{
$('#loytyyko-email-edit').html('');
window.location = window.location.href;
}
}
});
}
});
});
和 php
//variables
$email = mysqli_real_escape_string($con, $_POST['email']);
$etunimi = mysqli_real_escape_string($con, $_POST['etunimi']);
$sukunimi = mysqli_real_escape_string($con, $_POST['sukunimi']);
$yritys = mysqli_real_escape_string($con, $_POST['yritys']);
$sukunimi = ucfirst($sukunimi);
$etunimi = ucfirst($etunimi);
$yllapitoyp = mysqli_real_escape_string($con, $_POST['yllapito']);
$kayttaja_id= mysqli_real_escape_string($con, $_POST['kayttaja_id']);
//if admin is selected then 1
if($yllapitoyp == '1')
{
$yllapito = '1';
}
//if admin is not slected then 0
else
{
$yllapito = '0';
}
//get db email
$user_check_query = "SELECT * FROM kayttaja WHERE email= '".$email."'";
$result = mysqli_query($con, $user_check_query);
$user = mysqli_fetch_assoc($result);
if ($user->error)
{
echo 'taken';
return false;
}
else
{
//Update user
$tulos = mysqli_query($con,"UPDATE kayttaja SET etunimi = '".$etunimi."', sukunimi='".$sukunimi."', email = '".$email."', yritys = '".$yritys."', yllapito = '".$yllapito."' WHERE kayttaja_id = '".$kayttaja_id."'") or dIE();
if($tulos)
{
//set in session notification (Update successful)
echo $_SESSION['success'] = "<script type='text/javascript'>toastr.success('Tiedot tallennettu')</script>";
}
else
{
//set in session notification (sometihing gone wrong)
$_SESSION['error'] = "<script type='text/javascript'>toastr.error('Jotain meni vikaan, yrit? uudelleen')</script>";
return false;
}
}
}
uj5u.com熱心網友回復:
不是$user->error,錯誤檢查已開啟mysqli_error
$user_check_query = "SELECT * FROM kayttaja WHERE email= '".$email."'";
$result = mysqli_query($con, $user_check_query);
if (!$result) {
echo "There was an error" . mysqli_error($con);
return false;
}
// this the result, when it was not empty that was indicate the query exists
$user = mysqli_fetch_assoc($result);
if (!empty($user)) {
echo "Taken";
return false;
}
uj5u.com熱心網友回復:
您需要做的第一件事是在資料庫欄位中添加唯一屬性。檢查此以獲取更多資訊 https://www.mysqltutorial.org/mysql-unique-constraint/ 假設您將表單資料提交到服務器,為了檢查表單值是否在資料庫中是重復值,您可以這樣做。
$result = mysql_query("SELECT * FROM xxxx WHERE email = '[email protected]'", $conn);
$check_duplicate= mysql_num_rows($result);
if ($check_duplicate > 0)
{
die('This email already exists in the database');
}
我不明白您在表單上檢查電子郵件是什么意思,它正在檢查輸入的值是有效的電子郵件還是其他什么?
最后一個問題是關于檢查 for 是否已更改,因為您使用 jquery 您可以使用 .change 事件處理程式。例如
$( ".target" ).change(function() {
alert( "Handler for .change() called." );
});
這被稱為事件處理在發生某些事情時觸發某些事情,例如:按下鍵時、按下鍵時、單擊時等。
有關更多資訊,請查看此鏈接: https ://api.jquery.com/change/
并且您應該了解表單驗證以檢查表單的值是否正確。
如果您想在學習了基本的 php 和 javascsript 之后更深入地了解 Web 開發,這只是一個建議,我建議您盡可能快地學習 php 是 laravel。但在此之前,您必須學習和了解 mvc 架構。如果您不了解 mvc 架構,那會令人困惑。對于前端 react.js 是推薦的。
uj5u.com熱心網友回復:
因為您的問題是電子郵件重復驗證仍在運行,即使您在更新資料時沒有編輯電子郵件,所以解決方案是在資料重復時不更新電子郵件欄位。所以邏輯是檢查電子郵件輸入資料和資料庫中的電子郵件資料是否重復,如果重復,只需更新除電子郵件之外的所有資料。
public function checkDuplicateEmail(){
$result = mysqli_query("SELECT * FROM xxxx WHERE email =
'[email protected]'", $conn);
$result= mysql_num_rows($result);
//return 0 if not duplicated ,retun 1 if duplicated
return $result;
}
//check if diplicated or not
if(checkDuplicateEmail()>0){
//if duplicated update data without email
mysqli_query($con,"UPDATE kayttaja SET etunimi = '".$etunimi."',
sukunimi='".$sukunimi."', yritys = '".$yritys."', yllapito =
'".$yllapito."' WHERE kayttaja_id = '".$kayttaja_id."'") or dIE();
}
else{
//if not duplicated update all data
mysqli_query($con,"UPDATE kayttaja SET etunimi = '".$etunimi."',
sukunimi='".$sukunimi."', email = '".$email."', yritys =
'".$yritys."', yllapito = '".$yllapito."' WHERE kayttaja_id =
'".$kayttaja_id."'") or dIE();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/424067.html
標籤:javascript php 阿贾克斯 mysqli
