Checkbox

Sassofonix

Nuovo Utente
6 Ago 2013
10
0
0
Buongiorno, il mio problema è il seguente: ho un file "registrati.php" dove è contenuto il form per al registrazione che ha come action un file di nome "registrazione.php", che include un file "newuser.class.php" dove è contenuta una classe (che viene instanziata nello script registrazione.php)... Ora in newuser.class.php inserisco l'utente, dove ogni utente può sbarrare le checkbox che indicano che in quel argomento sono preparati, con tutti i dovuti controlli si arriva al momento in cui devo memorizzare nella tabella "argument_signed" del database gli argomenti sottomessi dall'utente registrato in questo modo: "$Arguments = $_POST['argument'];" io so che in questo modo mi si dovrebbe restituire un array ma non è così perchè quando faccio subito dopo "echo count($Arguments);" commentando avviamente l' "header("Location: index.php");" così da visualizzare la pagina con il valore del count mi restituisce 1, infatti non entra nel ciclo for.... Vi posto il codice:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
        <title> 
            "Registrati" 
        </title> 
        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> 
        <meta name="generator" content="HAPedit 3.0"> 
        <style type="text/css"> 
            @import url("registrati.css"); 
            a#viewcss{color: #00f;font-weight: bold} 
        </style> 
    </head> 
    <body> 
        <div id="container"> 
            <div id="header"> 
                <h1>I answer</h1> 
            </div> 
            <div id="navigation"> 
                <ul> 
                    <li><a href="index.php">Home</a></li> 
                </ul> 
            </div> 
            <div id="content"> 
            <form action="registrazione.php" method="POST"> 
                <fieldset> 
                    <legend>Dati anagrafici</legend> 
                        <label>Username: <input name="Username" type="text"></label><br/> 
                        <label>Nome: <input name="Nome" type="text"></label><br/> 
                        <label>Cognome: <input name="Cognome" type="text"></label><br/> 
                        <label>Sesso: M <input type="radio" name="Sesso" value="M"/> 
                                      F <input type="radio" name="Sesso" value="F" checked="yes"/><br/> 
                        </label> 
                        <label>Data di Nascita: <input name="Datadinascita" type="date"></label><br/> 
                        <label>Luogo di Nascita: <input name="Luogodinascita" type="text"></label><br/> 
                        <label>Luogo di Residenza: <input name="Luogodiresidenza" type="text"></label><br/> 
                        <label>Provincia di Residenza: <input name="Provinciadiresidenza" type="text"></label><br/> 
                        <label>Indirizzo: <input name="Indirizzo" type="text"></label><br/> 
                        <label>Numero civico: <input name="Numerocivico" type="text"></label><br/> 
                        <label>CAP: <input name="CAP" type="text"></label><br/> 
                        <label>Indirizzo email: <input name="Email" type="text"></label><br/> 
                        <label>Conferma email: <input name="Confermaemail" type="text"></label><br/> 
                        <label>Password: <input name="Password" type="text"></label><br/> 
                        <label>Conferma Password: <input name="Confermapassword" type="text"></label>     
                </fieldset> 
                <fieldset> 
                    <legend>Argomenti sottomessi</legend> 
                        <input type="checkbox" name="argument[]" value="html"/> HTML  
                        <input type="checkbox" name="argument[]" value="css"/> CSS  
                        <input type="checkbox" name="argument[]" value="javascript"/> JavaScript  
                        <input type="checkbox" name="argument[]" value="java"/> Java  
                        <input type="checkbox" name="argument[]" value="sql"/> SQL                         
                        <input type="checkbox" name="argument[]" value="jquery"/> JQuery                          
                        <input type="checkbox" name="argument[]" value="perl"/> Perl  
                        <input type="checkbox" name="argument[]" value="ruby"/> Ruby                          
                        <input type="checkbox" name="argument[]" value="c++"/> C++                          
                        <input type="checkbox" name="argument[]" value="c"/> C <br/>                          
                        <input type="checkbox" name="argument[]" value="analisi1"/> Analisi Matematica 1                          
                        <input type="checkbox" name="argument[]" value="analisi2"/> Analisi Matematica 2                          
                        <input type="checkbox" name="argument[]" value="programmazione"/> Programmazione  
                </fieldset> 
                <input name="submit" type="submit" value="Registrati">     
            </form> 
            <?php 
                include 'error_definition.php'; 
            ?> 
            </div> 
            <div id="footer">© 2013-Sito di Michele Bellocchi</div> 
        </div> 
    </body> 
</html>

PHP:
<?php 

    include "newuser.class.php"; 
      
    $newuser = new NewUser(); 
    $newuser->AddUser(); 
      
    echo "inserimento avvenuto<br>Un email é stato inviato per confermare l'attivazione del tuo account"; 
  
?>

PHP:
<?php 
    class NewUser{ 
         
            private $db; 
             
            public function NewUser(){ 
                include "funzioni_mysql.php"; 
                 
                $this->db = new MysqlClass(); 
            } 
             
            public function AddUser(){ 
                $this->ErrorReport(); 
            } 
             
            protected function IsEmptyUsername(){ 
                if(empty($_POST['Username'])){ 
                    return TRUE; 
                }else{ 
                    return FALSE; 
                } 
            } 
                 
            protected function IsEmptyEmail(){ 
                if(empty($_POST['Email']) OR empty($_POST['Confermaemail'])){ 
                    return true; 
                }else{ 
                    return false; 
                } 
            } 
             
            protected function IsEmptyPassword(){  
                if(empty($_POST['Password']) OR empty($_POST['Confermapassword'])){ 
                    return TRUE; 
                }else{ 
                    return FALSE; 
                } 
            } 
             
            protected function VerifyPassword(){ 
                if($_POST['Password'] == $_POST['Confermapassword']){ 
                    return TRUE; 
                }else{ 
                    return FALSE; 
                } 
            } 
             
            protected function UsernameExists(){ 
                $this->db->connetti(); 
                $sql = "SELECT * FROM users WHERE Username=".$_POST['Username']; 
                 
                $res = $this->db->query($sql); 
                if($res && $row = mysql_fetch_array($res)){ 
                    $this->db->disconnetti(); 
                    return TRUE; 
                }else{ 
                    $this->db->disconnetti(); 
                    return FALSE; 
                } 
            } 
             
            protected function EmailExists(){ 
                $this->db->connetti(); 
                $sql = "SELECT * FROM users WHERE Email=".$_POST['Email']; 
                 
                $res = $this->db->query($sql); 
                if($row = mysql_fetch_array($res)){ 
                    $this->db->disconnetti(); 
                    return TRUE; 
                }else{ 
                    $this->db->disconnetti(); 
                    return FALSE; 
                } 
            } 
             
            protected function VerifyEmail(){ 
                $pattern = "^([a-zA-Z0-9])+([a-zA-Z0-9]+[-_.]?)*([a-zA-Z0-9])+(@)([a-zA-Z0-9])+([a-zA-Z0-9]+[-_.]?)*([a-zA-Z0-9])+(.[a-z]{2,4})$"; 
                 
                if(ereg($pattern,$_POST['Email'])){ 
                    return TRUE; 
                }else{ 
                    return FALSE; 
                } 
            } 
             
            public function ErrorResult($num){ 
                header("Location: form.php?alert=" . $num); 
                die; 
            } 
             
            protected function ErrorReport(){ 
             
                if($this->IsEmptyUsername()){ 
                    $this->ErrorResult(1); 
                } 
                 
                if($this->IsEmptyEmail()){ 
                    $this->ErrorResult(2); 
                } 
                 
                if($this->IsEmptyPassword()){ 
                    $this->ErrorResult(3); 
                } 
                 
                if(!$this->VerifyPassword()){ 
                    $this->ErrorResult(4); 
                } 
              
                if($this->UsernameExists()){ 
                    $this->ErrorResult(5); 
                } 
              
                if($this->EmailExists()){ 
                    $this->ErrorResult(6); 
                } 
                 
                if(!$this->VerifyEmail()){ 
                    $this->ErrorResult(7); 
                } 
              
                $this->InsertNewUser(); 
            } 
             
            protected function GetKey(){ 
                $car = "aAbBcCdDeEfFgGhHiIlLjJkKmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789"; 
                $dim = 40; 
                srand((double)microtime()*1000000); 
                $string = ''; 
                    for($inc=0; $inc<$dim; $inc++){ 
                        $rand = rand(0, strlen($car)-1); 
                        $scar = substr($car,$rand,1); 
                        $string = $string . $scar; 
                    } 
                return $string;  
            } 
             
            protected function SendUSerMail($key){ 
                $content = "Benvenuto $_POST[Username],\r\n"; 
                $content .= "per confermare la tua iscrizione devi cliccare sul seguente link:\r\n\r\n"; 
                $content .= "http://127.0.0.1/projects/Progetto%20Database/verify_user.php?key=" . $key; 
                 
                mail($_POST['Email'], "Iscrizione al sito...", $content, "From: [email protected]>"); 
                 
                return; 
            } 
             
            protected function InsertNewUser(){ 
                $password = md5($_POST['Password']); 
                $key_control = $this->GetKey(); 
                 
                #Memorizzo i valori da inserire per l'utente 
                $Username = addslashes($_POST['Username']); 
                $Nome = addslashes($_POST['Nome']); 
                $Cognome = addslashes($_POST['Cognome']); 
                $Sesso = addslashes($_POST['Sesso']); 
                $Datadinascita = addslashes($_POST['Datadinascita']); 
                $Luogodinascita = addslashes($_POST['Luogodinascita']); 
                $Luogodiresidenza = addslashes($_POST['Luogodiresidenza']); 
                $Provinciadiresidenza = addslashes($_POST['Provinciadiresidenza']); 
                $Indirizzo = addslashes($_POST['Indirizzo']); 
                $Numerocivico = addslashes($_POST['Numerocivico']); 
                $CAP = addslashes($_POST['CAP']); 
                $Email = addslashes($_POST['Email']); 
                $Password = addslashes($password); 
                $Affidabilità = addslashes(0); 
                     
                $t = "`users`"; # nome della tabella 
                $v = array ("NULL",$Username,$Nome,$Cognome,$Sesso,$Datadinascita,$Luogodinascita,$Luogodiresidenza,$Provinciadiresidenza, 
                            $Indirizzo,$Numerocivico,$CAP,$Email,$Password,$Affidabilità,$key_control); # valori da inserire 
                $r =  "`id`,`Username`,`Nome`,`Cognome`,`Sesso`,`Data di nascita`,`Luogo di nascita`,`Luogo di residenza`,`Provincia di residenza`,`Indirizzo`,`Numero civico`, 
                    `CAP`,`Indirizzo email`,`Password`,`Affidabilità`,`key_control`"; # campi da popolare     
                 
                $this->db->connetti(); 
                $this->db->inserisci($t,$v,$r); 
                 
                //Inserisco gli argomenti 
                $Arguments = $_POST['argument']; 
                 
                for($inc=1;$inc<count($Arguments);$inc++){ 
                    $subcheck = (isset($Arguments[$inc])) ? 1 : 0; 
                    if($subcheck==1 ){ 
                        if($row = mysql_fetch_array($res)){ 
                            $id_user = $row[id]; 
                            $t = "`argument signed`"; # nome della tabella 
                            $v = array ($id_user,$inc); # valori da inserire 
                            $r =  "`id_user`,`id_arguments`"; 
                            $db->inserisci($t,$v,$r); 
                            echo 'Argomento inserito'; 
                        }else{ 
                            echo 'Non è stato possibile inserire l'argomento'; 
                        } 
                    } 
                } 
                 
                $this->db->disconnetti(); 
                $this->SendUserMail($key_control); 
                header("Location: index.php"); 
            } 
             
            public function VerifyUser(){ 
                $sql = "SELECT id FROM users WHERE key_control='$_GET[key]'"; 
                $this->db->connetti(); 
                $res = $this->db->query($sql); 
              
                if($row = mysql_fetch_array($res)){ 
                    $query = "UPDATE users SET ver=1,key_control='0' WHERE id=".$row[id]; 
                    $this->db->query($query);; 
                    $this->db->disconnetti(); 
                    echo "Il tuo account è ora attivato!"; 
                }else{ 
                    echo "Impossibile verificare l'account!"; 
                } 
            } 
        } 
