Far eseguire comandi SQL da una pagina PHP

Salve, avrei creato un CMS, e per l'installazione vorrei che la creazione di tabelle fosse eseguita automaticamente da una pagina PHP non appena viene apperta, e se clicca il bottone... Come fare?

inviato 4 anni fa
Clear
Clear
21
X 0 X

1) La prima parte del codice serve per iterare tutti gli elementi presenti all'interno dell'array e per eseguire tutti i comandi presenti in $query.

Nell'esempio che ti ho mostrato l'inizializzazione dell'array $query non è niente altro che:

$query[0] = "CREATE DATABASE .... ";
$query[1] = "CREATE TABLE ...";
$query[2] = "INSERT IGNORE INTO ... ",
// E così via

//Utilizzare foreach in quel modo è uguale a utilizzare:
for($i=0; $i<count($query); $i++){

   if(!$db->mysqli_query($value)){
      exit("No");
   }

);

foreach da PHP.

Con

if(!$db->mysqli_query($value)){
  exit("No");
}

controlli che la query venga eseguita correttamente, e in caso contrario stampi No e blocchi lo script.

Se tutto il foreach viene eseguito senza generare errori, significa che il database è stato creato correttamente.

2) Non so cosa tu abbia in questi due file che mi hai indicato, ma immagino tu abbia le credenziali per l'accesso e la creazione dell'istanza di mysqli. In quel caso sì, dovrai chiaramente integrare quelle variabili (o oggetti) che ti aiuteranno nella costruzione del database. In effetti facciamo già riferimento all'oggetto $db che si presuppone sia una referenza di mysqli o mysql (la differenza per l'uso dei metodi è molto sottile).

In ogni caso sarebbe meglio evitare di utilizzare il create database come un comando qualsiasi ma inserirlo in testa a tutti, selezionare il database che hai appena creato e poi sparare tutte le query di creazione tabelle e di inserimento dati.

risposto 4 anni fa
zeropingas
modificato 4 anni fa
X 0 X X

Per rendere il tutto più nascosto ed evitare che si aprano ulteriori pagine, potresti utilizzare una richiesta post da attivare al click sul bottone. Io per effettuare questo tipo di operazioni utilizzo il framework di Javascript jQuery.

Dopo aver incluso il framework nella pagina (nella sezione head), puoi procedere ad inserire del codice tra i tag script (sempre nell'head):

<script type="text/javascript">

function chiamaCrea(){

$.post("creaDatabase.php", function(data) {
   alert("Caricamento effettuato?"+data);
 });

}

</script>

E il bottone in HTML:

<button type="button" onclick="chiamaCrea()">Crea Database</button>

Una volta effettuato questo nella pagina creaDatabase.php dovrai inserire il tuo codice per la creazione del database e stampare solo e unicamente ciò che ti serve (la funzione jquery $.post ha nella variabile data tutto ciò che la pagina creaDatabase.php stamperà al suo interno --> aiutati con queste funzioni per ripulire tutte le cose che stampi e che non ti servono):

<?php

  $query = array(

   "CREATE DATABASE .... ",

   "CREATE TABLE ...",

   "INSERT IGNORE INTO ... ",

   ....

);

foreach($query as $value){

if(!$db->mysqli_query($value)){

   exit("No");

}

}

exit("Sì");

?>

Chiaramente stai attento a gestire gli accessi (sessioni) di creaDatabase.php, in modo che solo l'amministratore possa eseguirla.

Riferimento alla funzione post di jquery.

risposto 4 anni fa
zeropingas
modificato 4 anni fa
Ok, grazie mille, però ho ancora dubbi. Per l'esattezza 2: 1) Questa parte del codice: foreach($query as $value){ if(!$db-&gt;mysqli_query($value)){ exit("No"); } } exit("Sì"); A cosa serve? 2) Nel file creaDatabase.php devo includere i file config.php e connessione_db.php che ho creato in questo modo? : &lt;?php include("connessione_db.php");  include("config.php");  mysql_select_db("$db_name",$connessione); $query = array( "CREATE DATABASE .... ", "CREATE TABLE ...", "INSERT IGNORE INTO ... ", .... ); foreach($query as $value){ if(!$db-&gt;mysqli_query($value)){ exit("No"); } } exit("Sì"); ?&gt;Clear 4 anni fa
X 1 X

Come una qualsiasi altra query di tipo SELECT che sicuramente avrai utilizzato per creare il tuo CMS.

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