【问题标题】:HTML form data not being posted to use in SQL queryHTML 表单数据未发布以在 SQL 查询中使用
【发布时间】:2021-08-12 04:36:50
【问题描述】:

这应该很简单,但我迷路了 HTML 页面上的简单表格 - 选择男士、女士或初级 然后将该值发送到 php 页面以执行 SQL 查询并使用变量“$trigen”查找所有男性、女性或青少年 使用 AJAX 在 HTML 页面上显示结果

如果我手动设置 $trigen 它可以工作,但当我选择此代码中列出的表单中的选项时则不行:--

我的 HTML:-

<!DOCTYPE html>
<html>

<div class="entry-content">
        

<form action="/getcustomer.php" method="POST">
  <label for="trigen">Choose a gender:</label>
  <select id="trigen" name="trigen">
    <option value="Men">Men</option>
    <option value="Women">Women</option>
    <option value="Junior">Junior</option>
  </select>


<button class="btn btn-primary text-center btn-block btn-flat" style="h2; margin: 20px; color:black;  " name="trilookup" type="submit" onclick="showResults()"> Search</button>

 
</form>

   </div>
   
<div id="results">Results go here if it works....</div>


<script>



function showResults(str) {
  
  var xhttp;
  if (str == "") {
    document.getElementById("results").innerHTML = "";
    return;
  }
  xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("results").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "getcustomer.php?q="+str, true);
  xhttp.send();
}
</script>

然后是“getcustomer.php”中的我的php代码

<?php  


    //connect to the database
    
  $conn=mysqli_connect('localhost','wetsuder_user1','user123','wetsuder_finder');
  if($conn){
      
  }
  else{
     echo  "Sorry there is a connection error".mysqli_connect_error();
  }

                 
$trigen=$_POST['trigen'];
    
 
 //this is the search
 
$sql = "SELECT id, Gender, Wetsuit FROM wp_wetsuitdata WHERE Gender = '$trigen'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    
  echo "<table><tr><th>ID</th><th>Name</th></tr>";
  
  
  // output data of each row
  
  while($row = $result->fetch_assoc()) {
    echo "<tr><td>".$row["id"]."</td><td>".$row["Gender"]." ".$row["Wetsuit"]."</td></tr>";
  }
  echo "</table>";
} else {
  echo "0 results";
}
$conn->close();
?>

【问题讨论】:

  • 我没有看到大错误,你测试添加mysqli->error来检查是否有sql错误。尝试打印你的变量。考虑使用 is set 函数添加检查以确保变量不为空
  • 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!

标签: php html mysql ajax


【解决方案1】:

您的button 正在提交表单。只需将preventDefault() 添加为showResults 函数的第一行,它将阻止表单自然提交。您正在通过 ajax 处理表单提交。出于同样的原因,您也不需要在 &lt;form 标签上设置操作或方法。另一种阻止表单提交的方法是这样的:&lt;form onsubmit="return false"

另外,更改您的函数以找到您要发送的值,因为您实际上并没有通过函数调用 str 传递该值

function showResults() {
  preventDefault(); // prevents form submission
  // get the value
  let str = document.getElementById('trigen').value;
  // check to make sure it's there...
  if (!str) return alert("Please select an option...");
  var xhttp;
  ......

您正在通过 GET 发送数据(当您在 URL 上使用 ?q=val 时,数据正在通过 GET 发送。因此,您可以通过以下方式在 PHP 中接收它:

$trigen=$_GET['q'];

【讨论】:

  • 感谢您查看我的代码。我仍然无法让它工作。
  • 什么不完全有效?你在什么时候没有得到你想要的结果?
  • 我没有得到任何结果。甚至没有说 0 结果。我认为有一个错误,因为我没有在 showResults(str) 中定义任何 str
  • 对不起,我第一次完全错过了一些东西,请查看修改后的答案
  • @lostinspace - 这对你有什么帮助?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2018-07-28
相关资源
最近更新 更多