Visualizzazione risultati 1 fino 14 di 14

Discussione: Variabile PHP che viene modificata dentro un if

  1. #1
    Guest

    Predefinito Variabile PHP che viene modificata dentro un if

    Ribuongiorno a tutti!
    Sono di nuovo tornato con un problema che mi tormenta da ore...
    Volevo creare una variabile globale che veniva modificata dentro un if e poi potevo mandarla in output tutte le volte che volevo.. ma purtroppo non funziona:
    Codice PHP:
    $filename;
    if(
    $_SERVER["REQUEST_METHOD"] == "POST"){
    ...
    CODICE ...
    if(isset(
    $_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
    $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
    global
    $filename;
    $filename=$_FILES["photo"]["name"];
    $filetype = $_FILES["photo"]["type"];
    $filesize = $_FILES["photo"]["size"];

    ...
    CODICE ...
    }
    echo
    '<script type="text/javascript">alert("'.$filename.'");</script>';
    }
    Quando mando in output la variabile è vuota.
    Cosa ho sbagliato?
    Grazie mille!

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non usare variabili globali.

    Nel codice che hai mostrato, tuttavia, $filename non è affatto una variabile globale, segue le normali regole di scope. Togli la keyword global e dovrebbe funzionare (a meno che non ci siano errori altrove nel codice).

  3. #3
    Guest

    Predefinito

    Il problema è che se faccio un alert fuori dall if non mi trova la variabile filename

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Mi era sfuggito un dettaglio, ovvero che alla variabile $filename deve essere preventivamente assegnato un valore (anche null):
    Codice PHP:
    $filename = null;
    if(
    $_SERVER["REQUEST_METHOD"] == "POST") {
    // resto del codice

  5. #5
    Guest

    Predefinito

    Dici che facendk cosi l alert posto fuori dall if riesca a trovare la variabile filename?

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Esatto.

  7. #7
    Guest

    Predefinito

    niente

  8. #8
    Guest

    Predefinito

    Riposto il codice:
    Codice PHP:
    $filename= null;
    error_reporting(E_ALL);
    $error_message = "";
    if(
    $_SERVER["REQUEST_METHOD"] == "POST"){

    if (
    $_FILES['photo']['size'] != 0){
    $dir= "/imageupload/";
    // Check if the form was submitted

    // Check if file was uploaded without errors
    if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
    $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
    $filename=$_FILES["photo"]["name"];
    $filetype = $_FILES["photo"]["type"];
    $filesize = $_FILES["photo"]["size"];

    ...
    CODICE E SERIE DI IF E ELSE...

    if (isset(
    $_POST['form_name']) && $_POST['form_name'] == 'signupform'){


    $passrepeat= $_POST['input-user_password_repeat'];
    $pass= $_POST['input-user_password'];
    $email= $_POST['input-user_email'];
    $nome= $_POST['input-display_name'];
    $code = 'NA';
    echo
    $filename;
    echo
    '<script type="text/javascript">alert("DENTRO");</script>';
    echo
    '<script type="text/javascript">alert("'.$filename.'");</script>';
    ...
    CODICE...

    }
    // CHIUSURA PRIMO IF
    Ultima modifica di tuttitrucchiInvitaAmici : 20-06-2017 alle ore 15.22.29

  9. #9
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Deve esserci qualcosa che non va in mezzo a tutto quel codice (o alle parti omesse). Questo proof of concept:
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);

    $filename = null;
    if(
    true) {
    if (
    true) {
    if(
    true) {
    $filename = "variabile modificare internamente";
    }
    }
    }
    echo
    'Valore di $filename dopo gli if-then-else:<br><pre>' . $filename . '</pre>';
    funziona, come puoi vedere all'indirizzo: http://mzanella.altervista.org/tests...-dentro-un-if/.

    Sicuramente un refactoring aiuterebbe, ad esempio qui
    Codice PHP:
    if ($_FILES['photo']['size'] != 0){
    stai controllando la dimensione di un file che potrebbe non essere nemmeno stato caricato.

    È possibile che il flusso non entri nemmeno all'interno del blocco che dovrebbe modificare la variabile.

  10. #10
    Guest

    Predefinito

    Ok..ho provato a togliere entrambi gli if e stavolta entra.
    Il problema adesso è che "non cattura" piu l immagine:
    Codice PHP:
    $filename= null;
    error_reporting(E_ALL);
    $error_message = "";
    if(
    $_SERVER["REQUEST_METHOD"] == "POST"){

    $dir= "/imageupload/";
    // Check if the form was submitted

    // Check if file was uploaded without errors
    $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
    echo
    '<script type="text/javascript">alert("ENTRATO NELL IF");</script>';
    $filename=$_FILES["photo"]["name"];
    echo
    '<script type="text/javascript">alert("'.$filename.'");</script>';
    $filetype = $_FILES["photo"]["type"];
    $filesize = $_FILES["photo"]["size"];
    // Verify file extension
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    if(!
    array_key_exists($ext, $allowed)) die("Error: Please select a valid file format."); // MI RESTITUISCE QUESTO ERRORE!!!

  11. #11
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Cosa intendi per "cattura"?

  12. #12
    Guest

    Predefinito

    $filename non ottiene l'immagine.
    La variabile mi risulta come vuota

  13. #13
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Considerando gli errori precedenti (il flusso non entrava nel corpo degli if) e quest'ultimo ($filename risulta vuota dopo l'assegnamento di $_FILES['photo']['name']), l'ipotesi più probabile è che il file non sia stato caricato, ci siano stati errori durante l'upload, o simili, che hanno fatto sì che $_FILES['photo'] sia vuoto o non definito.

    Controlla bene queste situazioni. Dovresti perlomeno, come primissima cosa, controllare che un file sia stato ricevuto:
    Codice PHP:
    if (!isset($_FILES['photo']) || !is_uploaded_file($_FILES['photo']['tmp_name'])) {
    die(
    "ERRORE: il file 'photo' non è stato inviato.");
    }
    Secondariamente, controllare che non ci siano stati errori (non usare il "numero magico" 0, usa la costante per chiarezza):
    Codice PHP:
    if ($_FILES['photo']['error'] !== UPLOAD_ERR_OK) {
    die(
    "Errore durante il caricamento del file.");
    }
    Solo a questo punto puoi iniziare con i tuoi controlli.

  14. #14
    Guest

    Predefinito

    Forse ho capito il problema...
    Praticamente ho 2 form..e uno riguardo ai campi di testo e uno riguardo al file (situato fuori dal 1 form) .
    Quando l'utente inserisce l'immagine l'upload lo effetua subito.
    Di conseguenza quando clicco il pulsante submit del form generale non mi invia la foto perchè l'ha già uploadata.
    Codice HTML:
    <form name="signupform" action="<?php echo basename(__FILE__); ?>" method="post" id="form-edit-profile">
    					<input type="hidden" name="form_name" value="signupform">
    						<h2>Informazioni di base</h2>
    						<div class="basic-inputs has-input-icon">						
    						        <p class="info user_login">
                
                
                                        <label for="input-user_login">Username (Non può essere modificato)</label><input type="text" name="input-user_login" id="input-user_login" class="input materialize-input" value="<?php echo $_SESSION['username'];?>" disabled="disabled">
                                    </p>
                <p class="info display_name">
                
                
                                        <label for="input-display_name">Nome</label><input type="text" name="input-display_name" id="input-display_name" class="input materialize-input" value="<?php echo $nome; ?>">
                                    </p>
                <p class="info user_email">
                
                
                                        <label for="input-user_email">Email</label><input type="text" name="input-user_email" id="input-user_email" class="input materialize-input" value="<?php echo $email; ?>">
                                    </p>
                
        						</div><!-- .basic-inputs.has-input-icon -->
    						<br>
    						
    						
    						<h2>Cambia Avatar</h2>
    						<p>Se vuoi modificare la tua immagine di profilo puoi uploadare una tua foto a scelta con il pulsante sottostante</p>
    						        <p class="info avatar">
                <label for="input-avatar">Immagine di profilo</label>
               
                                        <input type="hidden" name="input-avatar[media_id]" id="input-avatar-media-id" class="input" placeholder="Change Image" value="">
                            <input type="hidden" name="input-avatar[full]" id="input-avatar" class="input" placeholder="Change Image" value="http://2.gravatar.com/avatar/2b871676aa455424b7740b9bb58338d1?s=150&amp;d=monsterid&amp;r=g">
                            <a href="#myModal" class="toggle-media-uploader" data-id="input-avatar" data-toggle="modal" >
                                <span class="input-image-preview" data-id="input-avatar">
                                    <img src='<?php echo $image; ?>' id="immagineprof">                        </span>
    <input type="hidden" name="form_name" value="signupform">
                                <span class="input-image-text ripple-effect button">Cambia avatar</span>
                            </a>
    
                                    </p>
                
        						<br>
    
    						
      <?php
      if($_SERVER["REQUEST_METHOD"] == "POST"){
      if(file_exists("upload/" . $_FILES["photo"]["name"])){
                    
      }
      else{
                    $destinazione= "$dir$filename";
                    echo '<script type="text/javascript">
                    document.getElementById("immagineprof").src="'.$destinazione.'";
                    document.getElementById("headerprof").src="'.$destinazione.'";
                    </script>';
       }
       }
      ?>
    						
    
    						<h2>Cambio Password</h2>
    						<div class="password-inputs has-input-icon">
    						<p>Se non vuoi cambiare la tua password di accesso lascia per piacere questi spazi vuoti</p>
    						        <p class="info user_password">
                
                
                                        <label for="input-user_password">Type new password</label><input type="password" name="input-user_password" id="input-user_password" class="input materialize-input" value="">
                                    </p>
                <p class="info user_password_repeat">
                
                
                                        <label for="input-user_password_repeat">Repeat new password</label><input type="password" name="input-user_password_repeat" id="input-user_password_repeat" class="input materialize-input" value="">
                                    </p>
        								
    						</div>	
    						
    						<br>
    
    						        <p class="info user_id">
                <label for="input-user_id"></label>
                
                                        <input type="hidden" name="input-user_id" id="input-user_id" class="input" value="4578">
                                    </p>
    
        <span class="submit-wrap ripple-effect">
    
    							<input type="submit" class="button" name="submit" value="Save Changes" >					
    						</span>
    
    	
    					</form>
    
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" id="form2" method="post" enctype="multipart/form-data" novalidate class="box">
    
    		
    		<div class="box__input">
    			<svg class="box__icon" xmlns="http://www.w3.org/2000/svg" width="50" height="43" viewBox="0 0 50 43"><path d="M48.4 26.5c-.9 0-1.7.7-1.7 1.7v11.6h-43.3v-11.6c0-.9-.7-1.7-1.7-1.7s-1.7.7-1.7 1.7v13.2c0 .9.7 1.7 1.7 1.7h46.7c.9 0 1.7-.7 1.7-1.7v-13.2c0-1-.7-1.7-1.7-1.7zm-24.5 6.1c.3.3.8.5 1.2.5.4 0 .9-.2 1.2-.5l10-11.6c.7-.7.7-1.7 0-2.4s-1.7-.7-2.4 0l-7.1 8.3v-25.3c0-.9-.7-1.7-1.7-1.7s-1.7.7-1.7 1.7v25.3l-7.1-8.3c-.7-.7-1.7-.7-2.4 0s-.7 1.7 0 2.4l10 11.6z"/></svg>
    			<input type="file" name="photo" id="file" class="box__file" data-multiple-caption="{count} files selected" multiple />
    			<label for="file"><strong>Sciegli un immagine</strong><span class="box__dragndrop"> o trascinala qui</span>.</label>
    			
    			<button type="submit" class="box__button">Upload</button>
    		</div>
    		<div id="progress-wrp"><div class="progress-bar" style="width: 100%;"></div><div class="status">100%</div></div>
    		
    		
    
    		
    		<div class="box__uploading">Uploading&hellip;</div>
    		<div class="box__success">Done! <a href="<?php echo $_SERVER['PHP_SELF']; ?>" class="box__restart" role="button">Upload more?</a></div>
    		<div class="box__error">Error! <span></span>. <a href="<?php echo $_SERVER['PHP_SELF']; ?>" class="box__restart" role="button">Try again!</a></div>
    	</form>
    Mi scuso per l'indentazione, ho fatto copia e incolla
    Ultima modifica di tuttitrucchiInvitaAmici : 20-06-2017 alle ore 16.38.07

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •