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

    problema con $i e query! assurdo!

    regà, mi succede una cosa assurda!
    prima di postarvi il codice e il relativo errore a video, spiego brevemente:
    l'applicazione legge tutte le righe associate a quel preventivo, e per ogni riga mostra campi di form da completare.
    ovviamente in fase di UPDATE della tabella, deve sapere qual'è la riga da modificare, quindi ho usato questo codice:

    Codice PHP:
    <? $id_prev = ($_POST["id_prev"]);
    echo 
    "<input type=\"hidden\" name=\"id_prev\" value=\"$id_prev\">";
    $query "SELECT * from dettagli_preventivi where `id_preventivo` = '$id_prev' order by id_riga";
    $risultato mysql_query($query) or die ($query."
    "
    .mysql_error());
    $i 0;
    while (
    $row mysql_fetch_array($risultato,MYSQL_ASSOC))
    {
    echo 
    "<input type=\"hidden\" name=\"id_riga[$i]\" value=\"".$row["id_riga"]."\" />";
    $i++;
    echo 
    "<tr><td>Fornitore</td>\n";
    $fornitori "select * from `ana_forn`";
    $lista_fornitori mysql_query($fornitori) or die ("non eseguo la query fornitori");
    echo 
    "<td><select name=\"fornitori[$i]\">\n";
    echo 
    "<option value=\"0\">- Selezionare Fornitore -</option>\n";
    eccetera eccetera...
    come vedete, ho lasciato volutamente a video l'echo della variabile id_riga per vedere cosa stampa, ed in effetti mi ha stampato a video un bel 45 (ossia riga 4 e 5 associate a quell'id_prev)

    quindi passo all'inserimento tramite update con questa query:
    Codice PHP:
    foreach ($_POST["id_riga"] as $i => $id_riga)
    {
    $query3 " UPDATE dettagli_preventivi SET costo = '".$_POST["costo_$i"]."', ricarico = '".$_POST["ricarico_$i"]."', prezzo_vendita = '".$_POST["prezzo_vendita_$i"]."', fornitore = '".$_POST["fornitori"][$i]."', data_realizzo = '".$_POST["data_realizzo"]."', materiale = '".$_POST["materiale"]."' WHERE id_preventivo = '".$_POST["id_prev"]."' AND id_riga = '".$_POST["id_riga"][$i]."'";
    mysql_query($query3) or die ($query3."
    "
    .mysql_error()); echo "$query3"; } 
    e guardate un po' che succede:

    UPDATE dettagli_preventivi SET costo = '11111', ricarico = '1', prezzo_vendita = '11222.11', fornitore = '1', data_realizzo = '1 mese', materiale = '

    sdasdfasfdas
    ' WHERE id_preventivo = '3' AND id_riga = '5'
    UPDATE dettagli_preventivi SET costo = '22222', ricarico = '2', prezzo_vendita = '22666.44', fornitore = '1', data_realizzo = '1 mese', materiale = '

    sdasdfasfdas
    ' WHERE id_preventivo = '3' AND id_riga = ''

    dove sbaglio?!
    e perchè prende l'ultima riga correttamente (la 5) e la 4 invece me la passa come se fosse vuota?!
    x favore aiutatemi che non capisco dove cavolo è l'errore...

    grazie,
    Fabrizio

  2. #2
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732
    se può esserti utile, nelle query puoi usare questo sistema

    $query = "SELECT * FROM tabella WHERE id= {$id} AND eccetera"
    e anche
    $query = "SELECT * FROM tabella WHERE id= {$id['array']['valore']} AND eccetera"


    quando ho scoperto questo sistema ho risolto un mucchio di rogne per banali errori di virgolette...

    occhio che non funziona se fai
    $query = 'SELECT * FROM tabella WHERE id= {$id} AND eccetera'
    devi mettere i doppi apici, i singoli prendono tutto il testo come una stringa e non considerano le variabili

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    A occhio e croce dipende da questo:

    echo "<input type=\"hidden\" name=\"id_riga[$i]\" value=\"".$row["id_riga"]."\" />";

    per farlo riconoscere come array in php, l'html va scritto in questa maniera:

    echo "<input type=\"hidden\" name=\"id_riga[]\" value=\"".$row["id_riga"]."\" />";

    e l'array sarà sequenziale..

    Capì?
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  4. #4
    no, negativo..
    non va nemmeno in questo modo...
    e non capisco proprio che cavolo è...


  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Per caso scorri $_POST['id_riga'] prima di utilizzarlo in quel ciclo?

    Se si, credo che tu debba riportarlo alla posizione iniziale con un reset($_POST['id_riga']);
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  6. #6
    anzi. la cosa assurda sapete qual'è????

    guardando l'output in HTML su firefox, mi sono accorto che col $i su id riga si comporta strano!

    tipo che ho:
    ....
    fornitori[1]
    fornitori[2]
    ....
    ....
    ....
    id_riga[0]
    id_riga[1]
    ....



    com'è che parte da 0 e non da 1????

    vuoi vedere che è perchè ho messo l'input type prima di $i++??????

  7. #7
    Nella pagina che riceve il form fai un bel
    Codice PHP:
    print "<pre>";
    print_r($_POST);
    print 
    "</pre>"

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Beh un array di norma parte da 0.. e non da 1, i fornitori ti partono da 1 perché prima incrementi $i e poi associ il nome...

    $i = 0;
    while ($row = mysql_fetch_array($risultato,MYSQL_ASSOC))
    {
    echo "<input type=\"hidden\" name=\"id_riga[$i]\" value=\"".$row["id_riga"]."\" />";
    $i++;
    echo "<tr><td>Fornitore</td>\n";
    $fornitori = "select * from `ana_forn`";
    $lista_fornitori = mysql_query($fornitori) or die ("non eseguo la query fornitori");
    echo "<td><select name=\"fornitori[$i]\">\n";
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  9. #9
    ehm.. sono scemo io
    $i++ era subito dopo quindi non lo faceva partire da 1 ma da 0

  10. #10
    Originariamente inviato da cubalibre810
    Nella pagina che riceve il form fai un bel
    Codice PHP:
    print "<pre>";
    print_r($_POST);
    print 
    "</pre>"
    a che serve? mai usata sta cosa... ora la provo!

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.