JavascriptProva

domenica 27 maggio 2018

Esercizi con l'Ajax.

Esercizio di corretta scrittura di una XMLHttpRequest.
<!DOCTYPE html>
<html>
    <script>
        function funzione(){
            var xhttp=new XMLHttpRequest();
            xhttp.onreadystatechange=function(){
                if(this.readyState==4 && this.status == 200){
                    document.getElementById("testo").innerHTML=this.responseText;
                }
            };
            xhttp.open("GET","testo.txt",true);
            xhttp.send();
        }
        
        
    </script>
    <body>
        <div id="testo"></div>
        <input type="button" value="cambia testo" onClick="funzione()">
    </body>
</html> 
Eccolo funzionante! Però avevo commesso un errore nel punto evidenziato in rosso: invece che onreadystatechange avevo scritto onreadystatuschange.

martedì 8 maggio 2018

Istruzioni preparate per il database MySqli in php.

Che cosa sono questi "comandi preparati" per il database in SQL?
Se io ho inserito i nomi dei sette nani con questa sintassi
$sql="INSERT INTO SetteNani(nome) VALUES('Pisolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Brontolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Cucciolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Eolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Dotto');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Gongolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Mammolo')";

if($conn->multi_query($sql)===TRUE){
    echo "Tabella compilata";
}else{
    echo "Compilazione non effettuata";
}
posso farlo anche con un solo comando in cui cambio i parametri. Questo è quanto sono riuscito finora a capire.
Ecco, si fa proprio con la sintassi $conn->prepare. E poi con bind_param.

Proviamo un po'...

<?php

$servername = "localhost";
$username = "XXXX";
$password = "XXXX";
$database = "id3147737_questodatabase";

$conn=new mysqli($servername, $username, $password,$database);

if($conn->connect_error){
    die("Connessione non riuscita ".$conn->connect_error);
}
echo "Connessione riuscita
"; $stmt=$conn->prepare("INSERT INTO SetteNani(nome) VALUES(?)"); $stmt->bind_param("s",$nome); $nome="Brontolo"; $stmt->execute(); $nome="Pisolo"; $stmt->execute(); $conn->close(); ?>
Sì, ha funzionato!
Ci aggiungo gli altri:
$stmt=$conn->prepare("INSERT INTO SetteNani(nome) VALUES(?)");
$stmt->bind_param("s",$nomedelnano);

$nomedelnano="Cucciolo";
$stmt->execute();

$nomedelnano="Eolo";
$stmt->execute();

$nomedelnano="Dotto";
$stmt->execute();

$nomedelnano="Mammolo";
$stmt->execute();

$nomedelnano="Gongolo";
$stmt->execute();
Vediamo...

Perfetto!!!

lunedì 7 maggio 2018

Esercizio con la compilazione di una tabella di database MySqli

Ora mi esercito a ottenere l'ultimo ID.
Con questa scusa mi ricostruisco tutto il codice...

<?php

$servername = "localhost";
$username = "XXXX";
$password = "XXXX";
$database = "id3147737_questodatabase";

$conn=new mysqli($servername, $username, $password,$database);

if($conn->connect_error){
    die("Connessione non riuscita ".$conn->connect_error);
}
echo "Connessione riuscita";


$sql="INSERT INTO Tabella(nome,cognome) VALUES('Ciccio','Formaggio')";

$conn->query($sql);
$last_id = $conn->insert_id;
echo $last_id

?>
E ottengo infatti:
Connessione riuscita9

L'inserimento multiplo l'ho capito, credo, abbastanza bene. Basta sostituire al metodo $conn->query il metodo $conn->multi_query.

