funzione di controllo e inserimento dati

ciao ragazzi,

come posso riscrivere questa funzione per renderla + pulita e leggibile,

funziona tutto ma vorrei imparare a scrivere meglio il codice...

function ProcessForm($values){
                       
$con = mysql_connect("localhost","lory","lory");
   if (!$con) {
     die('Could not connect: ' . mysql_error());
    }
               
    mysql_select_db("quased", $con);
                     
    $sql = "SELECT * FROM cliente WHERE piva='$values[piva]'"; {
            
       $res = mysql_query($sql, $con);
          if($row = mysql_fetch_array($res)){
      echo "Attenzione azienda inserita esistente";
     }else{
      $sql="INSERT INTO cliente (codcliente, piva) VALUES ('22','$values[piva]')";
               
                 if (!mysql_query($sql,$con)) {
         die('Error: ' . mysql_error());
         }else {
           echo "<html><head><title>Thank you!</title></head><body>Thank you!</body></html>";
           echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"5\"; URL=\"clienti.php\">";
          }

   mysql_close($con);
        }
    }
}

grz, Lory

inviato 5 anni fa
lorymacri
X 0 X

Mah, dipende cosa vuoi ottenere. Io eviterei di fare degli echo adesso, piuttosto farei in modo che la funzioni mi ritorni qualcosa.

<?php
function ProcessForm($values){
                       
$con = mysql_connect("localhost","lory","lory");
   if (!$con) {
     $error = 'Could not connect: ' . mysql_error());
     // Ma potresti ritornare una semplice variabile booleana, per cui un false
     return $error;
    }
               
    mysql_select_db("quased", $con);
                     
    $sql = "SELECT * FROM cliente WHERE piva='$values[piva]'"; {
            
       $res = mysql_query($sql, $con);
          if($row = mysql_fetch_array($res)){
      $return = "Attenzione azienda inserita esistente";
     }else{
      $sql="INSERT INTO cliente (codcliente, piva) VALUES ('22','$values[piva]')";
               
                 if (!mysql_query($sql,$con)) {
         $errore = 'Error: ' . mysql_error();
                        return $errore
         }else {
           $return .= "<html><head><title>Thank you!</title></head><body>Thank you!</body></html>";
           $return .= "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"5\"; URL=\"clienti.php\">";
          }

   mysql_close($con);
        }
    }
    return $return;
}

Un'altra cosa bella che potresti fare, per ritornare gli errori è l'uso delle eccezioni con il php :)

Ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Ciao MarioS,

grazie per le tue correzioni, ho provato il codice ma funziona in parte. Non mi ritorna la variabile $return, ho provato a spostarla ma nulla... fa l'insert ma poi da pagina bianca...

lory

risposto 5 anni fa
lorymacri
X 0 X

Manca l'inizializzazione probabilmente.

Ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

ma quella parentesi graffa dopo la query $sql="INSERT INTO ... cosa rappresenta?

risposto 5 anni fa
civre
X 0 X

volendo essere pignoli sullo stile io la scriverei così:

<?php
function ProcessForm($values)
{
    $con = mysql_connect("localhost","lory","lory");
    if (!$con) {
        $error = 'Could not connect: ' . mysql_error();
        // Ma potresti ritornare una semplice variabile booleana, per cui un false
        return $error;
    }
               
    mysql_select_db("quased", $con);                     
    $sql = "SELECT * FROM cliente WHERE piva='$values[piva]'";             
    $res = mysql_query($sql, $con);
    
    if($row = mysql_fetch_array($res)) {
        $return = "Attenzione azienda inserita esistente";
    } else {
        $sql="INSERT INTO cliente (codcliente, piva) VALUES ('22','$values[piva]')";            
        if (!mysql_query($sql,$con)) {
            $errore = 'Error: ' . mysql_error();
            return $errore;
        } else {
            $return .= "<html><head><title>Thank you!</title></head><body>Thank you!</body></html>";
            $return .= "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"5\"; URL=\"clienti.php\">";
        }     
   mysql_close($con);
    }
    return $return;
}
risposto 5 anni fa
civre
X 0 X

ciao Civre si funziona solo che non stampa la risposta, MarioS diceva che manca l'inizializzazione di $return. ma non va lo stesso...

risposto 5 anni fa
lorymacri
X 0 X

ho messo $return = false;

ma probabilmente sbaglio io...

risposto 5 anni fa
lorymacri
X 0 X

ma la stampa di $return l'hai messa da qualche parte?

risposto 5 anni fa
civre
X 0 X

si, ti riporto la funzione con le aggiunte

function ProcessForm($values)
{
    $con = mysql_connect("localhost","lory","lory");
    if (!$con) {
        $error = 'Could not connect: ' . mysql_error();
        // Ma potresti ritornare una semplice variabile booleana, per cui un false
        return $error;
    }
               
    mysql_select_db("quased", $con);                     
    $sql = "SELECT * FROM cliente WHERE piva='$values[piva]'";             
    $res = mysql_query($sql, $con);
    
    $return = false;
    
    if($row = mysql_fetch_array($res)) {
        $return = "Attenzione azienda inserita esistente";
    } else {
        $sql="INSERT INTO cliente (codcliente, piva) VALUES ('22','$values[piva]')";            
        if (!mysql_query($sql,$con)) {
            $errore = 'Error: ' . mysql_error();
            return $errore;
        } else {
            $return .= "<html><head><title>Thank you!</title></head><body>Thank you!</body></html>";
            $return .= "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"5\"; URL=\"clienti.php\">";
        }     
   mysql_close($con);
    }
    return $return;
    echo $return;
}
risposto 5 anni fa
lorymacri
X 0 X

no, la stampa va fatta dove richiami la funzione

es.

echo ProcessForm($values);

opprure

$ret = ProcessForm($values);
echo $ret;
risposto 5 anni fa
civre
X 0 X

Ciao Civre,

ho messo la stampa alla fine, funziona ma sono nati due problemi:

1) mi fa l'insert anche se faccio il refresh della pagina

2) mi riporta sempre la chiamata "Attenzione azienda inserita esistente" e non so il perchè..

sbaglio punto di chiamata della funzione forse?

mysql_close($con);
    }
    return $return;
   
}echo ProcessForm($values);

grz, Lory

risposto 5 anni fa
lorymacri
X 0 X

Lo devi fare alla chiamata della tua funzione, Non dopo aver scritto la tua funzione. Un po' di attenzione dai...

risposto 5 anni fa
Mario Santagiuliana
X 0 X

scusa era solo per indicare...., ho sbagliato io m anon va lo stesso...

ho provato anche cosi nel punto dove mi serve:

if(isset($_POST['ProcessForm']))
         
$ret = ProcessForm($values);
echo $ret;      

ma nulla... il comportamento persiste... :o

risposto 5 anni fa
lorymacri
X 0 X

Prova una cosa simile:

function ProcessForm($values)
{
   $result = '';

Ed il resto della funzione.

Non può non ritornare nessun risultato.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda