• User

    problema script: chi trova l'errore?

    ho scaricato uno script di registrazione dal forum, l'ho modificato un pò, cosa c'è di sbagliato negli script php?😢:?. Chi è il più bravo tra di voi ke capisce l'errore?

    Poi qnd ho inserito i dati per registrarmi e clicco sul pulsante registrati mi esce questo msg di errore:

    Errore 003, contattare l'amministratore You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc)VALUES('Utente', 'dc647eb65e6711e155375218212b3964', 'edjs@

    REGISTRAZIONE.php
    <?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['registra']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato d?di default ''
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato d?di default ''
    $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato d?di default ''
    $msn = (isset($_POST['msn'])) ? trim($_POST['msn']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato d?di default ''
    $ora = (isset($_POST['ora'])) ? trim($_POST['ora']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato d?di default ''
    $nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato d?di default ''
    $prov = (isset($_POST['prov'])) ? trim($_POST['prov']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato d?di default ''
    $data = (isset($_POST['data'])) ? trim($_POST['data']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato d?di default ''
    $sess = (isset($_POST['sess'])) ? trim($_POST['sess']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato d?di default ''
    $cerc = (isset($_POST['cerc'])) ? trim($_POST['cerc']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato d?di default ''
    $desc = (isset($_POST['desc'])) ? trim($_POST['desc']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato d?di default ''

    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
    $user = addslashes($user);
    $pass = addslashes($pass);
    $mail = addslashes($mail);
    $msn = addslashes($msn);
    $ora = addslashes($ora);
    $nome = addslashes($nome);
    $prov = addslashes($prov);
    $data = addslashes($data);
    $sess = addslashes($sess);
    $cerc = addslashes($cerc);
    $desc = addslashes($desc);

    }

    // Controllo il Nome Utente
    if(strlen($user) < 4 || strlen($user) > 12)
    die('Nome Utente troppo corto, o troppo lungo');
    // Controllo la Password
    elseif(strlen($pass) < 4 || strlen($pass) > 12)
    die('Password troppo corta, o troppo lunga');
    // Controllo l'email
    elseif(!eregi("^[a-z0-9][_.a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})", $mail))
    die('Email non valida');
    // Controllo il nome utente non sia gi?occupato
    elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1)
    die('Nome Utente non disponibile');
    // Controllo l'indirizzo email non sia gi?registrato
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
    die('Questo indirizzo email risulta già registrato ad un altro utente');
    // Registrazione dell'utente nel database
    else
    {

    // Crypt della password per garantire una miglior sicurezza
    $pass = md5($pass);

    // Query per l'inserimento dell'utente nel database
    $strSQL = "INSERT INTO utenti (user,pass,mail,msn,ora,nome,prov,data,sess,cerc,desc)";
    $strSQL .= "VALUES('$user', '$pass', '$mail', '$msn', '$ora', '$nome', '$prov', '$data', '$sess', '$cerc', '$desc')";
    mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error());

    // Reindirizzo l'utente ad una pagina di conferma della registrazione
    header('Location: registrato.php');
    exit;
    }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "QUI C'E' UN LINK (KE é ESATTO) ma non me lo fa mettere,cmq il problema non è questo ">
    <html xmlns=" QUI C'E' UN LINK (KE é ESATTO) ma non me lo fa mettere,cmq il problema non è questo ">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Registrazione</title>
    </head>
    <body bgcolor="#FFCCCC">
    <form action="" method="post">
    <fieldset style="padding: 2">
    <legend><b>Informazioni Utente</b></legend>
    <input name="user" type="text" id="user" value="Utente" onfocus="if(this.value=='Nome Utente') this.value='';" size="20" /><br />
    <br>
    <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
    <br>
    <input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /></fieldset><br>
    <br>
    <fieldset style="padding: 2">
    <legend><b>Informazioni Msn</b></legend>
    <input name="msn" type="text" id="user5" value="Contatto Msn" onfocus="if(this.value=='Nome Utente') this.value='';" size="50" /><p>
    <input name="ora" type="text" id="user4" value="Orario Msn" onfocus="if(this.value=='Nome Utente') this.value='';" size="20" /></p>
    </fieldset><br>
     <fieldset style="padding: 2">
    <legend><b>Informazioni Personali</b></legend>
    <input name="nome" type="text" id="user0" value="Nome" onfocus="if(this.value=='Nome Utente') this.value='';" size="20" /><br>
    <br>
    <input name="prov" type="text" id="user1" value="Provincia" onfocus="if(this.value=='Nome Utente') this.value='';" size="20" /><br>
    <br>
    <input name="data" type="text" id="user2" value="Data di Nascita" onfocus="if(this.value=='Nome Utente') this.value='';" size="20" /><br>
    <br>
    <select size="1" name="sess">
    <option value="Sesso" selected>Sesso</option>
    <option value="Maschio">Maschio</option>
    <option value="Femmina">Femmina</option>
    </select><br>
    <br>
    <select size="1" name="cerc">
    <option selected>Cerco</option>
    <option value="Amicizia">Amicizia</option>
    <option value="Niente">Niente</option>
    <option value="Incontro">Incontro</option>
    <option value="Altro">Altro</option>
    </select><br>
    <br>
    <textarea rows="7" name="desc" cols="39">Descrizione</textarea></fieldset><p>
    <input name="registra" type="submit" value="Registrati" /><br />
    </p>
    </form>
    </body>
    </html>

    MY CONFIG
    <?php
    // avvio la sessione
    session_start();
    // Dati connessione al database
    $db_host = 'localhost'; // Host - solitamente localhost
    $db_utente = 'xxxxx; // Nome utente del Database
    $db_password = 'xxxxxx'; // Password del Database
    $db_nomedb = 'my_salernochat'; // Nome del Database
    // Effettua la connessione al database
    $dbh=mysql_connect ($db_host, $db_utente, $db_password) or die ('Errore nella stringa di connessione al database: '.mysql_error());
    mysql_select_db($db_nomedb);
    ?>

    Cosa c'è di sbagliato? Ho attivato anche il database con altervista.

    AIUTOOOOOOO😢😢😢😢😢😢😢😢


  • User Attivo

    Ciao pfiore,

    Il problema è che non scrive nel db perchè c'è un errore di sintassi nella insert.

    probabile causa:

    Dai un'occhiata a questa riga:

    [php]$strSQL = "INSERT INTO utenti (user,pass,mail,msn,ora,nome,prov,data,sess,cerc,d esc)";
    [/php]

    Togli quello spazio in "d esc", facci sapere se ha funzionato.


  • ModSenior

    DESC in mysql è abbrevazione del comando DESCRIBE.
    Te lo dico perchè ci sono impazzito anche io diverso tempo fa.
    Cambia il nome del campo e tutto torna alla normalità.


  • User

    ho fatto come avete detto, ora esce un altro tipo di problema:

    Errore 003, contattare l'amministratore Table 'my_salernochat.utenti' doesn't exist

    che significa? spero che rispondete graziee


  • ModSenior

    Ipotizzando che abbia già creato tutte le tabelle nel database MySql che citi my_salernochat controlla come le hai scritte perchè mysql è case sensitive: assicurati quindi di aver scritto esattamente il nome della tabella mysql tutto in minuscolo.

    Se si verificassero altri errori nei comandi SQL controlla che anche tutti i nomi dei campi nella tabella database siano esattamente come li hai scritti nel codice.


  • User

    non ho creato la tabella (anche se lo avevo fatto non è rimasto salvato boh) cmq mi esce questo:

    Non ci sono tabelle nel database.
    Crea una nuova tabella nel database my_salernochat
    Nome:_____ Numero di cami____

    Che sarebbe il numero di campi? (per caso il num di persone ke si dovranno iscrivere, ogni campo un utente?)
    poi se metto il nome della tabella, nelle impostazione my sql del sito devo mettere my_salernochat o il nome della tabella?

    Lo so faccio domande stupide, ma ke per me la risposta vale + dell'oro 🙂


  • ModSenior

    Ciao pfiore,

    il numero di campi e' il numero di informazioni che vuoi archiviare nel tuo database.

    Nel tuo caso specifico sono 11 informazioni (o campi), eccoli qua:
    user, pass, mail, msn, ora, nome, prov, data, sess, cerc più il campo desc che hai rinominato in quanto dava errore.

    Anche se è difficile darti una mano non sapendo quale script hai scaricato considera che di solito nei codici php che si scaricano e utilizzano database mysql ci può essere (quasi) sempre una procedura da seguire automatica di installazione che crea al posto tuo il database e le tabelle.

    Oppure c'è di solito uno script dall'estensione .sql o a volte .txt che contiene tutti i comandi per creare al posto tuo il database, le tabelle e tutti i campi necessari per il corretto funzionamento dello script.

    Infine rimane la possibilità di costruire tutto "manualmente" (lo so, è il caso peggiore, ma prevediamolo).


  • User

    ok, ho bisogno di 11 campi, ma se ne metto ad esempio 15 (per poi utilizzare gli altri 4 in futuro) e ora ne utilizzo solo 11 si può fare? cioè ke ne rimangono 4 vuoti per ora, funziona lo stesso così la registrazione?


  • ModSenior

    Si pfione, funziona.

    L'importante è che i 4 campi aggiuntivi che ti vuoi riservare siano indicati a mysql come "non obbligatori" altrimenti mysql, non trovandoli valorizzati nel tuo script, non registrerà i dati e darà un errore.

    Se hai a disposizione una interfaccia web tipo phpmyadmin o simile dovrai impostare la voce "required" (o analoga descrizione tradotta in italiano) di ogni campo al valore "no".


  • User

    ok grazie, ora mi escono delle cose da compilare:

    -CAMPO (ke devo mettere in ognuna il nome tipo, user,pass,mail,msn,ecc)
    -TIPO (che è impostato già VARCHAR ke significa?)
    -LUNGHEZZA/SET (che devo mettere= ke significa?)
    -COLLATION,ATTRIBUTI,NULL,PREDEFINO (che devo mettere qua) ?

    ma se rimango 11 campi, in futuro ci posso aggiungere altri campi nella stessa tabella o devo creare una nuova?

    vi prego rispondete, sto capendo tutto abbastanza bene grazie, e vorrei concludere 🙂


  • ModSenior

    Puoi aggiungere anche i campi che ti necessitano in un secondo momento.

    Ecco qua quelo che stai cercando:
    Campo => metti il nome di ogni esattamente come hai scritto nel post
    Tipo => VARCHAR (cioè tutto testo per il momento, poi approfondisci le differenze)
    Lunghezza => 255
    Collation => lasci stare così
    Null => Yes (oppure si) : è questo il flag fondamentale

    P.S.: non offenderti ma questo è un forum e le risposte che ricevi sono date in base alla disponibilità di ciascuno.
    Non c'è bisogno in ogni post di scrivere "rispondete".


  • User

    lo so e per questo chiedo scusa a te che stai perdendo tempo con me e ti ringrazio veramente infinitamente, e a tutti quelli del forum. scusate

    vorrei però chiederti un ultima cosa se non ti dà troppo fastidio:

    1) hai detto che collation la devo lasciar stare così, però nn ci sta scritto niente in tabella. Devo lasciarlo senza scritto niente? vuoto?

    2) invece NULL, le due opzioni disponibilis sono null o not null. Quale devo mettere? Not Null giusto?

    3) in attributi non va niente?

    4) poi ci sono delle opzioni che si possono mettere quale devo mettere se servono:
    PRIMARIA, INDICE, UNICA, ---(niente), TESTO COMPLETO ?

    5) se voglio aggiungere prossimamente nel modulo di registrazione il form UPLOAD FOTO, se ho capito bene (se varchar serve per il testo) ke devo mettere per l'upload delle foto?

    NON TI CHIEDO PIù NIENTE (CREDO), TI RINGRAZIO INFINITAMENTE E MI SCUSO PER IL TROPPO DISTURBO
    GRAZIE ANCORA


  • ModSenior

    @pfiore said:

    lo so e per questo chiedo scusa a te che stai perdendo tempo con me e ti ringrazio veramente infinitamente, e a tutti quelli del forum. scusate

    vorrei però chiederti un ultima cosa se non ti dà troppo fastidio:

    1) hai detto che collation la devo lasciar stare così, però nn ci sta scritto niente in tabella. Devo lasciarlo senza scritto niente? vuoto?

    2) invece NULL, le due opzioni disponibilis sono null o not null. Quale devo mettere? Not Null giusto?

    3) in attributi non va niente?

    4) se voglio aggiungere prossimamente nel modulo di registrazione il form UPLOAD FOTO, se ho capito bene (se varchar serve per il testo) ke devo mettere per l'upload delle foto?

    NON TI CHIEDO PIù NIENTE (CREDO), TI RINGRAZIO INFINITAMENTE E MI SCUSO PER IL TROPPO DISTURBO
    GRAZIE ANCORA

    1. lascia vuoto

    2)metti not null, occupa meno spazio

    3)in attribuiti puoi aggiugnere se vuoi che il campo sia unico e quindi 2 record non possano avere lo stesso valore in quel campo, è usato solamente per gli indici solitamente...

    1. ti conviene text perchè varchar contiene fino a 255 caratteri, dubito che qualcuno metta un indirizzo cosi lungo... però non si sà mai...

  • ModSenior

    @pfiore said:

    lo so e per questo chiedo scusa a te che stai perdendo tempo con me e ti ringrazio veramente infinitamente, e a tutti quelli del forum. scusate

    Però cerchiamo di limitare sempre i post con scritte tipo "rispondete".
    Siamo qua per questo no? ;).

    @pfiore said:

    1. hai detto che collation la devo lasciar stare così, però nn ci sta scritto niente in tabella. Devo lasciarlo senza scritto niente? vuoto?

    esattamente.

    @pfiore said:

    1. invece NULL, le due opzioni disponibilis sono null o not null. Quale devo mettere? Not Null giusto?

    Null

    @pfiore said:

    1. in attributi non va niente?

    esatto.

    @pfiore said:

    1. se voglio aggiungere prossimamente nel modulo di registrazione il form UPLOAD FOTO, se ho capito bene (se varchar serve per il testo) ke devo mettere per l'upload delle foto?

    Problema un pò più complesso. Solitamente si fa l'upload della foto in una cartella del sito predefinita mentre nel campo del database si archivia soltanto il nome del file immagine che vuoi salvare.

    Visto che ti rispondiamo lo stesso :ciauz:?


  • User
    1. ma a finale devo mettere NULL O NOT NULL? non ho capito

    2. poi ci sono delle opzioni che si possono mettere quale devo mettere se servono:
      PRIMARIA, INDICE, UNICA, ---(niente), TESTO COMPLETO ?


  • ModSenior

    @pfiore said:

    1. ma a finale devo mettere NULL O NOT NULL? non ho capito
    1. poi ci sono delle opzioni che si possono mettere quale devo mettere se servono:
      PRIMARIA, INDICE, UNICA, ---(niente), TESTO COMPLETO ?

    2. io ti consiglio not null

    2)niente


  • ModSenior

    Con NOT NULL come dice Thedarkita il tuo database occupa meno spazio quando salva i dati, ma devi valorizzare il valore del campo ogni volta che salvi un record sul database, pena un errore mysql in fase di inserimento record.

    Con NULL invece mysql salva anche se non valorizzi il campo.

    Riguardo alla domanda 2 per il momento possiamo sorvolare visto che si tratta della definizione degli indici di chiave primaria e degli indici aggiuntivi per le tabelle che puoi approfondire quando hai testato il tuo script e preso un pò più di dimestichezza con il mysql.


  • User

    quindi è meglio NULL, se no devo valorizzare i valori che non so come si fa o no? aiutoooo
    dai un altro piccolo passo, mi state aiutando a realizzare quello che per me è una grande impresa ahahahahah


  • ModSenior

    @mister.jinx said:

    Con NOT NULL come dice Thedarkita il tuo database occupa meno spazio quando salva i dati, ma devi valorizzare il valore del campo ogni volta che salvi un record sul database, pena un errore mysql in fase di inserimento record.

    Con NULL invece mysql salva anche se non valorizzi il campo.
    non è completamente esatto... perchè se tu non metti nulla viene salvato nel campo il valore "", non da errori... 😉


  • ModSenior

    ni... vero ma dipende anche parecchio da come hai configurato il mysql e dalla build che usi ;).