Non era così semplice: bisogna porre molta attenzione a questa struttura dei dati da immettere (la tabella creata si chiamava SetteNani.
$sql="INSERT INTO SetteNani(nome) VALUES('Pisolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Brontolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Gongolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Mammolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Eolo');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Dotto');";
$sql.="INSERT INTO SetteNani(nome) VALUES('Cucciolo')";
laddove è necessario il punto dopo il nome della variabile dal secondo record in poi e un punto e virgola accessorio tranne che nell'ultimo record da inserire. Inoltre il nome della tabella è case sensitive, e scrivere Settenani invece che SetteNani è stato un'altra fonte di errore.
Ecco il codice completo per la creazione di una tabella e la sua compilazione: lo riscrivo ancora una volta:
<?php

$servername = "localhost";
$username = "XXXX";
$password = "XXXX";
$database = "id3147737_questodatabase";

$conn=new mysqli($servername, $username, $password,$database);

if($conn->connect_error){
    die("Connessione non riuscita ".$conn->connect_error);
}
echo "Connessione riuscita
"; $sql="CREATE TABLE SetteNani( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(30) )"; if($conn->query($sql)===TRUE){ echo "Tabella creata"; }else{ echo "Tabella non creata"; } $sql="INSERT INTO SetteNani(nome) VALUES('Pisolo');"; $sql.="INSERT INTO SetteNani(nome) VALUES('Brontolo');"; $sql.="INSERT INTO SetteNani(nome) VALUES('Cucciolo');"; $sql.="INSERT INTO SetteNani(nome) VALUES('Eolo');"; $sql.="INSERT INTO SetteNani(nome) VALUES('Dotto');"; $sql.="INSERT INTO SetteNani(nome) VALUES('Gongolo');"; $sql.="INSERT INTO SetteNani(nome) VALUES('Mammolo')"; if($conn->multi_query($sql)===TRUE){ echo "Tabella compilata"; }else{ echo "Compilazione non effettuata"; } $conn->close(); ?>
E vediamo...

Connessione riuscita
Tabella creataTabella compilata
Ciò che appare sul documento è incoraggiante.
E infatti poi vado a vedere la tabella di database e vedo che i sette nani sono lì tutti al loro posto!

Esercizio sulla connessione e creazione di tabelle in MySqli con php

Ora mi devo esercitare a scrivere il codice in php per la connessione al database del server.

<?php

$servername = "localhost";
$username = "XXXX";
$password = "XXXX";
$database = "id3147737_questodatabase";

// Create connection
$conn = new mysqli($servername, $username, $password, $database);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

$sql="CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";

if ($conn->query($sql) === TRUE) {
    echo "Table MyGuests created successfully";
} else {
    echo "Error creating table: " . $conn->error;
}

$conn->close();
?>
Fatto il salvataggio, cancello tutto e ricomincio.

Riscrivo soltanto fino alla creazione della connessione, al momento in modo molto guidato e sbirciando abbondantemente:
<?php

$servername = "localhost";
$username = "XXXX";
$password = "XXXX";
$database = "id3147737_questodatabase";

$conn=new mysqli($servername,$username,$password,$database);

?>
Non ho ottenuto messaggi di errore, quindi la connessione si è sicuramente creata bene.
Per essere sicuro devo inserire il codice che verifica la connessione.
Il codice va messo prima di "Connessione creata con successo".
La proprietà connect_error della connessione viene saggiata, ossia se esiste $conn->connect_error, allora la connessione "muore" (die?) e si mostra a video "Connessione non riuscita più l'errore $conn->connect_error.
$conn=new mysqli($servername,$username,$password,$database);

if($conn->connect_error){
    die("Connessione fallita " . $conn->connect_error);
}
echo "Connessione riuscita";
?>
Riscrivo il tutto senza guida, se ci riesco.
<?php

$servername = "localhost";
$username = "XXXX";
$password = "XXXX";
$database = "id3147737_questodatabase";

$conn=new mysqli($servername,$username,$password,$database);

if($conn->connect_error){
    die("Connessione fallita ".$conn->connect_error);
}
echo "Connessione riuscita";
?>
Vediamo se funziona...

Sembra di sì: "Connessione riuscita". Non ho modo di provare se funzioni la connessione fallita perché non so come inficiarla di proposito...

Ora vado a scrivere il codice per la creazione di una tabella. Qui si tratta di impostare la variabile $sql con il linguaggio SQL.
Vediamo se ricordo...

<?php

$servername = "localhost";
$username = "XXXX";
$password = "XXXX";
$database = "id3147737_questodatabase";

$conn=new mysqli($servername,$username,$password,$database);

if($conn->connect_error){
    die("Connessione fallita ".$conn->connect_error);
}
echo "Connessione riuscita";

$sql="CREATE TABLE Tabellina(
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(30),
    cognome VARCHAR(30)
)";

if($conn->query($sql)===TRUE){
    echo "Tabella creata";
}else{
    echo "Tabella non creata";
}

$conn->close();
?>
Funziona.