1

我有两个网页,一个用于填写信息,另一个用于处理信息。我的第一页是带有 jQ​​uery 和 AJAX 的简单 HTML,只要用户单击一个按钮,它就会执行以下代码:

$("#registrar-tienda").click(function() {
    var categoria = $("#categoria").val();
    var nombre = $("#nombre").val();
    var direccion = $("#direccion").val();
    var codigo_postal = $("#codigo").val();
    var poblacion = $("#poblacion").val();
    var provincia = $("#provincia").val();
    var latitud = $("#latitud").val();
    var longitud = $("#longitud").val();
    var telefono = $("#telefono").val();
    var categoria = $("#categoria").val();
    var email = $("#email").val();
    var web = $("#web").val();
    var eco_punto = $("#eco-punto").val();
    var compra_minima = $("#compra-minima").val();
    var maximo_acumulable = $("#maximo-acumulable").val();
    var cliente_hash = $("#cliente-hash").val();
    alert(nombre+direccion+codigo_postal+poblacion+provincia+latitud+longitud+telefono+email+web+eco_punto+compra_minima+maximo_acumulable+cliente_hash);
    $.ajax({
        type:"POST",
        url:"modulos/tiendas/operaciones.php",
        data:{categoria:categoria,nombre:nombre,direccion:direccion,codigo_postal:codigo_postal,poblacion:poblacion,provincia:provincia,latitud:latitud,longitud:longitud,telefono:telefono,categoria:categoria,email:email,web:web,eco_punto:eco_punto,compra_minima:compra_minima,maximo_acumulable:maximo_acumulable,cliente_hash:cliente_hash}
        }).done(function(msg) {
        if(msg == "Tienda agregada") {
            document.location.reload(true);
        } else {
            document.getElementById("errores").innerHTML = msg;
            }
        });
});

我对网页的特定部分没有任何问题,它会发送变量,如果注意到我正在通过警报对话框确认,并且所有信息都是有效且正确的。

问题出在 PHP 网页上,我的 HTML 中有一个 span 标签,如果有错误,它会报告错误。当我点击提交时,它只显示:

错误:数组()

如果事务没有执行,我会输入那个错误字符串,但我不确定为什么它没有执行,并且 errorInfo() 方法只报告: Array()

我的PHP代码如下:

<?php
require('../../includes/etc/connection.php');
isset($_POST['categoria']) or die ("No hay categoria definida");
isset($_POST['nombre']) or die("No hay nombre de negocio");
isset($_POST['direccion']) or die("No hay direccion de negocio");
isset($_POST['poblacion']) or die ("No hay poblacion de negocio");
isset($_POST['codigo_postal']) or die("No hay codigo postal de negocio");
isset($_POST['provincia']) or die("No hay provincia");
isset($_POST['latitud']) or die("No hay latitud");
isset($_POST['longitud']) or die("No hay longitud");
isset($_POST['telefono']) or die("Sin telefono");
isset($_POST['categoria']) or die("No hay categoria");
isset($_POST['eco_punto']) or die("No hay valor del ecopunto");
isset($_POST['maximo_acumulable']) or die("No hay maximo acumulable");
isset($_POST['compra_minima']) or die("No hay compra minima");
isset($_POST['cliente_hash']) or die("Se tiene que seleccionar un cliente");

if($_POST['nombre'] == "Nombre del establecimiento"): die(0); endif;
if($_POST['direccion'] == "Direccion"): die(0); endif;
if($_POST['poblacion'] == "Poblacion"): die(0); endif;
if($_POST['codigo_postal'] == "Codigo Postal"): die(0); endif;
if($_POST['provincia'] == "Provinicia"): die(0); endif;
if($_POST['telefono'] == "Telefono"): die(0); endif;
if($_POST['email'] == "E-mail"): die(0); endif;

$hash = md5($_POST['nombre'].$_POST['latitud'].$_POST['longitud'].date("Y-m-d H:M:s"));
$fecha_registro = date("Y-m-d");
$strSQL = "INSERT INTO `negocios`(`hash`,`cliente_hash`,`fecha_registro`,`nombre`,`apellido`,`direccion`,`codigo_postal`, `poblacion`, `provincia`, `latitud`,`longitud`,`telefono`, `email`, `web`,`categoria`,`valor_ecopunto`,`maximo_acumulable`,`compra_minima`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 
if(!($sth = $dbh->prepare($strSQL))) {
    die("Statement not prepared:".$dbh->errorInfo());
}

if(!$dbh->beginTransaction()){
    die ("Transaction didn't begin: ".$dbh->errorInfo());
}

$sth->bindParam(1,$hash,PDO::PARAM_STR,32) or die("Not binded");
$sth->bindParam(2,$_POST['cliente_hash'],PDO::PARAM_STR,32) or die("Not binded");
$sth->bindParam(3,$_POST['fecha_registro'],PDO::PARAM_STR,15) or die("Not binded");;
$sth->bindParam(4,$_POST['nombre'],PDO::PARAM_STR,150) or die("Not binded");;
$sth->bindParam(5,$_POST['direccion'],PDO::PARAM_STR,150) or die("Not binded");;
$sth->bindParam(6,$_POST['codigo_postal'],PDO::PARAM_INT,9) or die("Not binded");;
$sth->bindParam(7,$_POST['poblacion'],PDO::PARAM_STR,50) or die("Not binded");;
$sth->bindParam(8,$_POST['provincia'],PDO::PARAM_STR,50) or die("Not binded");;
$sth->bindParam(9,$_POST['latitud'],PDO::PARAM_STR,10) or die("Not binded");;
$sth->bindParam(10,$_POST['longitud'],PDO::PARAM_STR,10) or die("Not binded");;
$sth->bindParam(11,$_POST['telefono'],PDO::PARAM_STR,20) or die("Not binded");;
$sth->bindParam(12,$_POST['email'],PDO::PARAM_STR,100) or die("Not binded");;
$sth->bindParam(13,$_POST['web'],PDO::PARAM_STR,100) or die("Not binded");;
$sth->bindParam(14,$_POST['categoria'],PDO::PARAM_INT,2) or die("Not binded");;
$sth->bindParam(15,$_POST['eco_punto'],PDO::PARAM_INT,4) or die("Not binded");;
$sth->bindParam(16,$_POST['maximo_acumulable'],PDO::PARAM_INT,4) or die("Not binded");;
$sth->bindParam(17,$_POST['compra_minima'],PDO::PARAM_INT,5) or die("Not binded");;
if(!$sth->execute()){
    die("Error: ".$sth->errorInfo());  // Error reported in the HTML webpage
}
$dbh->commit();
echo "Tienda Agregada";
?>

一开始我以为我没有收到 POST 变量,但是如果我添加:

print_r($_POST);

它使用所有正确的值打印 POST 数组

它似乎没有抱怨任何事情,但事务没有提交到数据库。

另一方面,我有其他网页遵循相同的逻辑、相同的代码,并且这些页面按预期工作。

我也是第一次用PDO,平时用的是MySQLi

4

1 回答 1

3

PDOerrorInfo返回一个数组,而不是一个字符串。使用var_exportorprint_r把它变成一个字符串。


此外,在我看来,最好将 PDO 的错误模式设置为在无法执行查询时抛出异常,而不是检查每个查询的结果。然后,您可以将整个事务包装在 try/catch 中,并在出现问题时回滚事务。

于 2012-05-13T18:27:35.440 回答