Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Problema inserimento record "sfalsati"

    Ciao ragazzi!
    Spero voi riusciate a risolvermi questo problema con MySQL. Ho, in PHP diversi foreach che ciclano su array di 20 elementi contenuti a loro volta nell'array $_POST. All'atto di andare ad inserire i dati nel DB ottengo uno strano risultato: i dati vengono inseriti correttamente, tuttavia , i dati del campo adiacente vengono inseriti venti record pù sotto (che corrispondono appunto al numero di elementi di ogni array). Io voglio però che tali dati siano "allineati" ai precedenti. Un immagine per capirsi meglio:



    E questo è il codice PHP:


    [...]("CREATE TABLE IF NOT EXISTS TEST (
    DATA DATE ,
    TEST INT ,
    ES_NUM INT( 2 ) ,
    ES_TXT TEXT ,
    R1 TEXT ,
    R2 TEXT ,
    R3 TEXT ,
    R4 TEXT ,
    R5 TEXT ,
    ES_SOL INT( 1 ))");


    foreach ( $_POST['questiontest'] as $copia_valore )

    {
    $query = "INSERT INTO TEST (ES_TXT) VALUES ('$copia_valore')";
    $result = mysql_query($query) or die (mysql_error());
    unset($query);
    }
    foreach ( $_POST['risp1'] as $copia_valore1 )

    {
    $query = "INSERT INTO TEST (R1) VALUES ('$copia_valore1')";
    $result = mysql_query($query) or die (mysql_error());
    unset($query);
    }
    foreach ( $_POST['risp2'] as $copia_valore2 )

    {
    $query = "INSERT INTO TEST (R2) VALUES ('$copia_valore2')";
    $result = mysql_query($query) or die (mysql_error());
    unset($query);
    }
    foreach ( $_POST['risp3'] as $copia_valore3 )

    {
    $query = "INSERT INTO TEST (R3) VALUES ('$copia_valore3')";
    $result = mysql_query($query) or die (mysql_error());
    unset($query);
    }
    foreach ( $_POST['risp4'] as $copia_valore4 )

    {
    $query = "INSERT INTO TEST (R4) VALUES ('$copia_valore4')";
    $result = mysql_query($query) or die (mysql_error());
    unset($query);
    }
    foreach ( $_POST['risp5'] as $copia_valore5 )

    {
    $query = "INSERT INTO TEST (R5) VALUES ('$copia_valore5')";
    $result = mysql_query($query) or die (mysql_error());
    unset($query);
    }
    ?>


    C'è qualcosa che sbaglio?

    Grazie siete i mejo!

  2. #2
    non si fa

    insert colonna1
    insert colonna2
    ...
    insert colonnaN

    ma

    insert colonna1, colonna2, ..., colonnaN


  3. #3
    Ciao,

    gentilmente, maggiore attenzione per il futuro: questa sezione tratta i database non php quindi evitiamo di postare TUTTO questo codice php.

    PS: perché non dai dei nomi comprensibili alle colonne?
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    Originariamente inviato da optime
    non si fa

    insert colonna1
    insert colonna2
    ...
    insert colonnaN

    ma

    insert colonna1, colonna2, ..., colonnaN

    Grazie per la risposta! Non posso fare così , perchè (non so se conosci PHP) ma il codice che ho scritto mi permette di fare solo in questo modo....e non posso (che io sappia) scriverlo diversamente.


    Originariamente inviato da daniele_dll
    Ciao,

    gentilmente, maggiore attenzione per il futuro: questa sezione tratta i database non php quindi evitiamo di postare TUTTO questo codice php.

    PS: perché non dai dei nomi comprensibili alle colonne?
    Scusami ma era per rendere più comprensibile il problema, grazie per l'avvertimento.
    I nomi delle colonne ho la necessità che siano questi perchè sto riscrivendo un vecchio software e il programmatore aveva strutturato la tabella così. Comunque, la tabella è per un software che permette di fare test a scelta multipla:

    TEST=>Numero del test;
    ES_NUM=>Identifica il numero dell'esercizio del test (va da 1 a 20 appunto)
    ES_TXT=>Testo della domanda;
    R1=>Prima risposta;
    ecc...

  5. #5
    Originariamente inviato da rockNetman
    Grazie per la risposta! Non posso fare così , perchè (non so se conosci PHP) ma il codice che ho scritto mi permette di fare solo in questo modo....e non posso (che io sappia) scriverlo diversamente.
    quindi è decisamente un problema PHP

  6. #6
    Originariamente inviato da optime
    quindi è decisamente un problema PHP
    Sposto in php.

    PS: il problema lo risolvi molto semplicemente dato che gli array sono comunque nella stessa sequenza e quindi il primo elemento di un array corrisponde al primo elemento di un altro array

    codice:
    foreach($_POST['risp1'] as $key => $value1)
    {
        $value2 = $_POST['risp2'][$key];
        $value3 = $_POST['risp3'][$key];
        $value4 = $_POST['risp4'][$key];
        .
        .
        .
    }
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Originariamente inviato da optime
    quindi è decisamente un problema PHP
    No, perchè non posso fare in altro modo (a meno di non inizializzare le 220 e passa variabili che mi servono a manina... ) Le ho provate tutte, te lo assicuro. Io ho bisogno di trovare un modo, un istruzione SQL, una qualsiasi cosa che mi permetta di porre sullo stesso record i vari campi di ogni stesso quesito.

    Grazie

    EDIT:
    Originariamente inviato da daniele_dll
    Sposto in php.

    PS: il problema lo risolvi molto semplicemente dato che gli array sono comunque nella stessa sequenza e quindi il primo elemento di un array corrisponde al primo elemento di un altro array

    codice:
    foreach($_POST['risp1'] as $key => $value1)
    {
        $value2 = $_POST['risp2'][$key];
        $value3 = $_POST['risp3'][$key];
        $value4 = $_POST['risp4'][$key];
        .
        .
        .
    }
    Grazie, questa non la sapevo. Dopo provo e ti faccio sapere.
    Grazie

    Simone

  8. #8
    Ok grazie mille, ho risolto con il tuo codice.

    foreach($_POST['questiontest'] as $key => $value0)

    {
    $value1 = $_POST['risp1'][$key];
    $value2 = $_POST['risp2'][$key];
    $value3 = $_POST['risp3'][$key];
    $value4 = $_POST['risp4'][$key];
    $value5 = $_POST['risp5'][$key];
    $query = "INSERT INTO TEST (ES_TXT, R1, R2, R3 ,R4, R5) VALUES ('$value0','$value1','$value2','$value3','$value4' ,'$value5')";
    $result = mysql_query($query) or die (mysql_error());
    }


    Una curiosità. Come mai devo per forza associare la chiave al relativo valore?

    Grazie

  9. #9
    non la devi per forza associare ... sono array e usi l'indice per accederci
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Non ho capito, scusami. Armeggio con PHP da circa 1 mese e quindi non ti seguo

    Se io provo a rimuovere le chiavi, cambiando in questo modo il codice, non funziona:

    foreach($_POST['questiontest'] as $value0)

    {
    $value1 = $_POST['risp1'];
    $value2 = $_POST['risp2'];
    $value3 = $_POST['risp3'];
    $value4 = $_POST['risp4'];
    $value5 = $_POST['risp5'];
    $query = "INSERT INTO TEST (ES_TXT, R1, R2, R3 ,R4, R5) VALUES ('$value0','$value1','$value2','$value3','$value4' ,'$value5')";
    $result = mysql_query($query) or die (mysql_error());
    }

    Volevo solo capire il perchè.
    EDIT: forse ho capito perchè. E' cosi perchè sennò non riesce a ciclare su $_POST['rispx']?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.