0

我对 PHP 比较陌生,并且一直在进行一项基本调查作为实践项目。

用户登录,回答问题并将数据发送到数据库。到目前为止,一切都很好。

但是,由于设置登录的唯一目的是进行调查,我希望他们能够随时返回并更改他们的答案。

我已经对其进行了设置,以便它检查用户是否已经填写了数据库中的信息,并编辑值而不是添加新行(如果他们之前已经填写过)。

但是,我现在希望他们能够看到他们所做的选择并对其进行编辑。

我知道如何取回数据并将其回显到页面,但我不知道如何使用用户先前选择的默认值显示表单。

对任何显示问题表示歉意,它有点不稳定!

例如:

   <?php if(!isset($_SESSION['username'])){
// are logged in
header("location:login.php");  
}  ?>


    <form name="questionnaire" action="submit_survey.php" method="post">
    <input name="Q1" type="radio" method="post" value="1">1
    <input name="Q1" type="radio" method="post" value="2">2
    <input name="Q1" type="radio" method="post" value="3">3
    <input name="Q1" type="radio" method="post" value="4">4

    <input name="Q2" type="radio" method="post" value="1">1
    <input name="Q2" type="radio" method="post" value="2">2
    <input name="Q2" type="radio" method="post" value="3">3
    <input name="Q2" type="radio" method="post" value="4">4
     </form>

PHP发送到数据库:

      include('db_login2.php');

     $con = mysqli_connect("$host", "$username", "$password", "$db_name");

     if(mysqli_connect_errno($con))  {
    echo "failed to connect" . mysql_connect_error();
    }else {
        $username = $_SESSION['username'];

   //Question 1.1
   $Q1 = $_POST['Q1'];
   $Q2 = $_POST['Q2'];

   //INJECTION PREVENTION (Not shown)

    $resulting = mysqli_query($con, "SELECT username FROM users WHERE username='$username'");
    $counting = mysqli_num_rows($resulting);

if($counting != 0){
        mysqli_query($con,"UPDATE users SET Public_Services='$Q1', Politicians='$Q2'
        WHERE username='$username'");
        $_SESSION['completed'] = true;
        header("location:login.php");
    mysqli_close($con);
    } else {

    $sql= "INSERT INTO users(username, Public_Services, Politicians)
    VALUES ('$username','$Q1', '$Q2')";
    if (!mysqli_query($con,$sql))
        {
    die('Error: ' . mysqli_error($con));
            } 

    //if it works 
    $_SESSION['completed'] = true;

    header("location:loggedin.php");
    mysqli_close($con);




       }
      }
      ?>

用于从数据库取回数据的 PHP

   include('db_login2.php');

    $con = mysqli_connect("$host", "$username", "$password", "$db_name");

    if(mysqli_connect_errno($con))  {
       echo "failed to connect" . mysql_connect_error();
}else {
     $username = $_SESSION['username'];
    $result = mysqli_query($con,"SELECT * FROM users WHERE username='$username'");

    echo $row = mysqli_fetch_array($result);
      mysqli_close($con);

   }
   ?>

我想知道是否有可能做一些事情,比如在 html 表单中使用内联 php,这取决于用户原始选择的价值。

有什么想法吗?

谢谢你的帮助!

4

3 回答 3

1

要使用用户以前的答案填充调查,您将使用$row = mysqli_fetch_array($result);

<?php

... // all your other code 

$row = mysqli_fetch_array($result);
?>
<form name="questionnaire" action="submit_survey.php" method="post">
<input name="Q1" type="radio" value="1" <?php if($row['Public_Services'] == 1) echo 'checked="checked"'?>>1
<input name="Q1" type="radio" value="2" <?php if($row['Public_Services'] == 2) echo 'checked="checked"'?>>2
<input name="Q1" type="radio" value="3" <?php if($row['Public_Services'] == 3) echo 'checked="checked"'?>>3
<input name="Q1" type="radio" value="4" <?php if($row['Public_Services'] == 4) echo 'checked="checked"'?>>4

<input name="Q2" type="radio" value="1" <?php if($row['Politicians'] == 1) echo 'checked="checked"'?>>1
<input name="Q2" type="radio" value="2" <?php if($row['Politicians'] == 2) echo 'checked="checked"'?>>2
<input name="Q2" type="radio" value="3" <?php if($row['Politicians'] == 3) echo 'checked="checked"'?>>3
<input name="Q2" type="radio" value="4" <?php if($row['Politicians'] == 4) echo 'checked="checked"'?>>4
 </form>

或使用 php for 循环

<?php

... // all your other code 

$row = mysqli_fetch_array($result);

echo '<form name="questionnaire" action="submit_survey.php" method="post">';
for($i=1;$i<=4;$i++){
    echo '<input name="Q1" type="radio" value="'.$i.'"';
    if($row['Public_Services'] == $i) echo 'checked="checked"';
    echo " />".$i."<br />\n";
}
echo "<br />\n";
for($i=1;$i<=4;$i++){
    echo '<input name="Q2" type="radio" value="'.$i.'"';
    if($row['Politicians'] == $i) echo 'checked="checked"';
    echo " />".$i."<br />\n";
}
echo "</form>";
?>
于 2013-06-04T20:44:18.663 回答
1

您可以将表单的结果作为 HTML 本身的值输出,也可以通过 PHP 创建一个小的 Javascript 片段,一旦加载表单,它将设置适当的值。第二种方法更简洁,但您的客户需要支持 Javascript 才能使其工作。这通常不是问题,除非他们明确禁用了 Javascript,在这种情况下,页面不会显示表单数据。

使用 jQuery,您可以执行以下操作:

$(function() {
  <?php
  if (isset($foo))  { // foo is a value from your database
    echo '$("#fooField").val("' . $foo . '")';
  }

  // ....more fields here
  ?>
}

因此,上述代码将在加载时输出一个 jQuery 代码,该代码将为所有表单元素设置适当的值

于 2013-06-04T20:47:38.017 回答
0

您可以在 html 中添加标签并根据值回显表单。或者你只是回显每一行。

编辑:你可以看看这个: http: //php.net/manual/en/control-structures.alternative-syntax.php

于 2013-06-04T20:28:45.217 回答