Caratteri speciali INSERT INTO

di il
8 risposte

Caratteri speciali INSERT INTO

Ciao, ho cercato e provato in vari modi ma nulla da fare. Avrei bisogno di aver la possibilità di scrivere i caratteri speciali nel campo "Descrizione". Qualche aiuto?

$descrizione = $_POST['descrizione'];

$sql2 = "INSERT INTO rifiuto(descrizione) VALUES('$descrizione')"; 
Il collegamento al DB ecc... è già tutto fatto

Grazie mille

8 Risposte

  • Re: Caratteri speciali INSERT INTO

    Nel 2022 fa un po' specie vedere ancora codice come quello... SQL Injection dovrebbe essere nelle corde di chiunque voglia interfacciarsi ad un DB.

    Andiamo per passi.

    1) Quando ci si interfaccia ad un DB si usa un layer di astrazione che si occupi di tutto quello che è "il contorno" (comunicazione diretta col driver, conversioni tra tipi di dato, normalizzazione dei dati, ecc)

    2) Comincia da qui: https://www.php.net/manual/en/book.pdo.ph (è solo uno degli abstraction layer disponibili)

    3) Tramite la libreria PDO, costruisci uno statement, dove i valori dei campi sono sostituiti da dei segnaposto (il punto di domanda o un nome nel caso dei named parameters) che rappresentano i parametri della query

    4) A ciascun segnaposto si assegna un valore al momento dell'esecuzione della query.

    Un esempio al volo:
    
    $db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    $stmt = $db->prepare("INSERT INTO rifiuto(descrizione) VALUES(?)");
    $stmt->execute(array($_POST['descrizione']));
    
  • Re: Caratteri speciali INSERT INTO

    Ok perfetto, gli do un'occhiata.
    Intanto grazie!!
  • Re: Caratteri speciali INSERT INTO

    Ok, scusa il ritardo. Allora così con il campo “descrizione” va. Per inserire tutti gli altri campi, come posso fare?

    In tutto sarebbe, 1 database con 3 tabelle.

    <form class="form" action="DBconn.php" method="post">	  
    
    					<label>Nome*</label><br><input type="text" name="nome" required placeholder="Nome"><br><br>
    
    					<label>Cognome*</label><br><input type="text" name="cognome" required placeholder="Cognome"><br><br>
    
    					<label>Telefono/Cellulare*</label><br> <input type="text" name="numero" required placeholder="Telefono/Cellulare"><br><hr>
    
    			</div>
    
    			<div class="col-md"><label>LUOGO RIFIUTO</label><hr>	
    
      					<label for="provincia" >Seleziona provincia</label> <br>
    
    					  <select name="provincia_rifiuto" id="provincia" required onchange="cittaChange(this);">
    
    						<option value="">Seleziona provincia</option>
    
    						<option value="Padova">Padova</option>
    
    						<option value="Treviso">Treviso</option>
    
    						<option value="Vicenza">Vicenza</option>
    
    					  </select> <br><br>
    
    					  <label for="citta">Seleziona Paese</label><br>
    
    						  <select name="nome_citta" id="citta" required>
    
    							<option value="">Seleziona Paese</option>
    
    						  </select> <br><br>
    
    					<label>Via/Viale/Piazza</label><br><input type="text" name="via" placeholder="Più vicina"><br><br>
    
    					<label>Numero</label><br><input type="text" name="numero_casa" placeholder="Numero più vicino"><br><hr>
    
    			</div>			
    
    			<div class="col-md"><label>INFO RIFIUTO</label>
    
    				<hr>
    
    					<label>Tipo*</label><br><input type="text" name="tipo_rifiuto" required placeholder="Plastica/Carta..."><br><br>
    
    					<label>Descrizione</label><br><textarea class="textarea" type="text" name="descrizione" placeholder="Es. Sacco di plastica, lato destro della strada"></textarea><br><br>
    
    					<label>Grandezza</label><br><input type="text" name="grandezza" placeholder="Medio"><br><hr>
    
    			</div>
    
    		</div>
    
    	</div><br>
    
    
    	<div>
    
    		<input type="submit" value="Invia segnalazione">
    
    	</div>
    
    </form>
    

    Grazie mille, basta la spiegazione anche solo per la tabella “rifiuto” che poi dovrei capirmi. Almeno che non ci siano cose troppo complicate

  • Re: Caratteri speciali INSERT INTO

    Non ho capito il dubbio.

    Inserirai nella query un punto di domanda per ciascun segnaposto e poi ciascun segnaposto andrà valorizzato nella execute() con il corrispondente valore da inserire.

    $db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    $stmt = $db->prepare("INSERT INTO tabella(nome, cognome, eta) VALUES(?, ?, ?)");
    $stmt->execute(array($_POST['nome'], $_POST['cognome'], $_POST['eta']));
  • Re: Caratteri speciali INSERT INTO

    Ok, così è coretto? 

    $stmt = $pdoConnect->prepare("INSERT INTO utenti (nome, cognome, numero) VALUES(?, ?, ?)");
    	"INSERT INTO citta (provincia, citta, via, casa) VALUES (?, ?, ?, ?)";
    	"INSERT INTO rifiuto (rifiuto, descrizione, grandezza) VALUES (?, ?, ?)";
    
    	$stmt->execute(array($_POST['nome'], $_POST['cognome'], $_POST['numero'], $_POST['provincia'], $_POST['citta'], $_POST['via'], $_POST['casa'], $_POST['rifiuto'], $_POST['descrizione'], $_POST['grandezza']));
  • Re: Caratteri speciali INSERT INTO

    Mah, così, ad occhio e croce, direi di no.

    La seconda e la terza riga non sono delle istruzioni, ma delle banali stringhe buttate lì nel sorgente.

    L'istruzione execute alla fine tenta di eseguire una statement passando un numero spropositato di parametri (l'oggetto $stmt iniziale è stato costuito con 3 parametri… ne devi passare solo 3).

    Se vuoi inserire dati su 3 diverse tabelle avrai bisogno di 3 diverse statement con 3 diverse esecuzioni ciascuna con i suoi parametri.

    $stmt1 = $pdoConnect->prepare("INSERT INTO tabella1 ...");
    $stmt2 = $pdoConnect->prepare("INSERT INTO tabella2 ...");
    $stmt3 = $pdoConnect->prepare("INSERT INTO tabella3 ...");
    
    $stmt1->execute(array(parametri per la prima tabella...));
    $stmt2->execute(array(parametri per la seconda tabella...));
    $stmt3->execute(array(parametri per la terza tabella...));
  • Re: Caratteri speciali INSERT INTO

    Ok, grazie mille. Appena posso provo.

  • Re: Caratteri speciali INSERT INTO

    Ok risolto come mi hai spiegato. Veramente veramente grazie!!

Devi accedere o registrarti per scrivere nel forum
8 risposte