?>
 
ciao
ho fatto una prova e dovrebbe darti l'array
PHP:
<?php
if(isset($_POST['submit'])){
	echo "<pre>";
	var_dump($_POST['argument']);
	echo "</pre>";
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
	<fieldset> 
    <legend>Argomenti sottomessi</legend> 
    	<input type="checkbox" name="argument[]" value="html"/> HTML  
        <input type="checkbox" name="argument[]" value="css"/> CSS  
        <input type="checkbox" name="argument[]" value="javascript"/> JavaScript  
        <input type="checkbox" name="argument[]" value="java"/> Java  
        <input type="checkbox" name="argument[]" value="sql"/> SQL                         
        <input type="checkbox" name="argument[]" value="jquery"/> JQuery                          
        <input type="checkbox" name="argument[]" value="perl"/> Perl  
        <input type="checkbox" name="argument[]" value="ruby"/> Ruby                          
        <input type="checkbox" name="argument[]" value="c++"/> C++                          
        <input type="checkbox" name="argument[]" value="c"/> C <br/>                          
        <input type="checkbox" name="argument[]" value="analisi1"/> Analisi Matematica 1                          
        <input type="checkbox" name="argument[]" value="analisi2"/> Analisi Matematica 2                          
        <input type="checkbox" name="argument[]" value="programmazione"/> Programmazione  
     </fieldset> 
     <input name="submit" type="submit" value="Registrati">     
</form>
output
array(3) {
[0]=>
string(4) "html"
[1]=>
string(3) "css"
[2]=>
string(8) "analisi2"
}

p.s.
non so se è quello, ma in una riga della classe hai
PHP:
echo 'Non è stato possibile inserire l'argomento';
correggi in
PHP:
echo 'Non è stato possibile inserire l\'argomento';
o, meglio, usa i doppi apici
PHP:
echo "Non è stato possibile inserire l'argomento";
ho visto quella, ma verifica di non averne altre
 
Ho modificato il ciclo for nel file newuser.class.php così:
PHP:
for($inc=1;$inc<count($Arguments);$inc++){
					$sql = "SELECT id FROM Arguments WHERE Argomento = ".'"'.$Arguments[$inc].'"';
					$res  = $db->query($sql);
					if($row = mysql_fetch_array($res)){
						$id_user = $row[id];
						$t = "`argument signed`"; # nome della tabella
						$v = array ($id_user,$inc); # valori da inserire
						$r =  "`id_user`,`id_arguments`";
						$db->inserisci($t,$v,$r);
						echo 'Argomento inserito';
					}else{
						echo 'Non è stato possibile inserire l\'argomento';
					}
				}

La query eseguita su myPHPAdmin funziona, lì no.... Qui c'è la classe con le funzioni che uso per parlare con il database:
PHP:
<?php

class MysqlClass{
    // variabili per la connessione al database
	
	public $connessione;
	
    // controllo sulle connessioni attive
	public $attiva = false;

    // funzione per la connessione a MySQL
    public function connetti(){
	
		include "db_config.php";
		
        if(!$this->attiva){
			$this->connessione = mysqli_connect($nomehost,$nomeuser,$password,$nomedb);
		}
		if (mysqli_connect_errno($this->connessione)) {
		   // notifica in caso di errore
			echo "Errore in connessione al DBMS: ".mysqli_connect_error();
		   // interruzione delle esecuzioni i caso di errore
			exit();
		} else {
			// notifica in caso di connessione attiva
			$this->attiva = true;
			echo "Connessione avvenuta con successo <br/>"; 
		}
    }

	//funzione per l'esecuzione delle query 
	public function query($sql){
	
		if(isset($this->attiva)){
		
		  $sql = mysqli_query($this->connessione,$sql);
		  return $sql; 
		}else{
		  return false; 
		}
	}
	 
	//funzione per l'inserimento dei dati in tabella
	public function inserisci($t,$v,$r = null){
	
		if(isset($this->attiva)){
		
			// chiamata alla funzione per l’inserimento dei dati
			$istruzione = 'INSERT INTO `i answer`.'.$t;
			
			if($r != null){
				$istruzione .= ' ('.$r.')';
			}

			for($i = 1; $i < count($v); $i++){
				if(is_string($v[$i]))
					$v[$i] = '\''.$v[$i].'\'';
			}
			
			$v = implode(',',$v);
			$istruzione .= ' VALUES ('.$v.')';

			$query = mysqli_query($this->connessione,$istruzione);
			
		}else{
			return false;
		}
	}
	
	//funzione per l'estrazione dei record 
	public function estrai($risultato){
	
	    if(isset($this->attiva)){
	  
		  $r = mysqli_fetch_object($risultato);
		  return $r;
		  
	    }else{
			return false; 
		}
	}
	 
	// funzione per la formattazione della data
	public function format_data($d){
	
	  $vet = explode("-", $d); 
	  $df = $vet[2]."-".$vet[1]."-".$vet[0]; 
	  
	  return $df; 
	}
	 
	// funzione per l'anteprima degli articoli
	public function preview($post, $offset, $collegamento) {
	 return (count($anteprima = explode(" ", $post)) > $offset) ? implode(" ", array_slice($anteprima, 0, $offset)) . $collegamento : $post;
	}

	// funzione per il conteggio dei commenti
	public function conta_commenti($id_c, $tbl, $campo, $id_post,$enum, $valore_enum){
	
		if(isset($this->attiva)){
	  
			$query_n_com = mysql_query("SELECT COUNT($id_c) AS n_commenti from $tbl WHERE $campo = $id_post AND $enum = '$valore_enum'") or die (mysql_error());
			$obj_n_com = mysql_fetch_object($query_n_com) or die (mysql_error());
			
		    return $obj_n_com->n_commenti;
			
		}else{
			return false; 
		}
	}

	// funzione per la chiusura della connessione
	public function disconnetti(){
	
		if($this->attiva){
		
			if(mysqli_close($this->connessione)){
			
				$this->attiva = false; 
			 
				return true; 
			 
			}else{
				return false; 
			}
		}
	}
}

?>
 
ciao
intanto correggi la querystringa
PHP:
<?php
//....
for($inc=1;$inc<count($Arguments);$inc++){
	$sql = "SELECT id FROM Arguments WHERE Argomento = '".$Arguments[$inc]."'";
	//...
?>
 
ciao
mi sto accorgendo adesso, hai gli apici strani (i batick) toglili.
poi controllali tutti e ti consiglio per racchiudere le stringe di usare i doppi apici
 
Ok fatto cambiato, la query me la sono stampata con un echo e mi dà questo
Codice:
SELECT id FROM Arguments WHERE Argomento = 'java'

L'ho anche eseguita su PHPmyadmin è funziona... ma con
PHP:
$res = $this->db->query($sql);
					$row = mysql_fetch_array($res);
					echo "<br/>"."id:".$row[id]."<br/>".$sql;

E mi stampa:
Codice:
id:
SELECT id FROM Arguments WHERE Argomento = 'java'

Quando in PHPmyadmin mi trova il giusto id.... Sto impazzendo :( :crying:
 

Discussioni simili