Visualizzazione risultati 1 fino 14 di 14

Discussione: Syntax error Mysql

  1. #1
    adminreluca non è connesso Utente
    Data registrazione
    06-03-2006
    Messaggi
    112

    Predefinito Syntax error Mysql

    Ho una pagina come da codice sotto, che deve inserire i dati che compilo nelle varie tabelle in mysql, (che creo da un'altra pagina ovvero creo le categorie), nello specifico in questa pagina vado a compilare una scheda per un articolo da vendere.

    Morale della favola una volta compilati i campi necessari, la pagina mi restituisce il seguente errore: 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 '1 (id, nome_articolo, descrizione_articolo, prezzo_
    Dove il numero 1 è la tabella corrispondente alla prima categoria creata.
    Presumo che l'errore stia nell'INSERT INTO ma perchè?


    Codice PHP:
    <style type="text/css">
    #content{ width:350px; float:left;}
    #content2 { float:left; margin-right:20px; width:200px;}

    #content3{ width:120px; float:left;}
    #content4 { float:left; margin-right:20px; width:140px;}
    </style>

    <form action='?inviodati=ok' method='POST'>

    <div id="content">Nome Articolo:</div>
    <div id="content2"><input name='nome_articolo' type='text' size="27" id="nome_articolo" /></div>
    <p>&nbsp;</p>


    <div id="content">Categoria di destinazione:</div>
    <div id="content2"><select name="in_categoria">
    <option></option>
    <?PHP
    // Mi connetto al database
    include ('mysql_connect.php');
    mysql_select_db("$db_name2")or die("cannot select DB");

    // Recupero i record per la pagina corrente...
    $rs = mysql_query("SELECT id, nome_categoria FROM shop_categorie ORDER BY id ");
    $nr = mysql_num_rows($rs);
    if (
    $nr != 0){
    for(
    $x = 0; $x < $nr; $x++){
    $row = mysql_fetch_assoc($rs);
    echo
    "<option value=\"" . $row['id'] . "\">". $row['nome_categoria'] ."</option>";
    }
    }else{
    echo
    "Nessun record trovato!";
    }

    ?>
    </select></div>
    <p>&nbsp;</p>


    <div id="content">Descrizione Articolo:</div><br />
    <div id="content"><textarea name="descrizione" cols="120" rows="15"></textarea></div><br />
    <p>&nbsp;</p>


    <div id="content">Costo in € (es: 23,65):</div>
    <div id="content2"><input name='prezzo' type='text' size="27" /></div><br />
    <p>&nbsp;</p>

    <table width="600" border="0">
    <tr>
    <td>Inserisci immagini:</td>
    </tr>
    <tr>
    <td><a target="box" href='#' onClick="window.open('shp_carica_file_1.html','miaFinestra','width=670,height=510, toolbar=no, location=no,status=no,menubar=no,scrollbars=no,resizable=no');">Apri l'Uploader</a></td>
    </tr>
    <tr>
    <td><input name='immagine_articolo1' type='text' size="117" /></td>
    </tr>
    <tr>
    <td><input name='immagine_articolo2' type='text' size="117" /></td>
    </tr>
    <tr>
    <td><input name='immagine_articolo3' type='text' size="117" /></td>
    </tr>
    <tr>
    <td><input name='immagine_articolo4' type='text' size="117" /></td>
    </tr>
    </table>


    <br />
    <p>
    <input name="Ripristina" type='reset' value='Cancella Tutto' />
    <input type='submit' value='Inserisci articolo nello shop' /></p>
    </form>




    <?php

    // attraverso un if controlliamo che il form sia stato inviato
    if ( $_GET['inviodati'] == "ok" ) {

    // recuperiamo i dati inviati con il form
    $nome_articolo = $_POST['nome_articolo'];
    $in_categoria = $_POST['in_categoria'];
    $descrizione = $_POST['descrizione'];
    $prezzo = $_POST['prezzo'];
    $immagine_articolo1 = $_POST['immagine_articolo1'];
    $immagine_articolo2 = $_POST['immagine_articolo2'];
    $immagine_articolo3 = $_POST['immagine_articolo3'];
    $immagine_articolo4 = $_POST['immagine_articolo4'];

    // ora controlliamo che i campi siano stati tutti compilati
    if ( $nome_articolo == TRUE && $descrizione == TRUE && $prezzo == TRUE ) {

    //inseriamo l'articolo nel database
    mysql_query("INSERT INTO $in_categoria
    (id, nome_articolo, descrizione_articolo, immagine_articolo1, immagine_articolo2, immagine_articolo3, immagine_articolo4, prezzo_articolo)
    VALUES
    ('', '
    $nome_articolo', '$descrizione_articolo', '$immagine_articolo1', '$immagine_articolo2', '$immagine_articolo3', '$immagine_articolo4', '$prezzo')") OR DIE(mysql_error());


    // messaggio da far visualizzare all'utente finale
    echo "<div style=\"color:#093\"><strong>Articolo inserito con successo!</strong></div>";
    } else {
    echo
    "<div style=\"color:#F00\"><strong>Tutti i campi sono obbligatori, escluse le immagini.</strong></div>";
    }
    }
    ?>
    Ultima modifica di adminreluca : 03-02-2012 alle ore 15.08.40

  2. #2
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Ti consiglio vivamente di fare dei controlli ai dati che prelevi tramite $_POST.
    L'errore può stare negli slashes - usa addslashes().
    Puoi scrivere tutto l'errore?
    Ciao!

  3. #3
    adminreluca non è connesso Utente
    Data registrazione
    06-03-2006
    Messaggi
    112

    Predefinito

    ok, sicuramente implementero quella funzione, pero al momento ho fatto prove con con parole esempio della descrizione: qui ci va la descrizione.
    Quindi slashes non ne ho usati.

  4. #4
    Guest

    Predefinito

    Ho visto che la tabella nel quale inserisci i dati è passata da un valore del form. Non usare assolutamente questa tecnica, in ogni caso il problema sta proprio li, in $in_categoria = $_POST['in_categoria'];.


  5. #5
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Se il problema non sta nella categoria:
    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    Puoi scrivere tutto l'errore?

  6. #6
    adminreluca non è connesso Utente
    Data registrazione
    06-03-2006
    Messaggi
    112

    Predefinito

    biccheddu, come posso fare allora ad impostare i value del menu di scelta recuperandoli da un tabella mysql senza usare quela tecnica?

  7. #7
    Guest

    Predefinito

    Per esempio puoi creare una lista delle tabelle, poi con in_array() controllarne l'esistenza. Il codice che utilizzi è pane per chi, nel caso, volesse bucarti il sito, a maggior ragione che non fai un minimo di sanitize dei contenuti inviati.


  8. #8
    adminreluca non è connesso Utente
    Data registrazione
    06-03-2006
    Messaggi
    112

    Predefinito

    Scusa la pesantezza biccheddu, ma mi sono documentato sulla funzione in_array e non riesco a capire come utilizzarla in questo caso. Ho letto che serve per verificare la presenza di dati.

    Ti scoccia farmi un esempio?

  9. #9
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Ma sono un fantasma?
    Se postassi l'errore completo magari potrei capire un po' meglio qual è il problema.
    @biccheddu: puoi postarmi una guida o un file per evitare injection?

    EDIT:
    in_array()
    Codice PHP:
    <?php
    $os
    = array("Mac", "NT", "Irix", "Linux");
    if (
    in_array("Irix", $os)) {
    echo
    "Got Irix";
    }
    if (
    in_array("mac", $os)) {
    echo
    "Got mac";
    }
    ?>
    Stampa: "Got Irix", poiché "Irix" è contenuto in $os.
    Ultima modifica di radiodelmomento : 03-02-2012 alle ore 20.28.05

  10. #10
    adminreluca non è connesso Utente
    Data registrazione
    06-03-2006
    Messaggi
    112

    Predefinito

    Il fatto delle injection interessa anche a me.
    radiodelmomento, l'errore completo io non te lo so trovare, mi posta solo le due righe che avevo scritto nel primo post. devo metterci Error_all no come si chiama? sono niubbo ragazzi scusate, sto imparando piano piano.

  11. #11
    Guest

    Predefinito

    Esatto. in_array() però è case sensitive e potresti riscontrare qualche problema

    Pensandoci però potresti fare anche un'altra cosa ancora più sicura su più lati:

    Crei un array con tutti le tabelle (che sono le categorie), dopo di che mostri la lista select con un foreach() assegnando la chiave al value="" dell'option, poi una volta inviato il form controlli l'esistenza della chiave nell'array delle tabelle, se è presente continui con l'inserimento.

    Codice PHP:
    $categorie = array('Cat_1', 'Cat_2', 'Cat_3');

    echo
    '<select name="in_categoria">';
    foreach (
    $categorie as $id => $name)
    {
    echo
    '<option value="' . $id . '">' . $name . '</option>';
    }
    echo
    '</select>';

    # invio il form

    $in_cat = (int) &$_POST['in_categoria'];

    if (isset(
    $categorie[$in_cat]))
    {
    /*
    Procedi con l'inserimento e la valorizzazione delle variabili,
    possibilmente facendo controlli aggiuntivi.

    $sql = 'INSERT INTO ' . $categorie[$in_cat] . "
    (id, nome_articolo, descrizione_articolo, immagine_articolo1, immagine_articolo2, immagine_articolo3, immagine_articolo4, prezzo_articolo)
    VALUES ('', '$nome_articolo', '$descrizione_articolo', '$immagine_articolo1', '$immagine_articolo2', '$immagine_articolo3', '$immagine_articolo4', '$prezzo')";
    */
    }
    else
    {
    # Mostra eventuali errori
    }

  12. #12
    adminreluca non è connesso Utente
    Data registrazione
    06-03-2006
    Messaggi
    112

    Predefinito

    Quindi io dentro array('Cat_1', 'Cat_2', 'Cat_3'); devo scrivere il nome delle categorie?

    Perchè io avrei una tabella nel database con la colonna ID e Nome_categoria, quindi la pagina in questione prende il nome delle categorie e li stampa dentro l'elenco e come value gli dava il numero dell'id corrispondente, dopo di che l'id veniva dato come INSERT INTO.

    Utilizzando l'array cosi si puo fare ugualmente o avete altre soluzioni tipo aggiungere dentro un file con w+

  13. #13
    Guest

    Predefinito

    Allora popola l'array con i dati della tabella dopo la key è l'ID univoco della categoria e prendi spunto dal mio esempio.


  14. #14
    adminreluca non è connesso Utente
    Data registrazione
    06-03-2006
    Messaggi
    112

    Predefinito

    ho fatto varie prove e non ci salto fuori, a parte che credo di aver sbagliato a mettere in pratica i vostri suggerimenti.
    comunque, ho sostituito alla pagina il menu a cascata con un campo di testo deove inserire l'id della tabella, ebbene signori mi da lo stesso errore, per quale motivo non posso usare INSERT INTO $in_categoria ?

    EDIT:
    Ragazzi ho risolto, alla fine l'errore stava nell' INSERT INTO $in_categoria che cosi non funziona, ma nemmeno tra i semplici apici.
    Invece se scritto cosi INSERT INTO `$in_categoria` funziona. ma cosa sono questi specie di apici?
    Ultima modifica di adminreluca : 03-02-2012 alle ore 23.27.10

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •