stampare contenuto di una funzione in un altro file

heilà!

ho nel file2.php, una funzione che esegue dei controlli sul caricamento di files provenienti dal form del file1.php

<?php
function addProduct()
{

do {
      // controllo che il file non sia vuoto
   if( empty($_FILES['fleImage']['tmp_name'])) {
   $msg="<p>Non hai selezionato nessun file</p>";
break;
}

if (is_uploaded_file($_FILES['fleImage']['tmp_name'])) {
    // Controllo che il file non superi i 30 KB
    if ($_FILES['fleImage']['size'] > 30720) {
      $msg = "<p>Il file non deve superare i 30 KB!!</p>";
      break;
    }
    // Ottengo le informazioni sull'immagine
    list($width, $height, $type, $attr) = getimagesize($_FILES['fleImage']['tmp_name']);
    // Controllo che le dimensioni (in pixel) non superino il limite impostato
    if (($width > 400) || ($height > 260)) {
      $msg = "<p>Dimensioni non corrette!!</p>";
      break;
    }
    // Controllo che il file sia in uno dei formati GIF, JPG o PNG
    if (($type!=1) && ($type!=2) && ($type!=3)) {
      $msg = "<p>Attenzione: Il Formato dell'immagine non corretto!!<br /> Formati permessi: GIF, JPG o PNG</p>";
      break;
    }
    // Verifico che sul sul server non esista già un file con lo stesso nome
    // In alternativa potrei dare io un nome che sia funzione della data e dell'ora
    if (file_exists(SRV_ROOT .'admin/immagini/'.$_FILES['fleImage']['name'])) {
      $msg = "<p>File già esistente sul server. Rinominarlo e riprovare.</p>";
      break;
    }
    // Sposto il file nella cartella da me desiderata
    if (!move_uploaded_file($_FILES['fleImage']['tmp_name'], SRV_ROOT .'admin/immagini/'.$_FILES['fleImage']['name'])) {
      $msg = "<p>Errore nel caricamento dell'immagine!!</p>";
      break;
    }
  }
} while (false);

if(!isset($msg)){

   $citazione = $_FILES['fleImage']['name'];
   $lingua = $_POST['lingua'];

   $sql = "INSERT INTO tbl_citazioni ( citazione, lingua ) VALUES ( '$citazione', '$lingua' )";
      $result = dbQuery($sql)or die(mysql_error());

      header("Location: index.php");

     } else {
         echo $msg;exit;
   }
 }
?>

quello che vorrei fare è stampare i messaggi di errore $msg nel file1.php.

ho provato a sostituire echo $msg;exit; con return $msg e richiamare la funzione nel file1.php con require_once 'file2.php' e nella parte interessata con  echo addProduct().

ma non funziona, il browser mi dice che "Firefox ha rilevato che il server sta ridirezionando la richiesta per questo indirizzo in modo che non possa mai essere completata."

 ???

inviato 10 anni fa
iTek
iTek
1
X 0 X

l'approccio col return è quello corretto ma c'è un problema con l'header del redirect. In caso tutti i controlli non rilevino problemi devi restituire un valore particolare, ad esempio FALSE.

Richiamata la funzione per il controllo, se restituisce una stringa la mostri all'utente, se nvece restituisce false effettui il redirect.

Devi togliere quindi l'istruzione header dal codice della funzione che effettua i controlli.

 :bye:

P.S.: dove hai imparato ad usare il costrutto DO ... WHILE(false) per sfruttare il break?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ho provato a togliere l'header, ma non cambia nulla ....

 ???

ps: ho trovato un tutorial su un sito

risposto 10 anni fa
iTek
iTek
1
X 0 X

l'errore che hai ricevuto si riferisce ad un continuo redirect della pagina quindi il problema è legato alle chiamate  della funzione header. Ce ne sono altre nello script?

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

