Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema di concorrenza DB

    Salve a tutti,

    sto realizzando uno spazio di image hosting tutto italiano, ma non riesco bene a gestire la concorrenza simultanea al DB. La mia idea è quella di avere una tabella con un solo campo 'num' autoincrement nel quale inserisco un record ogni qual volta un utente inserisce un immagine, questo per fare in modo che le immagini hanno tutte nome del tipo "Immagine_$num" ovvero: Immagine_1, Immagine_2, e cosi via.

    Oggi ho provato a caricare due file quasi contemporaneamente con due finestre aperte del browser. Il risultato è che un'immagine è stata caricata correttamente e l'altra mi ha dato la scritta "ERRORE".

    Il codice php ancora sporco e non finito è questo:

    Codice PHP:
    <?php

        
    include("connection.php");
        
        
    $query "SELECT num FROM iup ORDER BY num DESC LIMIT 0,1";
        
    $result = @mysql_query($query) or die("ERRORE");
        
        while (
    $row mysql_fetch_row($result)){
            
    $num $row[0];
            
    $num $num 1;
            
    $query "INSERT INTO iup (num) VALUES ('$num')";
            
    mysql_query($query);
        }
        
        
            
        
    $nome_immagine "immagine_".$num.".jpg";
        
    $nome_immagine_thumb "immagine_".$num."_thumb.jpg";

    do{
        if (
    is_uploaded_file($_FILES['image']['tmp_name'])) {
            if (
    $_FILES['image']['size'] > 800432) { //Controllo sul peso dell'immagine
                  
    $msg "

    Il file non deve superare i 800 KB!!</p>"
    ;
                  break;
            }
            
    // Ottengo alcune informazioni sull'immagine
            
    list($width$height$type$attr) = getimagesize($_FILES['image']['tmp_name']);
            
            
    //Controllo che l'immagine sia GIF, JPG o PNG
            
    if (($type!=1) && ($type!=2) && ($type!=3)) {
                 
    $msg "

    Formato non corretto!!</p>"
    ;
                 break;
               }
            
            if (
    file_exists('upload_img/'.$nome_immagine)) {
                  
    $msg "

    File già esistente sul server. Rinominarlo e riprovare.</p>"
    ;
                  break;
            }
            
            if (!
    move_uploaded_file($_FILES['image']['tmp_name'], 'upload_img/'.$nome_immagine)) {
                  
    $msg "

    Errore nel caricamento dell'immagine!!</p>"
    ;
                  break;
            }
        }
    }while(
    false);

    echo 
    $msg;


    //Spazio riservato alla creazione del thumb
    $src="upload_img/".$nome_immagine;
    header("Content-type: image/png");
    $w=300;
    $h=300;
    $size getimagesize($src);
      if( 
    $size[2] == ){$im = @imagecreatefromjpeg($src);}
      elseif( 
    $size[2] == ){$im = @imagecreatefromgif($src);}
      elseif( 
    $size[2] == ){$im = @imagecreatefrompng($src);}

      
    $newwidth $size[0];
      
    $newheight $size[1];

      if( 
    $newwidth $w ){
        
    $newheight = ($w $newwidth) * $newheight;
        
    $newwidth $w;
      }
      if( 
    $newheight $h ){
        
    $newwidth = ($h $newheight) * $newwidth;
        
    $newheight $h;
      }

        
    $new imagecreatetruecolor($newwidth$newheight);
        
    imagecopyresampled($new$im0000$newwidth$newheight$size[0], $size[1]);

      
    header('Content-Type: ' $size['mime']);
      if( 
    $size[2] == ){@imagejpeg($new''100);}
      elseif( 
    $size[2] == ){@imagegif($new);}
      elseif( 
    $size[2] == ){@imagepng($new);}
      if (!
    move_uploaded_file($new'upload_img/'.$nome_immagine_thumb)) {
                  
    $msg "

    Errore nel caricamento dell'immagine!!</p>"
    ;
                  break;
            }
      @
    imagedestroy($im);
      @
    imagedestroy($new);
    ?>
    Praticamente mi è comparo l'errore della echo presente qui: $result = @mysql_query($query) or die("ERRORE");

    Come devo risolvere?
    www.mtlook.it - Marketing & Image Management
    www.advise.it - Soluzioni informatiche per la tua azienda

  2. #2
    prova a lockare il db prima di fare una richiesta

    e poi... perchè non usare un auto_increment automatico?
    www.gext.it

  3. #3
    Ma bloccando il DB gli altri poi riescono comunque a caricare le immagini? Tu dici che devo utilizzare le transazioni?

    Il campo num è auto_increment, ma come faccio la query per un auto_increment?
    www.mtlook.it - Marketing & Image Management
    www.advise.it - Soluzioni informatiche per la tua azienda

  4. #4
    se locki il db gli altri rimarranno in attesa finchè non si libera...

    auto_increment è una proprietà interna al db impostabile per le chiavi primarie (almeno in mysql)
    www.gext.it

  5. #5
    Uhm... forsemi sono spiegato male...
    Lo so cos'è auto_increment e infatti ho importato il campo num come chiave primaria auto_increment. Quello che voglio dire, è come faccio a far smeplicemente eseguire un auto increment? Con che query?
    Devo per forza di cose fare cosi:
    while ($row = mysql_fetch_row($result)){
    $num = $row[0];
    $num = $num + 1;
    $query = "INSERT INTO iup (num) VALUES ('$num')";
    mysql_query($query);
    }

    Altrimenti ora che ci penso.... potrei aggiungere un altro campo "x" ed ogni volta faccio semplicemente $query = "INSERT INTO iup (x) VALUES ('y')"; ...
    Ora provo

    Grazie dei consigli comunque
    www.mtlook.it - Marketing & Image Management
    www.advise.it - Soluzioni informatiche per la tua azienda

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.