【问题标题】:Information not updating to database after deselecting a checkbox取消选中复选框后信息未更新到数据库
【发布时间】:2022-07-07 20:25:00
【问题描述】:

当我取消选中一个复选框并将其留空并更新我的 PHP/MySQL 表单时,我遇到了问题,数据未保存在数据库中。更新文本/日期字段工作正常。

代码

$learning_opportunities = isset($_POST['learning_opportunities']) ? $_POST['learning_opportunities'] : $contact['learning_opportunities'];

  $stmt = $pdo->prepare('UPDATE contacts SET current_living_situation=?, personal_strengths=?, skills_training=?, currently_spend_time=?,personal_goals=?,housing_situation_transport_childcare=?,
   learning_actual_end_date=?, partcipant_complete_course=?, withdrawal_reason=?,participant_intended_learning=?,pcp_education=?,
   coursestart_date=?,education_provider_name=?,course_title=?,course_level=?,planned_glh=?,in_paid_employment=?,in_paid_employment_start_date=?,
   in_paid_employer_name_address=?,in_paid_job_title=?,in_paid_contracted_hour=?,not_in_paid_employment=?,pcp_gap_year=?, 
   pcp_others=?,pcp_voluntary_work=?,destination_progression_date=?,destination_progression_collection_date=?,project_officer_name=?,
   project_officer_signature=?,project_officer_date=?,participant__name=?,participant__signature=?,participant__date=?,
   final_assessment_progress_you_made=?,final_assessment_progress_your_goal=?,final_assessment_progress_your_reach_goal=?,
   final_assessment_progress_overall=?,final_assessment_participat_name=?,final_assessment_participat_signature=?,
   final_assessment_participat_date=?,final_assessment_project_worker_name=?,final_assessment_project_worker_signature=?,
   final_assessment_project_worker_date=?,learning_opportunities=?,contact_for_other_purposes=?,empowering_communities=?,empowering_communities_name=?,empowering_communities_sign=?,empowering_communities_date=?,
   participant_enrolled_onto=?,participant_moved_another_provider=?,participant_eligible_free_school=?,british_passport=?,
   eec_passport=?,euss_via_home=?,preferred_evidence=?,provide_preferred_evidence=?,option_adoption_vertificate=?,option_driving_licence=?,
   option_non_eu_passport=?,option_biometric_immigration=?,option_current_immigration=?,option_marriage_civil_partnership=?,
   option_other_evidence=?,option_nine=?,details_evidence_provided=?,dwp_job_centre_letter=?,confirmation_relevant_organisation=?,self_certification_evidence=?,
   partcipant_told_support=?,participant_file_completed_remotly=?,declaration_name_please_print=?,declaration_job_title=?,declaration_organisation=?,
   declaration_signature_date=?,declaration_signature=? where id = ?');
  
  $result = $stmt->execute([$current_living_situation,$personal_strengths,$skills_training,$currently_spend_time,$personal_goals,
  $housing_situation_transport_childcare,$learning_actual_end_date,$partcipant_complete_course,$withdrawal_reason,$participant_intended_learning,$pcp_education,
  $coursestart_date,$education_provider_name,$course_title,$course_level,$planned_glh,$in_paid_employment,$in_paid_employment_start_date,
  $in_paid_employer_name_address,$in_paid_job_title,$in_paid_contracted_hour,$not_in_paid_employment,$pcp_gap_year,$pcp_others,
  $pcp_voluntary_work,$destination_progression_date,$destination_progression_collection_date,$project_officer_name,$project_officer_signature,
  $project_officer_date,$participant__name,$participant__signature,$participant__date,$final_assessment_progress_you_made,
  $final_assessment_progress_your_goal,$final_assessment_progress_your_reach_goal,$final_assessment_progress_overall,$final_assessment_participat_name,
  $final_assessment_participat_signature,$final_assessment_participat_date,$final_assessment_project_worker_name,$final_assessment_project_worker_signature,
  $final_assessment_project_worker_date,$learning_opportunities,$contact_for_other_purposes,$empowering_communities,$empowering_communities_name,$empowering_communities_sign,$empowering_communities_date,
  $participant_enrolled_onto,$participant_moved_another_provider,$participant_eligible_free_school,$british_passport,
  $eec_passport,$euss_via_home,$preferred_evidence,$provide_preferred_evidence,$option_adoption_vertificate,$option_driving_licence,
  $option_non_eu_passport,$option_biometric_immigration,$option_current_immigration,$option_marriage_civil_partnership,$option_other_evidence,$option_nine,
  $details_evidence_provided,$dwp_job_centre_letter,$confirmation_relevant_organisation,$self_certification_evidence,$partcipant_told_support,
  $participant_file_completed_remotly,$declaration_name_please_print,$declaration_job_title,$declaration_organisation,$declaration_signature_date,
  $declaration_signature, $_POST['id']]);
  
  if($result == true){
      $details = "<b>All Data Updated</b>";
      // Insert new record into the contacts table
          $stmt = $pdo->prepare('INSERT IGNORE INTO client_activity (id,client_id,date,time,details,username) VALUES (?,?,?,?,?,?)');
        $client_activity = $stmt->execute([ null,$_POST['id'],date("Y/m/d"),date("H:i:s"),$details,$_SESSION['name'] ]);
        if($client_activity == true){
          $msg = 'Updated Successfully!';

表格代码

<input type="checkbox" name="learning_opportunities" value="learning_opportunities" <?php if($contact['learning_opportunities']=="Yes"){ echo 'checked'; } ?>> About courses or learning opportunities.<br>

我已经阅读了无数的文章和教程,无法让它更新数据。

【问题讨论】:

  • 类似:$learning_opportunities = isset($_POST['learning_opportunities']) ? "yes" : "no";
  • 下次您真的应该将该查询缩短到最低限度。目前,它使问题比实际更难阅读

标签: php


【解决方案1】:

变量$learning_opportunities 的赋值根本没有任何意义。 只有选中的复选框才会发送到服务器。

如果旧值 $contact['learning_opportunities'] 已经是 true,则以下 sn-p 将强制将复选框设置回 true,从而无法取消选中该复选框

$learning_opportunities = isset($_POST['learning_opportunities']) ? $_POST['learning_opportunities'] : $contact['learning_opportunities'];

如果您希望能够更新该字段,您只需要此分配:

$learning_opportunities = isset($_POST['learning_opportunities']) ? 1 : 0;

【讨论】:

  • 谢谢,这有助于取消选中复选框,但不允许我重新选中复选框?
  • 对应字段的数据类型是什么?
  • 数据库数据类型为varchar(225)
  • 您可能希望将其更改为 tinyint(1) 以获得布尔值。如果您真的想使用 varchar,请查看我的编辑
【解决方案2】:

在发送带有复选框的表单后,请记住,有两种可能的情况:

  1. 如果您选中了复选框,您将在$_POST['learning_opportunities'] 中获得"on"

  2. 如果您的复选框未被选中,您将不会在 $_POST 数组中获得 'learning_opportunities' 索引

查看此演示:

index.php

<?php

$contact['learning_opportunities'] = isset($_POST['learning_opportunities']) ? "yes" : "no";

?>

<form action="index.php" method="POST">
    <input type="checkbox" name="learning_opportunities" <?= $contact['learning_opportunities'] === "yes" ? 'checked' : "" ?>>
    About courses or learning opportunities.
    <br>
    <input type="submit" value="Submit">
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2018-01-29
    • 2020-08-12
    • 2011-08-14
    • 1970-01-01
    • 2016-11-10
    相关资源
    最近更新 更多