【问题标题】:Ajax not working - posted fixed PHP anywayAjax 不工作 - 无论如何都发布了固定的 PHP
【发布时间】:2017-01-08 02:11:49
【问题描述】:

HTML:

<form action="registerusers.php" method="POST">
    <input id= "uname" name="uname" placeholder="username" required>
    <input id="upassword" name="upassword" type="password"   placeholder="password" required>
    <button id="register" type="button" class="btn btn-primary btn-lg outline" onclick="javascript: validateForm();checkNameRegister();" >Register</button>

阿贾克斯:

function checkNameRegister() {

$.ajax({
          url: "registerusers.php",
          data: { uname : "uname" , upassword : "upassword"},
          type: "POST",
          async: false,
          dataType: 'text',
          success: function(responseText) {
            alert(responseText);
          }
    });


};

php:

<?php

header('Content-Type: application/json');

error_reporting(E_ALL);
ini_set('display_errors', 1);

$alert1 = null;
$uname = filter_input(INPUT_POST, isset($_POST['uname'])); 

if ($uname === $_POST['uname'] ? $_POST['uname'] : ''){
try {
$conn = new PDO('mysql:host=127.0.0.1;dbname=users', 'root', 'redcardinal');
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = 'SELECT * FROM `usernames` WHERE `uname` = :uname';
$stmt = $conn->prepare($query);
$stmt->bindParam(":uname",$uname, PDO::PARAM_STR, strlen($uname));



$stmt->execute();
$hello = array(array());
if ($hello = $stmt->fetch(PDO::FETCH_ASSOC) ? $hello != null : ''){
    $alert1 = "This name is taken.";
echo json_encode($alert1);
$conn = null;
$query = null;
}
elseif ($hello === null) {
    $alert2 = "This name is not taken.";
 echo json_encode($alert2);
}

}
catch (PDOException $e) { echo json_encode($e);
$conn = null;
$query = null;

}

EDIT: WILL PUT ADDITIONAL elseif HERE.

}
?>

<?php 

header('Content-Type: application/json');

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
include 'check_name.php'; 

$uname = filter_input(INPUT_POST, isset($_POST['uname'])); 

if ($uname != null && $alert1 === null) { 
try {
$conn = new PDO  ('mysql:host=127.0.0.1;dbname=users', 'root', 'redcardinal'); 
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$uname = $_POST['uname']; 

$upassword = password_hash(filter_input(INPUT_POST, isset($_POST['upassword'])), PASSWORD_DEFAULT); 



$stmt = 'INSERT INTO `usernames` (`uname`, `upassword`) VALUES (:uname,:upassword)'; 
$query = $conn->prepare($stmt); 
$query->bindParam(":uname",$uname, PDO::PARAM_STR, strlen($uname)); 
$query->bindParam(":upassword",$upassword, PDO::PARAM_STR, strlen($upassword)); 



$query->execute(); 
echo json_encode("Username/Password successfully created.");
} 
catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
elseif ($alert1 != null) { 

echo json_encode("Username/Password taken."); 
}

$query = null; 
$conn =null; 

我基本上按照建议更改了 PHP,我能想到的唯一其他问题是 html 或 ajax。谢谢

【问题讨论】:

  • if ($uname = isset($_POST['uname']) ? isset($_POST['uname']) : ''){ 应该是 if ($uname = isset($_POST['uname']) ? $_POST['uname'] : ''){ 来给你 $_POST 的值,并且 $uname 中没有布尔值 true
  • 您的很多ifs 都在做分配(=)而不是比较(==)。如果这不是故意的,我预计您的一些错误是由此引起的。
  • From the PHP documentation: "赋值表达式的值就是赋值的值。即"$a = 3"的值是3。这可以让你做一些棘手的事情东西”。 (有时不小心)

标签: php ajax pdo


【解决方案1】:

你有你的if ($hello = null) {

你需要把它改成if ($hello === null) {

<?php
header('Content-Type: application/json');


error_reporting(E_ALL);
ini_set('display_errors', 1);

$alert1 = null;

if ($uname = isset($_POST['uname']) ? isset($_POST['uname']) : ''){
try {
$conn = new PDO('mysql:host=127.0.0.1;dbname=users', 'root', 'password');
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = 'SELECT * FROM `usernames` WHERE `uname` = :uname';
$stmt = $conn->prepare($query);
$stmt->bindParam(":uname",$uname, PDO::PARAM_STR, strlen($uname));



$stmt->execute();
$hello = array(array());
if ($hello = $stmt->fetch(PDO::FETCH_ASSOC) && $hello != null){
    $alert1 = "This name is taken.";
echo json_encode($alert1);
$conn = null;
$query = null;
}
if ($hello === null) {
    $alert1 = "This name is not taken.";
 echo json_encode($alert1);
}

}
catch (PDOException $e) { echo json_encode($e);
$conn = null;
$query = null;
$alert1 = null;
}



 }

关于第二个,有两件事是错误的。

  1. if ($uname != null &amp;&amp; $alert1 = null) { 更改为 if ($uname != null &amp;&amp; $alert1 === null) { 您需要将三个 === 插入 1 个 =。

  2. 再次将else ($alert1 != null) { 更改为elseif ($alert1 != null) { 你再做一个if 语句,所以你需要做esleif 而不是else。

    error_reporting(E_ALL); ini_set('display_errors', 1); 包括'check_name.php';

    $uname = filter_input(INPUT_POST, isset($_POST['uname']));

    if ($uname != null && $alert1 === null) { 尝试 { $conn = new PDO ('mysql:host=127.0.0.1;dbname=users', 'root', 'password'); $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $uname = $_POST['uname'];

    $uppassword = password_hash($_POST['uppassword'], PASSWORD_DEFAULT);

    $stmt = '插入usernames (uname, upassword) 值 (:uname,:uppassword)'; $query = $conn->prepare($stmt); $query->bindParam(":uname",$uname, PDO::PARAM_STR, strlen($uname)); $query->bindParam(":uppassword",$uppassword, PDO::PARAM_STR, strlen($uppassword));

    $query->execute(); } 捕捉(PDOException $e){ 打印“错误!:”。 $e->getMessage() 。 "
    "; 死(); } } elseif ($alert1 != null) {

    echo json_encode("此名称已被占用,请选择其他名称。"); }

    $查询=空; $conn =空;

    ?>

【讨论】:

  • 谢谢,我已按照您的建议更改了代码,但现在我相信我的 AJAX 调用有问题。也将发布。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
相关资源
最近更新 更多