dsd119120 2014-07-09 15:02
浏览 35
已采纳

PHP错误“参数未定义”

I'm trying with one friend to make a simple upload form, but i'm stuck at the moment. Here's my trouble :

I made this form:

screenshot

This is the code :

<form method="post" class="form-horizontal" role="form" action="../i/insert.php" enctype="multipart/form-data">

    <div class="form-group">
        <label class="col-lg-2 control-label">Title</label>
        <div class="col-lg-10">
            <input name="v" id="title" type="text" class="form-control" placeholder="Banana nation">
        </div>
    </div>

    <div class="form-group">
        <label class="col-lg-2 control-label">Uploader's name</label>
        <div class="col-lg-10">
            <input name="name" id="upname" type="text" class="form-control" placeholder="Onision">
        </div>
    </div>

    <div class="form-group">
        <label class="col-lg-2 control-label">Description</label>
        <div class="col-lg-10">
            <textarea name="description" id="description" class="form-control" rows="3" placeholder="We are not robots, we are not slaves, we are banana nation."></textarea>
        </div>
    </div>

    <div class="form-group">
        <label for="exampleInputFile" class="col-lg-2 control-label">Video thumbnail</label>
        <div class="col-lg-10">
            <input type="file" id="thumbnail" name="thumbnail">
            <p class="help-block">Click to upload your file.</p>
        </div>
    </div>

    <div class="form-group">
        <div class="col-lg-offset-2 col-lg-10">
            <button type="submit" class="btn btn-default">Submit</button>
        </div>
    </div>
</form>

This form have an action to ../i/insert.php, here's the code (insert.php):

<?php
require('db.php');


    $dossier = '/var/www/vids/m/';
    $file = basename($_FILES['thumbnail']['name']);
    $thmb_name = basename($_FILES['thumbnail']['name']);
    $taille_maxi = 3145728;
    $taille = filesize($_FILES['thumbnail']['tmp_name']);
    $extensions = array('.png', '.jpg', '.jpeg');
    $extension = strrchr($_FILES['thumbnail']['name'], '.'); 

    if(!in_array($extension, $extensions)) 
    {
         $erreur = 'You can only upload a png, jpg or a jpeg file.';
    }
    if($taille>$taille_maxi)
    {
         $erreur = 'Hng.. it\'s too big sen-senpai.., it must be smaller than 3 mb...';
    }
    if(!isset($erreur))
    {

         $file = strtr($file, 
              'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
              'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
         $file = preg_replace('/([^.a-z0-9]+)/i', '-', $file);
         if(move_uploaded_file($_FILES['thumbnail']['tmp_name'], $dossier . $file))
         {
              $thmb_result = 'Upload succesfull !';
         }
         else
         {
              $thmb_result = 'Upload failed !';
         }
    }
ajout($_POST['v'], $_POST['name'], $_POST['description'], $_POST['description'], $file);
function ajout($v, $name, $description, $fichier, $file)
    {
        global $bdd;
        $req = $bdd->prepare('INSERT INTO `vids`.`vidinfos` (`v`, `name`, `date`, `description`, `fichier`, `file`, `id`) VALUES (:v, :name, CURRENT_DATE(), :description, :fichier, :file, NULL);');
        $req->execute(array(
        ':v' => $v,
        ':name' => $name,
        ':description' => $description,
        ':fichier' => $fichier,
        ':thmb_name' => $file
        ));
    }
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

And here's database structure: enter image description here

So I fill up the form, and the picture successfully uploads in the directory I requested, but nothing shows up in my database, no new entry. I checked that every variable is correctly defined using var_dump.

Plus, I got this error in my PHP error log:

[Wed Jul 09 15:57:52 2014] [error] [client 10.0.0.1] PHP Warning:  PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined on line 48
  • 写回答

2条回答 默认 最新

  • dongwen7371 2014-07-09 15:08
    关注

    Your parameters do not match -> :file != :thmb_name

    $req = $bdd->prepare('INSERT INTO `vids`.`vidinfos` (`v`, `name`, `date`, `description`, `fichier`, `file`, `id`) VALUES (:v, :name, CURRENT_DATE(), :description, :fichier, **:file**, NULL);');
    
    $req->execute(array(
        ':v' => $v,
        ':name' => $name,
        ':description' => $description,
        ':fichier' => $fichier,
        '**:thmb_name**' => $file
        ));
    

    Should be

    $req->execute(array(
        ':v' => $v,
        ':name' => $name,
        ':description' => $description,
        ':fichier' => $fichier,
        ':file' => $file
        ));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号