【问题标题】:Uploading image Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation:上传图像致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[23000]:完整性约束违规:
【发布时间】:2016-01-22 07:51:45
【问题描述】:

我为我的表单上传了图片,但这会增加错误的时间

致命错误:未捕获的异常“PDOException”和消息“SQLSTATE [23000]:完整性约束违规:/www/data08/users/i/itsiim.planet.ee/htdocs/ 中的 1048 列“图像”不能为空” progemine/system/lisa.php:58 堆栈跟踪:#0 /www/data08/users/i/itsiim.planet.ee/htdocs/progemine/system/lisa.php(58): PDOStatement->execute(Array) # 1 {main} 在第 58 行的 /www/data08/users/i/itsiim.planet.ee/htdocs/progemine/system/lisa.php 中抛出

<?php 
    require 'conf/db.php';
    if ( !empty($_POST)) {
        // keep track validation errors
        $nimiError = null;
        $emailError = null;
        $mobiilError = null;
        $suguError = null;

        // keep track post values
        $nimi = $_POST['nimi'];
        $email = $_POST['email'];
        $mobiil = $_POST['mobiil'];
        $sugu = $_POST['sugu'];

        // validate input
        $valid = true;
        if (empty($nimi)) {
            $nimiError = 'Palun sisesta nimi';
            $valid = false;
        }

        if (empty($email)) {
            $emailError = 'Palun sisesta e-mail';
            $valid = false;
        } else if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
            $emailError = 'Palun sisesta korrektne e-mail';
            $valid = false;
        }

        if (empty($mobiil)) {
            $mobiilError = 'Palun sisesta mobiili number';
            $valid = false;
        }

        if (empty($sugu)) {
            $suguError = 'Palun vali sugu';
            $valid = false;
        }

        //Pilt
        if(is_uploaded_file($_FILES['image']['tmp_name'])){ 
            $folder = "upload/"; 
            $file = basename( $_FILES['image']['name']); 
            $full_path = $folder.$file; 
            if(move_uploaded_file($_FILES['image']['tmp_name'], $full_path)) { 
                $image = $full_path;
            }
        }


        // insert data
        if ($valid) {
            $pdo = Database::connect();
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sql = "INSERT INTO kliendid (nimi,email,mobiil,sugu,image) values(?, ?, ?, ?, ?)";
            $q = $pdo->prepare($sql);
            $q->execute(array($nimi,$email,$mobiil,$sugu,$image));
            Database::disconnect();
            header("Location: index.php");
        }
    }
?>

<!DOCTYPE html>
<html lang="et">
<head>
    <meta charset="utf-8">
    <title>Klientide andmed by Siim Aarmaa IS-13</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>

