#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. Ну, во-первых, если вы уже используете базу данных в проекте, то вам следует использовать ее и для хранения таких счетчиков, а не для обычных текстовых файлов. В базе данных, по крайней мере, уже встроены все механизмы, необходимые для одновременного доступа, тогда как с текстовыми файлами это всегда немного рискованно.