scusa il ritardo, ma ho avuto un problema con il login al forum >:(

allora, si c'è un altro header...

in pratica cosa succede: all'action  del form passo la variabile addProduct per l'inserimento del file e deleteProduct da url per l'eliminazione.

nel file di controllo c'è uno switch che smista la funzione da eseguire:

<?php

$action = isset($_GET['action']) ? $_GET['action'] : '';

switch ($action) {

   case 'addProduct' :
      addProduct();
      break;
   case 'deleteProduct' :
      deleteProduct();
      break;
 default :
       // if action is not defined or unknown
      // move to main product page
      echo"<meta http-equiv=\"Refresh\" content=\"0;url=index.php\">";
}
?>

la funzione addProduct è quella che ho postato sopra, e da quel problema, mentre per l'eliminazione esiste anche lì un header uguale a quello per l'inserimento, ma non mi da quel problema....perchè? forse dipende dal do/while?

inoltre, quando apro la pagina file1.php in cui c'è il form, mi appare già l'avviso che "Non hai selezionato nessun file" mentre dovrebbe comparire solo nel caso in cui al submit, non passo nulla al file2 di controllo.

spero di essermi spiegato.

risposto 10 anni fa
iTek
iTek
1
X 0 X

ma il codice che hai appena riportato viene caricato dalla index.php ?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

no, nell'index ci sono i require per i files di configurazione, template etc

per default carico il file con il form, il cui action e url puntano al file con il codice che ho riportato ( switch e funzioni di add e delete).

non capisco perchè con la funzione di delete non ho problemi ,mentre con add si...

 ???

risposto 10 anni fa
iTek
iTek
1
X 0 X

potresti riportare TUTTO il codice?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

file1.php

<?php
<h2>Citazioni</h2>

<table class="tabella">
<tr>
<?php
require_once 'processProduct.php';

$query = mysql_query("SELECT * FROM tbl_citazioni")or die(mysql_error());
    if (mysql_num_rows($query) > 0 ) {
       while($result = mysql_fetch_array($query)) {

       echo "<td>".$result['citazione']."</td><td>".$result['lingua']."</td><td><a href=\"javascript:deleteProduct( ".$result['id_citazione'].");\">Elimina</a></td></tr>";
    }

} else {
       echo "<td style=\"text-align:center\">Non ci sono citazioni presenti nel DataBase</td>";
}

?>
</tr>
</table>
 <hr />
<?php

echo addProduct();
?>
    <form action="processProduct.php?action=addProduct" method="post" enctype="multipart/form-data" >
       <table class="tabella">

         <tr>
            <td>Nuova Citazione</td>
            <td><input name="fleImage" type="file" size="50" class="box" /></td>
        </tr>
        <tr>
            <td>lingua</td><td><select name="lingua"><option value="it" selected="selected">Italiano</option>
                                                                       <option value="fr">Francese</option>
                                                                       <option value="en">Inglese</option>
                                        </select></td>
     </tr>
</table>
<p class="invio">
<input name="upload" type="submit" value="Aggiungi citazione"  class="pulsante">
</p>
</form>

?>

file2.php

<?php

require_once '../../library/config.php';
require_once '../library/functions.php';

checkUser();

$action = isset($_GET['action']) ? $_GET['action'] : '';

switch ($action) {

   case 'addProduct' :
      addProduct();
      break;
   case 'deleteProduct' :
      deleteProduct();
      break;
 default :
       // if action is not defined or unknown
      // move to main product page
      echo"<meta http-equiv=\"Refresh\" content=\"0;url=index.php\">";
}

function addProduct()
{

   
do {
      // controllo che il file non sia vuoto
   if( empty($_FILES['fleImage']['tmp_name'])) {
   $msg="<p>Non hai selezionato nessun file</p>";
break;
}

if (is_uploaded_file($_FILES['fleImage']['tmp_name'])) {
    // Controllo che il file non superi i 30 KB
    if ($_FILES['fleImage']['size'] > 30720) {
      $msg = "<p>Il file non deve superare i 30 KB!!</p>";
      break;
    }
    // Ottengo le informazioni sull'immagine
    list($width, $height, $type, $attr) = getimagesize($_FILES['fleImage']['tmp_name']);
    // Controllo che le dimensioni (in pixel) non superino il limite impostato
    if (($width > 400) || ($height > 260)) {
      $msg = "<p>Dimensioni non corrette!!</p>";
      break;
    }
    // Controllo che il file sia in uno dei formati GIF, JPG o PNG
    if (($type!=1) && ($type!=2) && ($type!=3)) {
      $msg = "<p>Attenzione: Il Formato dell'immagine non corretto!!<br /> Formati permessi: GIF, JPG o PNG</p>";
      break;
    }
    // Verifico che sul sul server non esista già un file con lo stesso nome
    // In alternativa potrei dare io un nome che sia funzione della data e dell'ora
    if (file_exists(SRV_ROOT .'admin/immagini/'.$_FILES['fleImage']['name'])) {
      $msg = "<p>File già esistente sul server. Rinominarlo e riprovare.</p>";
      break;
    }
    // Sposto il file nella cartella da me desiderata
    if (!move_uploaded_file($_FILES['fleImage']['tmp_name'], SRV_ROOT .'admin/immagini/'.$_FILES['fleImage']['name'])) {
      $msg = "<p>Errore nel caricamento dell'immagine!!</p>";
      break;
    }
  }
} while (false);

if(!isset($msg)){

   $citazione = $_FILES['fleImage']['name'];
   $lingua = $_POST['lingua'];

   $sql = "INSERT INTO tbl_citazioni ( citazione, lingua ) VALUES ( '$citazione', '$lingua' )";
      $result = dbQuery($sql)or die(mysql_error());

    echo"<meta http-equiv=\"Refresh\" content=\"0;url=index.php\">";


     } else {
         return $msg;
   }
 }

function deleteProduct()
{
   if (isset($_GET['productId']) && (int)$_GET['productId'] > 0) {
      $productId = (int)$_GET['productId'];
   } else {
      echo"<meta http-equiv=\"Refresh\" content=\"0;url=index.php\">";
   }

   // get the image name
   $sql = "SELECT citazione
           FROM tbl_citazioni
         WHERE id_citazione = $productId";

   $result = dbQuery($sql)or die(mysql_error());
   $row    = dbFetchAssoc($result);

   // remove the product image
   if ($row['citazione']) {
      unlink(SRV_ROOT .'admin/immagini/'. $row['citazione']);

   }

   // remove the product from database;
   $sql = "DELETE FROM tbl_citazioni
           WHERE id_citazione = $productId";
   dbQuery($sql)or die(mysql_error());

echo"<meta http-equiv=\"Refresh\" content=\"0;url=index.php\">";

}

?>
risposto 10 anni fa
iTek
iTek
1
X 0 X

in che ordine vengono caricati?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

in che senso?

file1.php viene caricato come default dentro index.php.

al submit, passo tutto al file2.php ( addProduct()o deleteProduct() )

risposto 10 anni fa
iTek
iTek
1
X 0 X

allora manca il codice di index.php?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

index.php

<?php

require_once '../../library/config.php';
require_once '../library/functions.php';

$_SESSION['login_return_url'] = $_SERVER['REQUEST_URI'];
checkUser();

$view = (isset($_GET['view']) && $_GET['view'] != '') ? $_GET['view'] : '';

switch ($view) {
   case 'list' :
      $content    = 'list.php';
      $pageTitle    = 'Shop Admin Control Panel - Lista Prodotti';
      break;

   case 'add' :
      $content    = 'add.php';
      $pageTitle    = 'Shop Admin Control Panel - Aggiungi Prodotto';
      break;


   default :
      $content    = 'list.php';
      $pageTitle    = 'Shop Admin Control Panel - Vedi Prodotto';
}




$script    = array('product.js');

require_once '../include/template.php';
?>

come vedi  quello switch è praticamente inutile lì, dato che carico sempre per default list.php ( che è il famoso file1.php ).

il fatto è che è usato più in altre parti del sito per altre sezioni, quindi ho fatto un copia/incolla e mantenuto "l'impronta" per comodità.... ::)

ma non credo che possa influenzare il resto creando quel problema..o sbaglio?

risposto 10 anni fa
iTek
iTek
1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda

Domande simili