无法将数据插入表中,但我可以更新数据,不知道发生了什么

时间:2015-02-09 23:25:32

标签: php mysql

这是我在这里的第一个问题而且真的很愚蠢......但我不能在此之前完成这项工作,如果我服用坏药或什么,请不要帮助! 这是我的代码:

enter code here

<?php 
 session_start();
include '../conexion.php';

$nombre=$_POST['Nombre'];
$apellido=$_POST['Apellido'];
$mail=$_POST['Mail'];
$telefono=mysqli_real_escape_string($con,$_POST['Telefono']);
$ultimaventa=$_POST['Numeroventa'];
$totalcomprado=0;
$ultimomonto=$_POST['Total'];;
    $resultado=mysqli_query($con,"select * from Clientes")or       die(mysqli_error($con));
    $existe=false;
    while($f=mysqli_fetch_array($resultado)){
    if($f['Mail']==$mail){
        if($f['totalcomprado']==NULL){
                $totalcomprado=$ultimomonto;}else{$totalcomprado=$f['totalcomprado']+$ultimomonto;}

            mysqli_query($con,"update Clientes SET nombre='".$nombre."', apellido='".$apellido."',Mail='".$mail."',telefono='".$telefono."',ultimaventa='".$ultimaventa."',ultimomonto='".$ultimomonto."',totalcomprado='".$totalcomprado."'")or die(mysqli_error($con));

            }else{

                $totalcomprado=$ultimomonto;
                mysqli_query($con,"insert into clientes(nombre,apellido,Mail,telefono,ultimaventa,ultimomonto,totalcomprado)values(0,
                '".$nombre."','".$apellido."','".$mail."','".$telefono."','".$ultimaventa."','".$ultimomonto."','".$ultimomonto."')")or die(mysqli_error($con));}

        }

问题是&#34;更新部分&#34;(当邮件已经在数据库中)一切正常,但是当我去插入语句时没有任何反应,没有插入,没有mysql错误,没有任何东西。所有变量都有正确的值,并且所有数据都被正确收集,为什么我不能插入数据???? PS:我试着单独插入insert语句而且没有任何反应......

1 个答案:

答案 0 :(得分:1)

您的INSERT查询在fields子句中有7列,但提供了8个值(请注意,在值列表的开头有一个额外的0,它在列表中没有匹配的列名称字段)。它肯定会产生错误,你只是没有正确捕捉它。

要快速修复它,只需删除0,子句中的VALUES部分,但我会建议找出错误未找到的原因。

编辑:正如Josan Iracheta正确指出的那样,在MySQL表名中区分大小写,因此INSERT查询中的表名也需要以大写字母开头。

EDIT2:非常具体,试试这个:

mysqli_query($con,"insert into Clientes(nombre,apellido,Mail,telefono,ultimaventa,ultimomonto,totalcomprado)values(
            '".$nombre."','".$apellido."','".$mail."','".$telefono."','".$ultimaventa."','".$ultimomonto."','".$ultimomonto."')")or die(mysqli_error($con));}

此外,请注意您的代码中还有其他几个问题:您的代码容易受到SQL注入的攻击(尝试使用预处理语句来解决它),而且您的更新查询也没有WHERE子句,因此您每次都更新所有行,而不仅仅是具有匹配电子邮件地址的行。

EDIT4:现在我更仔细地查看了你的代码,你的问题不是在SQL中,而是在PHP中 - 运行INSERT查询的逻辑似乎是错误的,如果你的表有一个使用不同的电子邮件排,而不是如果它没有包含您想要的电子邮件的行。尝试更改您的代码:

<?php
session_start();
include '../conexion.php';

$nombre=$_POST['Nombre'];
$apellido=$_POST['Apellido'];
$mail=$_POST['Mail'];
$telefono=mysqli_real_escape_string($con,$_POST['Telefono']);
$ultimaventa=$_POST['Numeroventa'];
$totalcomprado=0;
$ultimomonto=$_POST['Total'];;
$resultado=mysqli_query($con,"select * from Clientes WHERE Mail='".$mail."'")or       die(mysqli_error($con));
$existe=false;

if (mysqli_num_rows($resultado) == 0) {
    $totalcomprado=$ultimomonto;
    mysqli_query($con,"insert into clientes(nombre,apellido,Mail,telefono,ultimaventa,ultimomonto,totalcomprado)values(
        '".$nombre."','".$apellido."','".$mail."','".$telefono."','".$ultimaventa."','".$ultimomonto."','".$ultimomonto."')")or die(mysqli_error($con));
}

while($f=mysqli_fetch_array($resultado)){
    if($f['Mail']==$mail){
        if($f['totalcomprado']==NULL){
            $totalcomprado=$ultimomonto;}else{$totalcomprado=$f['totalcomprado']+$ultimomonto;}

        mysqli_query($con,"update Clientes SET nombre='".$nombre."', apellido='".$apellido."',Mail='".$mail."',telefono='".$telefono."',ultimaventa='".$ultimaventa."',ultimomonto='".$ultimomonto."',totalcomprado='".$totalcomprado."' WHERE Mail='".$mail."'")or die(mysqli_error($con));

    }

}

请注意,我还在WHERESELECT语句中添加了UPDATE子句,如果它不是您真正想要的,请将其删除。我也没有解决代码中的所有SQL注入问题。