Уникальный номер CropBox как ссылка на заказ PHP

#javascript #php #jquery

#javascript #php #jquery

Вопрос:

Я использую CropBox для загрузки обрезанного изображения для использования в заказе на печать. Мне нужен уникальный номер, который генерируется файлом .txt, но я не могу сохранить файл с тем же номером заказа. Число продолжает увеличиваться независимо от того, что я пытаюсь сделать, чтобы увеличить номер заказа только тогда, когда он еще не существует. Скрипт использует javascript, к которому я не привык, и, похоже, я не могу заставить его делать то, что мне нужно.

 <?php

    session_start();    


$imgW = 200;
$imgH = 300;


if(isset($_SESSION['OrNo'])){
    $counter = $_SESSION['OrNo'];

    echo $counter;
}else{

$counter = file_get_contents(strtolower("orderno.txt"))   1;
file_put_contents("orderno.txt", $counter);
$_SESSION['OrNo'] = $counter;

}
 $filename =  'custupload/'.$counter. '.png';



if(isset($_REQUEST['doAction']) amp;amp; $_REQUEST['doAction']== 'submit'){
    
    if(isset($_FILES['image'])){

        $output_file = $filename;
        //$Globals ['outputfile'];
        move_uploaded_file($_FILES["image"]["tmp_name"], $output_file);
        $ret['status'] = true;
        $ret['msg'] = "Your file has been added to the product! $output_file";
        echo json_encode($ret);
        
        exit;
        
               
    }
}
?>

<center>
<?php 
  $Productid = $_REQUEST["Productid"]; 
  $ImgTemplate = $_REQUEST["ImgTemplate"]; 
  $pic = $_REQUEST["ImgTemplate"]; 
?>


<link type="text/css" media="screen" rel="stylesheet" href="jquery.cropbox.css">
<form id="formbanner" action="" method="post" enctype="multipart/form-data">
    <input type="file" name="banner" class="upImage" >
    <input type="hidden" name="photo" value="" id="fileinp">
    <br>
    <br>
    <img class="cropimage" id="myImg" src="#" alt="" />
    <br>
    <br>
    <div class="form-group" >
        <input type="submit" class="btn btn btn-primary" name="submit" id="save_banner" value="Submit">
                        <img class="loadingimage" style="display: none;" src="loading.gif" width="64" height="20"/>
    </div>
    <br>
    
</form>
</div>

<?php echo "$Productid";?>amp;ImgTemplate=<?php echo "$ImgTemplate";?>amp;filename=<?php echo "$filename";?>

 <script src="jquery.js"></script>
   <script type="text/javascript" src="jquery.mousewheel.js"></script>
  <script type="text/javascript" src="jquery.cropbox.js"></script>
  
  <script type="text/javascript">
var myImage = '';   
$(function () {
   
    $(".upImage").change(function () {
       
        var ext = $(this).val().split('.').pop().toLowerCase();
        if($.inArray(ext, ['gif','png','jpg','jpeg']) == -1) {
           alert('Please select a valid image [ jpg | jpeg | gif | png ]');
            $(this).val('');
            myImage= '';
            clearImage();
       
        }else{   
       
            if (this.files amp;amp; this.files[0]) {
                var reader = new FileReader();
                    reader.onload = imageIsLoaded;
                reader.readAsDataURL(this.files[0]);
            }
        }
    });
    
    function imageIsLoaded(e) {
        $('.cropCont').show();
        $('#myImg').attr('src', e.target.result);
        $('#myImg').show();
        $( '.cropimage' ).cropbox( {width: <?php echo $imgW; ?>, height: <?php echo $imgH; ?>, showControls: 'auto' } ).on('cropbox', function( event, results, img ) {
            myImage = img.getDataURL();
        });
    }
    
    function clearImage(){
        $('.cropCont').hide();
        $("#banner").val('');
        $("#myImg").removeAttr('src');
        $('#myImg').hide();
    }
    
    $('#formbanner').submit(function(e){
        
        e.preventDefault();
        $('#save_banner').attr('disabled',true);
        $('.loadingimage').show();
        var form = $('#formbanner')[0]; 
        var fd = new FormData(form);
        if(myImage != ''){
            var block = myImage.split(";");
            var contentType = block[0].split(":")[1];// In this case "image/gif"
            var realData = block[1].split(",")[1];// In this case "R0lGODlhPQBEAPeoAJosM...."
            var blob = b64toBlob(realData, contentType);
            fd.append("image", blob);
        }
        $.ajax({
          url: '?doAction=submit',
          data: fd,
          processData: false,
          contentType: false,
          type: 'POST',
          dataType : 'json',
          success: function(data){
             alert(data.msg);
             if(data.status){
                window.location='test.php?Productid=<?php echo "$Productid";?>amp;ImgTemplate=<?php echo "$ImgTemplate";?>amp;ONo=<?php echo "$counter";?>';
            }else{
                $('#save_banner').attr('disabled',false);
                $('.loadingimage').hide(3000);
            }


          }
        });

    });
});






function b64toBlob(b64Data, contentType, sliceSize) {
        contentType = contentType || '';
        sliceSize = sliceSize || 512;

        var byteCharacters = atob(b64Data);
        var byteArrays = [];

        for (var offset = 0; offset < byteCharacters.length; offset  = sliceSize) {
            var slice = byteCharacters.slice(offset, offset   sliceSize);

            var byteNumbers = new Array(slice.length);
            for (var i = 0; i < slice.length; i  ) {
                byteNumbers[i] = slice.charCodeAt(i);
            }

            var byteArray = new Uint8Array(byteNumbers);

            byteArrays.push(byteArray);
        }

      var blob = new Blob(byteArrays, {type: contentType});
      return blob;
}


    </script>
             ```

If anyone could point me in the right direction I would be grateful. 
I have tried using session variables as well as creating the variable within the page.
  

Комментарии:

1. Есть ли session_start где-нибудь перед этим (в файле, который включает этот, или что-то в этом роде)? Если нет, то isset($_SESSION['OrNo']) никогда не будет true …

2. (Для начала это звучит не очень хорошо, поскольку несколько пользователей используют это одновременно, в какой-то момент у вас могут возникнуть проблемы с этим …)

3. Да, есть включаемый файл для подключений к базе данных и т.д. Я удалил ссылку, чтобы попытаться упростить код

4. @CBroe рад принять любые предложения о лучшем способе сделать это, всегда стремясь попробовать и улучшить: D

5. Ну, во-первых, если вы уже используете базу данных в проекте, то вам следует использовать ее и для хранения таких счетчиков, а не для обычных текстовых файлов. В базе данных, по крайней мере, уже встроены все механизмы, необходимые для одновременного доступа, тогда как с текстовыми файлами это всегда немного рискованно.