<body>
    <div class="container">

        <div class="col-md-6 col-md-offset-3">
            <div class="row">
                <h3>Lisa uus klient</h3>
            </div>

            <form class="form-horizontal" action="lisa.php" method="post">
              <div class="form-group <?php echo !empty($nimiError)?'error':'';?>">
                <label class="col-sm-2 control-label">Nimi</label>
                <div class="controls">
                    <input name="nimi" type="text"  placeholder="Nimi" value="<?php echo !empty($nimi)?$nimi:'';?>">
                    <?php if (!empty($nimiError)): ?>
                        <span class="help-block"><?php echo $nimiError;?></span>
                    <?php endif; ?>
                </div>
              </div>
              <div class="form-group <?php echo !empty($emailError)?'error':'';?>">
                <label class="col-sm-2 control-label">E-mail</label>
                <div class="controls">
                    <input name="email" type="text" placeholder="E-mail" value="<?php echo !empty($email)?$email:'';?>">
                    <?php if (!empty($emailError)): ?>
                        <span class="help-block"><?php echo $emailError;?></span>
                    <?php endif;?>
                </div>
              </div>
              <div class="form-group <?php echo !empty($mobiilError)?'error':'';?>">
                <label class="col-sm-2 control-label">Mobiili number</label>
                <div class="controls">
                    <input name="mobiil" type="text"  placeholder="Mobiili number" value="<?php echo !empty($mobiil)?$mobiil:'';?>">
                    <?php if (!empty($mobiilError)): ?>
                        <span class="help-block"><?php echo $mobiilError;?></span>
                    <?php endif;?>
                </div>
              </div>
              <div class="form-group <?php echo !empty($suguError)?'error':'';?>">
                <label class="col-sm-2 control-label">Sugu</label>
                <div class="controls">
                    <input name="sugu" type="radio" value="<?php echo !empty($mees)?$mees:'Mees';?>">Mees
                    <input name="sugu" type="radio" value="<?php echo !empty($naine)?$naine:'Naine';?>">Naine
                    <?php if (!empty($suguError)): ?>
                        <span class="help-block"><?php echo $suguError;?></span>
                    <?php endif;?>
                </div><br>
                <div class="form-group <?php echo !empty($mobiilError)?'error':'';?>">
                <label class="col-sm-2 control-label">Pilt</label>
                <div class="controls">
                    <input type="file" name="image" required="required" value=""/>
                    <?php if (!empty($mobiilError)): ?>
                        <span class="help-block"><?php echo $mobiilError;?></span>
                    <?php endif;?>
                </div>
              </div>
                <br>
              <div class="form-group">
                  <button type="submit" class="btn btn-success">Lisa klient</button>
                  <a class="btn btn-default" href="index.php">Tagasi</a>
                </div>
            </form>
        </div>

    </div> <!-- /container -->
  </body>
</html>

【问题讨论】:

  • 图片上传是否正常,然后移动到正确的目录?

标签: php


【解决方案1】:

文件上传似乎出了点问题。 is_uploaded_file() 和 move_uploaded_file() 检查没有其他分支。

<?php 
require 'conf/db.php';
$errors = array();
if ( !isset($_POST['nimi'],$_POST['email'],$_POST['mobiil'],$_POST['sugu']) ) {
    $errors['parameter'] = 'missing POST parameter';
}
else {
    // keep track post values
    $nimi = $_POST['nimi'];
    $email = $_POST['email'];
    $mobiil = $_POST['mobiil'];
    $sugu = $_POST['sugu'];

    // validate input
    if (empty($nimi)) {
        $errors['nimi']  = 'Palun sisesta nimi';
    }

    if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
        $errors['email'] = 'Palun sisesta korrektne e-mail';
    }

    if (empty($mobiil)) {
        $errors['mobiil'] = 'Palun sisesta mobiili number';
    }

    if (empty($sugu)) {
        $errors['suguError'] = 'Palun vali sugu';
    }

    if ( empty($errors) ) {
        //Pilt
        if( !is_uploaded_file($_FILES['image']['tmp_name']) ) { 
            $errors['upload'] = 'no file uploaded';
        }
        else {
            $folder = "upload/"; 
            $file = basename( $_FILES['image']['name']); 
            $full_path = $folder.$file; 
            if( !move_uploaded_file($_FILES['image']['tmp_name'], $full_path) ) { 
                $errors['upload'] = 'cannot move file';
            }
            else {
                $image = $full_path;
            }
        }
    }
}

// insert data
if ( empty($errors) ) {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO kliendid (nimi,email,mobiil,sugu,image) values(?, ?, ?, ?, ?)";
    $q = $pdo->prepare($sql);
    $q->execute( array($nimi,$email,$mobiil,$sugu,$image) );
    Database::disconnect();
    header("Location: index.php");
    die;
}
else {
    echo '<pre>', join("\r\n", $errors), '</pre>';
}

【讨论】:

    【解决方案2】:

    问题是因为Undefined index: image,这意味着您的文件没有上传。那是因为您没有在 &lt;form&gt; 元素中设置 enctype="multipart/form-data"。应该是,

    <form class="form-horizontal" action="lisa.php" method="post" enctype="multipart/form-data"> 
    
        // your HTML code
    
    </form>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      相关资源
      最近更新 更多