[英]PHP/Javascript + MySQL data is not being retrieved when query has variables
所以我试图用PHP进行简单的登录。 我可以很好地检索行,但是在这种特定情况下,获取所需数据似乎存在问题:
当我通过变量使用WHERE子句中的条件执行查询时,我永远不会从列中获取数据。 我也没有空集。
我测试了连接是否正常,因为当我在方法中覆盖变量时,结果将返回正常。
例如,当我这样做时:
$sql = "SELECT name FROM customers WHERE email='" . $email . "'";
$result = $mysql->executeSql($conn, $sql);
if(!empty($result)){
while($row = mysqli_fetch_array($result)){
echo $row['name'];
}
}else{
echo "EMPTY SET";
}
它根本不返回任何东西。
但是,如果我这样做:
$email = 'richardgwapo@gmail.com';
$sql = "SELECT name FROM customers WHERE email='" . $email . "'";
$result = $mysql->executeSql($conn, $sql);
if(!empty($result)){
while($row = mysqli_fetch_array($result)){
echo $row['name'];
}
}else{
echo "EMPTY SET";
}
它可以很好地获取数据。 我想知道是什么原因造成的。 我已经尝试通过gettype()方法检查$ email数据类型,它说这是一个字符串。 在将其传递给查询之前,我也尝试过修剪它,但是也无济于事。
这可能是什么原因? 这是我用于测试登录的整个示例代码:
<HTML>
<HEAD>
<?php
function verifyLogin($email, $passwd){
require('MySQL.php');
$mysql = new MySQL;
$conn = $mysql->connectToMysql("127.0.0.1", "root", "", "fivestarhotel");
$sql = "SELECT name FROM customers WHERE email='" . $email . "'";
$result = $mysql->executeSql($conn, $sql);
if(!empty($result)){
while($row = mysqli_fetch_array($result)){
echo $row['name'];
}
}else{
echo "EMPTY SET";
}
}
?>
<SCRIPT>
var email = "";
var passwd = "";
function buttonPressed(){
email = document.getElementById("tEmail").value;
passwd = document.getElementById("tPasswd").value;
document.write("<?php verifyLogin('" + email + "','" + passwd + "');?>");
}
</SCRIPT>
</HEAD>
<BODY>
<INPUT type="text" id="tEmail" /> <BR/>
<INPUT type="password" id="tPasswd" /> <BR/>
<INPUT type="button" value="Go" onclick="buttonPressed()"/>
</BODY>
</HTML>
这是用于连接和查询执行抽象的MySQL.php:
<?php
class MySQL{
var $conn;
function connectToMySql($servername, $username, $password, $dbName){
// Create connection
$conn = new mysqli($servername, $username, $password, $dbName);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
return $conn;
}
function executeSql($conn, $sql){
$result = mysqli_query($conn,$sql);
return $result;
}
}
?>
示例数据库(请不要介意空密码):
mysql> select * from customers;
+----+------------------------+-------------+---------------------------+---------+
| id | name | contact | email | password |
+----+------------------------+-------------+---------------------------+----------+
| 2 | Percival M. Micael Jr. | 09000000000 | percival.micael@yahoo.com | |
| 3 | Richard Traballo | 09000000000 | richardgwapo@yahoo.com | |
| 4 | Richard Gwapo | 09000000000 | richardgwapo@gmail.com | |
| 5 | Darrel Ayien | 09000000000 | darrelayien@yahoo.com | |
| 6 | Dummy | 09000000000 | dummy@dummy.com | |
| 7 | Dummy2 | 09000000000 | dummy2@dummy2.com | |
| 8 | Dummy3 | 09000000000 | dummy3@dummy3.com | |
| 9 | Dummy4 | 09000000000 | dummy4@dummy4.com | |
+----+------------------------+-------------+---------------------------+----------+
8 rows in set (0.00 sec)
你不能做这样的事情。
<SCRIPT>
var email = "";
var passwd = "";
function buttonPressed(){
email = document.getElementById("tEmail").value;
passwd = document.getElementById("tPasswd").value;
document.write("<?php verifyLogin('" + email + "','" + passwd + "');?>");
}
</SCRIPT>
Javascript是客户端,PHP是服务器端。 您的javascript代码仅在HTML页面中写以下行<?php verifyLogin('" + email + "','" + passwd + "');?>
。
您至少需要使用Ajax。 检查一下:
在这种情况下,您必须使用AJAX。 根据要求通过ajax将变量名emailid值从html发送到另一个php。 在php中,获取emailid变量值,然后在其中运行sql查询以获取其他必需的详细信息。 将结果存储在php变量中,从php中回显它,并使用ajax响应在javascript中接收它。 有关ajax的更多信息,请访问此http://www.w3schools.com/ajax/ajax_xmlhttprequest_response.asp
这是我过去使用的代码...
<div id="form-login">
<form action="reload()" method="post">
<fieldset>
<legend>Please Log In</legend>
<div id="form-error"></div>
<div class="form-row1">
<label for="user" class="required">User:</label>
<input name="user" type="text" id="user" maxlength="50" />
</div>
<div class="form-row2">
<label for="password" class="required">Password:</label>
<input type="password" name="password" id="password" maxlength="50">
</div>
<div class="form-row2 text-right" style="margin-right: 3px;">
<input id="submit" class="submit-button" type="submit" name="Submit" value="Submit" >
<input id="cancel" class="submit-button" type="button" value="Cancel" >
</div>
</fieldset>
</form>
</div>
以及JavaScript中的其他地方:
// process the login via ajax
$('#submit_login').click(function () {
$('#form-error').hide();
$('#submit').hide();
$.ajax({
type: 'POST',
url: './php/login.php',
data: 'email_address=' + $('#email').val() + '&password=' + $('#password').val(),
dataType: 'json',
success: function (data) {
if (data.status == -1) {
$('#form-error').html(data.msg).slideDown('slow');
} else if (data.status == 0) {
window.location.replace(data.url);
}
$('#submit').show();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$('#form-error').html('Oops, Functional Error').slideDown('slow');
$('#submit').show();
}
});
return false;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.