- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Wordpress 在自定义页面模板中进行 Ajax 调用的方式非常复杂。我根本无法让它运行而不使我的整个网站崩溃。为什么我需要这样做?我的其他 Ajax 调用也不需要这种复杂的方式。
所以我正在尝试做的事情:
我想向商店添加一项功能,经销商可以输入 ID 并为商店重新订购新包。这么久了,太好了。
我得到了我的目标网页:
<?php
/*
Template Name:
*/
?>
<?php
get_header();
?>
<section id="main" class="reseller-page">
<form action="<?php echo get_stylesheet_directory_uri(); ?>/reseller.php" method="GET" id="resellerform">
Reseller ID: <br><input type="text" name="rid" id="rid">
<button id="resellercheck">SUCHEN</button>
</form>
<div id="resellerwrapper" style="display: none;">
<div id="resellerinfo"></div>
<div id="resellerorder" style="display: none;">
<h2>Bestellformular:</h2>
<?php
$args = array('post_type' => 'product', 'posts_per_page' => -1, 'product_cat' => 'tabak-taschen');
query_posts($args);
if (have_posts()):
echo '<div id="reseller-select-wrapper"><select id="artikelselector">';
while (have_posts()) : the_post();
echo '<option value="' . $product->get_sku() . ': ' . $product->get_title() . '" data-type-href="' . get_permalink() . '">' . $product->get_sku() . ': ' . $product->get_title() . '</option>';
endwhile;
echo '</select>Menge: <input id="reseller-menge" type="text" class="input-text"><button value="hinzufügen" id="reseller-add-to-form">+</button></div>';
endif;
?>
<form action="" method="POST" id="reseller-bestell-liste">
<ul>
</ul>
<textarea name="nachricht" id="reseller-msg"></textarea>
<input type="submit" id="reseller-send-order" value="bestellen" title="verbindliche Bestellung" />
</form>
</div>
</div>
</section>
<?php
get_footer();
?>
然后checkresellerid.php检查数据库RiD(ResellerID)是否在数据库中:
<?php
//header('Content-Type: text/html; charset=utf-8');
include 'db_connect.php';
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if (isset($_GET['rid'])) {
// $rid = "R10369";
$rid = $_GET['rid'];
$result = mysqli_query($con, "SELECT rid FROM reseller WHERE rid = '" . $rid . "'");
$ergebnis = mysqli_num_rows($result);
if ($ergebnis == 1) {
$RJSON = [];
$RQUERY = mysqli_query($con, "SELECT * FROM reseller WHERE rid = '" . $rid . "'");
while ($row = mysqli_fetch_array($RQUERY, MYSQL_ASSOC)) {
$RJSON[] = array(
// 'rid' => $row['rid'],
'name' => $row['name'],
'adresse' => $row['adresse'],
'email' => $row['email'],
'phone' => $row['phone']
);
}
echo json_encode($RJSON);
} else {
echo 'false';
}
mysqli_close($con);
}
?>
当我在输入字段中输入某些内容时(无论它是否在数据库中),我收到 500 内部服务器错误。但为什么我在网站上的其他 Ajax 调用(例如 woocommerce 商店循环中的“喜欢产品”功能)可以正常工作,但这个小家伙却不能呢?在我的本地主机上一切都运行正常。它与自定义 php 文件(模板页面文件)有什么关系吗?
检查示例页面 >>> Here <<<
我尝试在functions.php 中注册一个函数,但这导致整个网站崩溃。如何将我的php脚本打包到这个functions.php中并正确调用它?为什么有必要让它变得如此复杂?我在谷歌上搜索了几个小时并尝试了很多方法,但没有任何效果......
感谢您的帮助,并对我的英语不好表示歉意。
编辑:
我的functions.php看起来像这样:
<?php
/****************************************
Theme Setup
*****************************************/
require_once( get_template_directory() . '/lib/init.php' );
require_once( get_template_directory() . '/lib/theme-helpers.php' );
require_once( get_template_directory() . '/lib/theme-functions.php' );
require_once( get_template_directory() . '/lib/theme-comments.php' );
/****************************************
Require Plugins
*****************************************/
require_once( get_template_directory() . '/lib/class-tgm-plugin-activation.php' );
require_once( get_template_directory() . '/lib/theme-require-plugins.php' );
add_action( 'tgmpa_register', 'mb_register_required_plugins' );
add_theme_support( 'woocommerce' );
/****************************************
Misc Theme Functions
*****************************************/
/**
* Define custom post type capabilities for use with Members
*/
function mb_add_post_type_caps() {
// mb_add_capabilities( 'portfolio' );
}
/**
* Filter Yoast SEO Metabox Priority
*/
add_filter( 'wpseo_metabox_prio', 'mb_filter_yoast_seo_metabox' );
function mb_filter_yoast_seo_metabox() {
return 'low';
}
function checkResellerId(){
include 'db_connect.php';
wp_localize_script( 'function', 'checkResellerId', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if (isset($_GET['rid'])) {
// $rid = "R10369";
$rid = $_GET['rid'];
$result = mysqli_query($con, "SELECT rid FROM reseller WHERE rid = '" . $rid . "'");
$ergebnis = mysqli_num_rows($result);
if ($ergebnis == 1) {
$RJSON = [];
$RQUERY = mysqli_query($con, "SELECT * FROM reseller WHERE rid = '" . $rid . "'");
while ($row = mysqli_fetch_array($RQUERY, MYSQL_ASSOC)) {
$RJSON[] = array(
// 'rid' => $row['rid'],
'name' => $row['name'],
'adresse' => $row['adresse'],
'email' => $row['email'],
'phone' => $row['phone']
);
}
echo json_encode($RJSON);
} else {
echo 'false';
}
mysqli_close($con);
}
}
add_action( 'wp_ajax_nopriv_product_s', 'checkResellerId' );
add_action( 'wp_ajax_product_s', 'checkResellerId' );
function resellerMail(){
wp_localize_script( 'function', 'resellerMail', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
$zieladresse = 'xxx';
$absenderadresse = 'xxxReseller';
$absendername = 'xxxReseller';
$betreff = 'Reseller-Bestellung';
$trenner = ":\t";
if ($_SERVER['REQUEST_METHOD'] === "POST") {
$header = array();
$header[] = "From: ".mb_encode_mimeheader($absendername, "ISO-8859-15", "Q")." <".$absenderadresse.">";
$header[] = "MIME-Version: 1.0";
$header[] = "Content-type: text/plain; charset=ISO-8859-15";
$header[] = "Content-transfer-encoding: 8bit";
$mailtext = "";
foreach ($_POST as $name => $wert) {
if (is_array($wert)) {
foreach ($wert as $einzelwert) {
$mailtext .= $name.$trenner.$einzelwert."\n";
}
} else {
$mailtext .= $name.$trenner.$wert."\n";
}
}
mail(
$zieladresse,
mb_encode_mimeheader($betreff, "ISO-8859-15", "Q"),
$mailtext,
implode("\n", $header)
) or die("Die Mail konnte nicht versendet werden.");
echo $mailtext; // nur check für ajax response, später wieder entfernen!!!!
echo 'Ihre Bestellung wurde an uns versandt.<br>Sie werden telefonisch von uns kontaktiert um die Bestellung zu bestätigen.';
exit;
}
//header("Content-type: text/html; charset=utf-8");
}
add_action( 'wp_ajax_nopriv_product_s', 'resellerMail' );
add_action( 'wp_ajax_product_s', 'resellerMail' );
500错误的屏幕:![屏幕截图 500 内部错误][2]
最佳答案
好吧,这有很多单独的问题
add_action()
block 看起来是正确的,所以这很好!
但是:
您如何包含运行 ajax 操作的 javascript?使用wp_localize_script()
必须使用 wp_enqueue_script()
加载脚本或wp_register_script()
。
wp_localize_script()
应在脚本注册后立即调用,通常在 wp_enqueue_script()
之后调用。目前您不是发布到 admin-ajax.php,而是发布到主题目录中的文件。
如果您愿意,可以打印 <script>
在头部使用 ajaxurl var 并使用它来代替,但这不是最佳实践。
一旦我们调用checkResellerId()
,如果您将此数据存储在wordpress数据库中,则无需打开自己的数据库连接,您可以使用$wpdb用于您的 SQL 查询。
您正在寻找 $_GET,但如果您的 javascript 与您的表单匹配,它将位于 $_POST 中。请改用 $_REQUEST。
主要问题:您将 $_GET 数据直接传递到您的 sql 查询中,这使您对 sql 注入(inject)敞开了大门!坏的。
根据您的 php 版本,您可能无法调用 $RJSON = [];
使用array()
相反。
之前echo json_encode
您应该使用 header( "Content-Type: application/json" )
发送 json header ;
我还没有研究其他功能。
<小时/>我建议制作一个非常简单的 ajax 操作,并在尝试运行更复杂的逻辑之前先使其工作,请参阅 this tutorial 。
关于php - Wordpress 中的 Ajax 调用根本不起作用(500 内部服务器错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22408650/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!