2009-10-23 2 views
1

안녕 얘들 아, 나는 이 무엇이 문제가되는지라고 생각한다. 내가 무엇을하려고하는지 알려주고, 주석을 달아 코드에 붙여 넣을 것이다.MySQL이 1 대신 3 개의 값을 삽입하는 이유는 무엇입니까?

내가하려고 :

  • 이 일시적으로 그 값을 저장합니다 (ID) 증분 값을 삽입 MySQL의
    1. 연결
    2. 업로드 [내가 mysql_insert_id() 사용]을 사용하여 이미지 크기를 조정 class.upload.php 그리고 마지막으로 삽입 된 ID를 사용하여 이름을 지정하십시오.
    3. 업로드 된 파일을 표시하고 사용자가 미리보기 이미지로 복사하도록 허용
    4. 여기는 모든 지옥이 풀리는 곳입니다.

      <안녕, 시작 = "6">
    5. 스토어는

    은 내가 실제로 생각하는 일이 마지막으로 삽입 된 ID를 사용하여 그것에게 이름을주는 축소판입니다

    삽입 쿼리 반복 모든 단계 (업로드, jcrop 및 축소판 표시)에 대해 3 개의 값을 삽입합니다. 그러면 처음에 업로드 된 이미지 이름이 3이지만 이미지 4에서 축소판을 만들 것입니다. 그러면 축소판을 표시해야하는 오류를 표시하는 페이지에서 다른 행을 MySQL에 삽입합니다. 모든 일이 끝나면 다음에 이미지를 업로드 할 때 초기 업로드 ID는 6이됩니다.

    나는 행을 삽입하는 여러 가지 방법을 사용하려고 시도했지만 미쳐 가고 있습니다.하지만 파일 이름은 보이지 않습니다. 다른 방법을 사용하여 각 단계로 전달됩니다. 나는 사용하여 시도했다 : 2 페이지로

    • include_once 문 방법을 과정 행을

    • 분할을 삽입 t이 firstpage 행을 삽입 , 다음 게시합니다 숨겨진 필드를 사용하여

    • mysql 인서트를 다른 단계로 이동 (다른 단계로 마지막 ID를 전달하지 않음)

    여기 내 코드입니다 :

    <?php 
    
        //connect to MySQL 
        $dbname = "****"; 
        $username = "****"; 
        $password = "****"; 
        $hostname = "localhost"; 
    
        //connection to the database 
        $dbhandle = mysql_connect($hostname, $username, $password) 
        or die("<br/><h1>Unable to connect to MySQL, please contact support at [email protected]</h1>"); 
    
        //select a database to work with 
        $selected = mysql_select_db($dbname, $dbhandle) 
        or die("Could not select database."); 
    
        //insert an auto_incrementing value into the 'pictures' table 
        if (!$result = mysql_query("INSERT INTO `pictures` VALUES ('')")) 
        echo 'mysql error: '.mysql_error(); 
    
        $filename = mysql_insert_id(); 
    
    ?> 
    <?php 
    
    //submit coordinates of jcrop preview 
    if ($_POST['submit_coords']) 
    { 
    
    $targ_w = 180; // desired width of thumbnail 
    $targ_h = 60; // desired height of thumbnail 
    $jpeg_quality = 90; // desired jpeg quality 
    $src = 'f/'.$filename.'.jpg'; // get path to the resized image 
    
    // Fetch the uploaded jpeg file 
    $img_r = imageCreateFromJpeg($src); 
    
    //Use these proportions 
    $dst_r = ImageCreateTrueColor($targ_w, $targ_h); 
    
    // Get coordinates from jcop, and create thumbnail 
    imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'], $targ_w,$targ_h,$_POST['w'],$_POST['h']); 
    
    // save the thumbnail and echo the result 
    $output_file = 't/'.$filename.'.jpg'; 
    imagejpeg($dst_r, $output_file, $jpeg_quality); 
    $results = <<<EOT 
    <img src="t/$filename.jpg"/> 
    EOT; 
    echo $results; 
    die(); 
    } 
    
    // upload & resize mig image 
    if ($_POST['upload_image'] && $_FILES['image_upload']) 
    { 
    require_once '../lib/jcrop/class.upload.php'; 
    
    $ih = new Upload($_FILES['image_upload']); 
    if ($ih->uploaded) { 
        //save full size 
        $ih->file_new_name_body = $filename; 
        $ih->file_new_name_ext = 'jpg'; 
        $ih->image_resize = true; 
        $ih->image_x = 860; 
        $ih->image_ratio_y = true; 
        $ih->process('f/'); 
        if ($ih->processed) { 
    
        $x = $ih->image_dst_x; 
        $y = $ih->image_dst_y; 
        echo 'image resized'; 
    
        $ih->clean(); 
        } else { 
        echo 'error : ' . $ih->error; 
        } 
    
    } 
    
    //if succesful show the thumbnail preview 
    $output = <<<EOT 
    <img src="f/$filename.jpg" id="jcrop" /> 
    <br /> 
    <div style="overflow: hidden; width: 180px; height: 60px;"> 
    <img src="f/$filename.jpg" id="preview" /> 
    </div> 
    EOT; 
    
    // Show uploaded image, and allow jcrop 
    $head = <<<EOT 
    <link rel="stylesheet" href="../lib/jcrop/jquery.Jcrop.css" type="text/css" /> 
    <script type="text/javascript" src="../lib/jcrop/jquery.min.js"></script> 
    <script type="text/javascript" src="../lib/jcrop/jquery.Jcrop.min.js"></script> 
    <script> 
    $(function(){ 
    function showPreview(coords) 
    { 
        var rx = 180/coords.w; 
        var ry = 60/coords.h; 
    
        $('#preview').css({ 
        width: Math.round(rx * $x) + 'px', 
        height: Math.round(ry * $y) + 'px', 
        marginLeft: '-' + Math.round(rx * coords.x) + 'px', 
        marginTop: '-' + Math.round(ry * coords.y) + 'px' 
        }); 
    }; 
    
    function insertCoords(c) 
    { 
        $('#x').val(c.x); 
        $('#y').val(c.y); 
        $('#x2').val(c.x2); 
        $('#y2').val(c.y2); 
        $('#w').val(c.w); 
        $('#h').val(c.h); 
    }; 
    
    
    $('#jcrop').Jcrop({ 
        onChange: showPreview, 
        onSelect: insertCoords, 
        aspectRatio: 3 
    }); 
    }); 
    </script> 
    EOT; 
    } 
    ?> 
    
    <html> 
    <head> 
    <?php if ($head) echo $head; ?> 
    </head> 
    <body> 
    <?php if (!$head) : ?> 
    <form action="" method="POST" enctype="multipart/form-data"> 
    <input type="file" name="image_upload" /> 
    <input type="submit" name="upload_image" value="click me" /> 
    </form> 
    <?php else : ?> 
    <form action="" method="POST"> 
    <input type="hidden" name="x" id="x" /> 
    <input type="hidden" name="y" id="y" /> 
    <input type="hidden" name="x2" id="x2" /> 
    <input type="hidden" name="y2" id="y2" /> 
    <input type="hidden" name="w" id="w" /> 
    <input type="hidden" name="h" id="h" /> 
    <input type="hidden" name="filename" id="filename" value="<?php echo $filename ?>" /> 
    <input type="submit" name="submit_coords" value="gogo" /> 
    </form> 
    <?php endif; ?> 
    <?php if ($output) echo $output; ?> 
    </body> 
    </html> 
    

    는, 당신은 어떤 식 으로든 도움이, 또는 적어도 대체 솔루션을 제안 할 수 제발 경우, 내가 대단히 감사하겠습니다.

    미리 감사드립니다.

  • 답변

    4

    처음에는 새로운 행을 삽입하는 코드의 맨 위 줄이 업로드 코드 바로 앞에 있어야한다고 제안합니다.즉, 다음과 후 :

    if ($_POST['upload_image'] && $_FILES['image_upload']) 
    { 
    require_once '../lib/jcrop/class.upload.php'; 
        //connect to MySQL 
        $dbname = "****"; 
        $username = "****"; 
        $password = "****"; 
        $hostname = "localhost"; 
    
        //connection to the database 
        $dbhandle = mysql_connect($hostname, $username, $password) 
        or die("<br/><h1>Unable to connect to MySQL, please contact support at [email protected]</h1>"); 
    
        //select a database to work with 
        $selected = mysql_select_db($dbname, $dbhandle) 
        or die("Could not select database."); 
    
        //insert an auto_incrementing value into the 'pictures' table 
        if (!$result = mysql_query("INSERT INTO `pictures` VALUES ('')")) 
        echo 'mysql error: '.mysql_error(); 
    
        $filename = mysql_insert_id(); 
    

    을 그럼 그냥

    에서
    if ($_POST['submit_coords']) 
    { 
    

    내가 스크립트가 세 가지 작업을하고 각각에 대해 전부라고 모이는 것과

    $filename = $_POST['filename']; 
    
    +0

    효과가있었습니다. 아, 말로는 내 어깨에서 떨어 뜨린 무게가 얼마인지를 표현할 수 없습니다. 이 일의 마감은 두어 시간입니다! 작동 원리에 대한 데모를 보려면 저에게 알려주십시오. 기꺼이 보여 드리겠습니다. 또한 당신이 파일의 압축을 원한다면, 나는 그것도 보낼 것이다. 실제로는 차갑고 독창적입니다. 다시 한번 고마워, 너는 삶의 맛이야! –

    0

    해야한다 $ _POST 변수를 포함하여 if 문을 통해 수행 할 작업을 결정하십시오. 이 방법은 각 호출에 대해 삽입을 수행하므로 하나가 아닌 3 개의 값이 있습니다.

    MySQL INSERT 쿼리가 실행 된 첫 번째 분기로 이동 한 다음 브라우저에 일종의 참조 (대부분 해당 ID)를 반환해야 브라우저가 다음 단계에서 다시 서버로 전달됩니다. 매번이 참조를 확인하는 것을 잊지 마십시오.

    관련 문제