cosa c'è adesso che non va

lo so, lo so sto postando all'impazzata,

comunque, se non vi dispiace, dovreste dare un 'occhiata

al codice di una pagina (quella famosa della fattura oggetto dei miei precedenti post)

vi posto il codice poi vi dico dove sono i miei problemi e dubbi:

fatt1.php:

<?
$db = mysql_connect('localhost', 'root', '') or die(mysql_error());
@mysql_select_db('fattura', $db) or die(mysql_error());


$query = mysql_query("SELECT * FROM clientidb WHERE id_user = '".$_REQUEST['id_user']."'",$db);
$usercli =  $_REQUEST['id_user'];
$query2 = mysql_query("SELECT * FROM fatture",$db);
$totr=mysql_num_rows($query2);

if ($totr == 0)
{
$numero = 1;
  }
else
 {
$totr ++;
$numero = $totr;
 }


while( $row = mysql_fetch_array($query) )
 {
echo "
<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\"width=\"100%\" height=\"100\">
  <tr>
    <td width=\"50%\" height=\"100\" rowspan=\"2\">
          <b>Ingrosso Alimentare </b>
     <br> <b>Ciccio Scoppetta Srl</b>
     <br> <b>Via Carlo Pisacane, 13</b>
     <br> <b>84013&nbsp; Cava dè Tirreni - SA</b>
     <br><br><b> P.I.&nbsp&nbsp 0121555554212</b><br>&nbsp;</td>
    <td width=\"20%\" height=\"10\" ><b>Fattura N° </b><input type=text name=num size=10 value=\"$numero\" align=\"right\"></td>
    <td width=\"30%\" height=\"10\"><b>del </b><input type=text name=date size=20 value= ".date("d/m/Y")." ></td>
  </tr>
  <tr>
    <td width=\"50%\" height=\"50\" colspan=\"2\"valign=\"top\">
<b>
$row[cognome] $row[nome]<br>
   $row[indirizzo]<br>
   $row[citta]<br>
 P.I.&nbsp&nbsp $row[iva]</b>
</td></tr></table>";
}

?>
<body onload="javascript:parent.articoli.document.art.reset(); javascript:parent.articoli.document.art.codice.focus();">

<?
$imponibile = 0;
$iva4 =  0;
$iva10 = 0;
$tot_imp = 0;
$tot_fatt = 0;

if (isset($_REQUEST['codice'])){
$dati=" INSERT INTO carrello VALUES (NULL,
'".addslashes($_REQUEST['codice'])."',
'".addslashes($_REQUEST['descrizione'])."',
'".str_replace(",",".",$_REQUEST['quantita'])."',
'".str_replace(",",".",$_REQUEST['prezzo'])."',
'".addslashes($_REQUEST['iva'])."')";

mysql_query ($dati)
or die ("Non riesco ad eseguire la query $dati");
}

$query = "SELECT * FROM carrello ORDER BY id";
$esegui = mysql_query($query);

echo "
<HEAD>
<style type=\"text/css\"> .alternate0 { background-color: #99E4FF; } .alternate1 { background-color: #CCF2FF; } </style>
</HEAD>
<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\"width=\"100%\" height=\"45\">
  <tr>
  <td width=\"12%\"><b>Annotazioni&nbsp;</b>
  <input type=text name=annot size=50></td>
  </tr></table>";
echo "
<table border= \"1\" cellspacing=\"0\" cellpadding=\"1\"width=\"100%\" >
 <tr bgcolor=\"#F3F3F3\">
      <td width=\"10%\" height=\"20\" align=\"center\"><b>Cod.</b></td>
      <td width=\"30%\" height=\"20\" align=\"center\"><b>Descrizione</b></td>
      <td width=\"10%\" height=\"20\" align=\"center\"><b>Quantità</b></td>
      <td width=\"10%\" height=\"20\" align=\"center\"><b>IVA %</b></td>
      <td width=\"15%\" height=\"20\" align=\"center\"><b>Prezzo U.</b></td>
      <td width=\"20%\" height=\"20\" align=\"center\"><b>Imponibile</b></td>
      <td width=\"5%\" height=\"20\"  align=\"center\"><b>&nbsp;</b></td>
  </tr>";
$i = 0;
while ($result = mysql_fetch_array($esegui)) {
$id = $result["id"];
$quan =   $result["quantita"];
$prezzo_uni =  $result["prezzo_un"];
$iva = $result["iva"];
$imponibile = $quan*$prezzo_uni;
$aliquota = ($imponibile*$iva)/100;

if ($iva == 4)
{
$iva4 += $aliquota;}
else
{
$iva10 += $aliquota;
}

$tot_imp += $imponibile;

 $i = (++$i % 2);

echo"
    <tr class=alternate".$i.">
      <td width=\"10%\" height=\"5\" align=\"right\">$result[codice]</td>
      <td width=\"30%\" height=\"5\" align=\"center\">$result[descrizione]</td>
      <td width=\"10%\" height=\"5\" align=\"right\">$quan</td>
      <td width=\"10%\" height=\"5\" align=\"right\">$iva</td>
      <td width=\"15%\" height=\"5\" align=\"right\">".number_format($prezzo_uni, 2, ',', '.')."</td>
      <td width=\"20%\" height=\"5\" align=\"right\" >".number_format($imponibile, 2, ',', '.')."</td>
      <td width=\"5%\" height=\"5\"><a href=\"fatt1.php?task=delete&id=$id\">Canc</a></td>
    </tr>";


  }
$tot_fatt = $tot_imp+$iva4+$iva10;


echo "
</table>
<table border=\"0\" cellspacing=\"0\" cellpadding=\"5\"width=\"100%\" height=\"100\">
    <tr>
      <td width=\"60%\" height=\"31\"><b>Aspetto dei beni</b></td>
    </center>
    <td width=\"20%\" height=\"14\">
      <p align=\"right\"><b>Tot. Imponibile</b></td>
    <center>
    <td width=\"20%\" height=\"34\"align=\"right\"><b></b>&nbsp;&nbsp;".number_format($tot_imp, 2, ',', '.')."</td>
    </tr>
    <tr>
      <td width=\"60%\" height=\"24\"><input type=text name=aspetto size=50></td>
      <td width=\"20%\" height=\"21\" align=\"right\"><b>IVA&nbsp;&nbsp; 4%</b></td>
      <td width=\"20%\" height=\"21\"align=\"right\"><b></b>&nbsp;&nbsp;".number_format($iva4, 2, ',', '.')."</td>
    </tr>
    <tr>
      <td width=\"60%\" height=\"62\" rowspan=\"2\"></td>
      <td width=\"20%\" height=\"25\" align=\"right\"><b>IVA 10%</b></td>
      <td width=\"20%\" height=\"25\"align=\"right\"><b></b>&nbsp;&nbsp;".number_format($iva10, 2, ',', '.')."</td>
    </tr>
  </center>
  <tr>
    <td width=\"20%\" height=\"35\">
      <p align=\"right\"><b>TOTALE FATTURA</b></td>
    <center>
    <td bgcolor=\"#F3F3F3\"width=\"20%\" height=\"35\"align=\"right\"><b></b>&nbsp;&nbsp;<b>".number_format($tot_fatt, 2, ',', '.')."</b></td>
    </tr>
     </table>";
echo"
<head>
<LINK REL=\"STYLESHEET\" HREF=\"invoice.css\">
</head>

<table border=\"0\" cellspacing=\"0\" cellpadding=\"5\"width=\"100%\" height=\"100\">
    <tr>
<form  action=\"" . $PHP_SELF . "\" method=\"\post\">
    <td width=\"50%\" height=\"25\" align=\"right\"><input type=\"hidden\" name=\"task\" value=\"delete_all\">
  <input type=\"submit\" class=\"btn\" Value=\"Reset\"
   onmouseover=\"this.className='btn btnhov'\" onmouseout=\"this.className='btn'\"></td>
</form>
<form  action=\"" . $PHP_SELF . "\" method=\"\post\">
  <td width=\"50%\" height=\"25\" align=\"left\"><input type=\"hidden\" name=\"task\" value=\"conferma\">
  <input type=\"submit\" class=\"btn\" Value=\"Conferma\"
   onmouseover=\"this.className='btn btnhov'\" onmouseout=\"this.className='btn'\"></td>
</form>
   </tr>
  </table>";



function delete($id) {
   mysql_query("delete from carrello WHERE id=$id");
   Header("Location: fatt1.php");
}

function delete_all() {
   mysql_query("TRUNCATE TABLE carrello");
   Header("Location: fatt1.php");
}

function conferma() {
global $numero, $usercli, $tot_fatt;

$oggi = time();
$query3 = mysql_query("INSERT INTO fatture VALUES (NULL,
'$numero', '$usercli','$tot_fatt','$oggi')");

}

switch($_REQUEST['task']) {
   
   case 'delete':
      delete($_REQUEST['id']);
      break;
      
   case 'delete_all':
      delete_all();
      break;

    case 'conferma':
     conferma();
     break;      
}
?>

In pratica compilo la fattura a pezzi.

Inserisco gli articoli prima e poi li attribuisco a un determinato cliente che scelgo da una pagina

con un menu a discesa e da cui ricavo l'id.

Primo problema:

Funziona quasi tutto, però non riesco ad inviare $usercli che sarebbe l'id_cliente

indispensabile per attribuire nel campo fatture del db una fattura al relativo cliente di appartenenza.

Il problema forse è causato dal fatto che appena clicco sul bottone conferma (ma anche ogni volta che aggiorno la pagina in un modo o nell'altro) la pagina si aggiorna e perde l'intestazione creata grazie a quell'id.

Come risolvo questa rogna?

Secondo problema:

Per catturare l'orario uso la funziona time() che invio al db

Avevo impostato il campo della data come TIMESTAMP ma vedevo visualizzato in questo

campo sempre tanti zero che non mi servivano a niente, poi ho cambiato il campo

TIMESTAMP in INT e adesso sembra ricevere i dati che comunque devono essere convertiti

per essere visualizzati in un secondo momento.

Va bene così? Sarò in grado di fare in seguito operazioni sulle date?

L'ultimo dubbio sta nel fatto che ho dovuto creare 2 form,

uno per resettare la fattura con il tasto reset e un per confermarlo altrimenti ne

funzionava uno solo. Ho fatto bene?

Vi invito, se dopo aver letto questo chilometrico post vi è rimasta ancora

un po' di pazienza, a darmi consigli su come migliorare il codice sopra

(mi rendo conto che non è il massimo dell'eleganza e dell'efficienza).

Siate buoni è Natale!

Grazie

inviato 9 anni fa
frankphp
X 0 X

 ???

risposto 9 anni fa
frankphp
X 0 X

Il campo timestamp di mysql viene aggiornato automaticamente ad ogni operazione sul record, quindi non è utilizzabile come data fattura, va bene messo come int.

Per risolvere il problema dell'id devi aggiungere un campo hidden nel form che contiene l'id del cliente (una volta che è stato selezionato) così viene inviato ogni volta e non perdi le intestazioni, è l'unico modo (io faccio così x i d.d.t. ancora non sono arrivato alle fatture); alternativa sarebbe salvarlo in sessione ma così devi verificare ogni volta che ci sia e che non rimanga una volta terminata la fattura, altrimenti ogni fattura sarà sempre per lo stesso cliente.

Non capisco perchè 2 form per la fattura, o meglio, cosa intendi per resettare?

risposto 9 anni fa
LonelyWolf
X 0 X

Il campo timestamp di mysql viene aggiornato automaticamente ad ogni operazione sul record, quindi non è utilizzabile come data fattura, va bene messo come int.

Per risolvere il problema dell'id devi aggiungere un campo hidden nel form che contiene l'id del cliente (una volta che è stato selezionato) così viene inviato ogni volta e non perdi le intestazioni, è l'unico modo (io faccio così x i d.d.t. ancora non sono arrivato alle fatture); alternativa sarebbe salvarlo in sessione ma così devi verificare ogni volta che ci sia e che non rimanga una volta terminata la fattura, altrimenti ogni fattura sarà sempre per lo stesso cliente.

Non capisco perchè 2 form per la fattura, o meglio, cosa intendi per resettare?

Ok per la data, poi per gli sviluppi ci risentiamo.

Il campo hidden lo devo aggiungere al form che invia L'ID?

Se è cosi si trova in un frame che è indipendente dal frame che invia gli articoli della fattura alla

pagina sopra (fatt1.php).

Non ho ancora provato, per la verità, però penso che se invio gli articoli

alla pagina fatt1.php perdo comunque l'intestazione visto che il form che invia l'id è separato

da quello che invia i dati degli articoli..non so se è chiaro.

Avevo pensato anche a separare l'intestazione dalla pagina fatt1.php e inserire il codice

in un'altra pagina (magari come include..non so). Dici che può funzionare?

Hai detto che fai i ddt quindi hai dovuto affrontare gli stessi problemi (devi comunque intestare il documento

e inserire gli articoli. Come hai risolto? Fammi capire meglio, per piacere.

Magari posta un po' di codice se non ti dispiace , ovviamente.

per i i form mi riferisco a questo codice:

<table border=\"0\" cellspacing=\"0\" cellpadding=\"5\"width=\"100%\" height=\"100\">
    <tr>
<form  action=\"" . $PHP_SELF . "\" method=\"\post\">
 <td width=\"50%\" height=\"25\" align=\"right\"><input type=\"hidden\" name=\"task\" value=\"delete_all\">
  <input type=\"submit\" class=\"btn\" Value=\"Reset\"
   onmouseover=\"this.className='btn btnhov'\" onmouseout=\"this.className='btn'\"></td>
</form>
<form  action=\"" . $PHP_SELF . "\" method=\"\post\">
  <td width=\"50%\" height=\"25\" align=\"left\"><input type=\"hidden\" name=\"task\" value=\"conferma\">
  <input type=\"submit\" class=\"btn\" Value=\"Conferma\"
   onmouseover=\"this.className='btn btnhov'\" onmouseout=\"this.className='btn'\"></td>
</form>
   </tr>
  </table>";

Un tasto resetta cancella i dati della fattura e azzera anche il campo carrello del DB (per il momento

ho scelto di fare così..ma non è questo il problema).

Il tasto conferma avvia la registrazione dei dati da inviare al DB.

Se li metto nello stesso form funziona solo il tasto conferma (cioè la funzione che richiama).

grazie

risposto 9 anni fa
frankphp
modificato 9 anni fa
X 0 X

Scusami ma io non ho letto interamente il tuo codice, sono andato per logica, ma per la fattura usi 2 tabelle, giusto?

Una con l'intestazione (id cliente, numero fattura, data, destinazione, ecc.) e una per il corpo della fattura (numero fattura, codice prodotto, quantità, ecc.)?

Quindi una volta inserita l'intestazione ed ottenuto il tuo numero di fattura devi passare quello insieme ad ogni prodotto, in modo che richiami la fattura e tutti i prodotti associatiu attraverso il numero.

Per i bottoni: non funzionano nello stesso form perchè li hai messi entrambi come type submit, quello di conferma deve essere submit, quello che azzera i campi deve essere reset (azzera i campi del form).

risposto 9 anni fa
LonelyWolf
X 0 X

Scusami ma io non ho letto interamente il tuo codice, sono andato per logica, ma per la fattura usi 2 tabelle, giusto?

Una con l'intestazione (id cliente, numero fattura, data, destinazione, ecc.) e una per il corpo della fattura (numero fattura, codice prodotto, quantità, ecc.)?

Quindi una volta inserita l'intestazione ed ottenuto il tuo numero di fattura devi passare quello insieme ad ogni prodotto, in modo che richiami la fattura e tutti i prodotti associatiu attraverso il numero.

Scusami, ma non penso di aver capito :-[

Mi serve conservare l'id_user (id cliente insomma) per associare la fattura (numero, totale ecc) A

quel determinato cliente..il numero fattura di per se mi serve a poco.

Questo id_user insomma non si può proprio "conservare?

Per i bottoni: non funzionano nello stesso form perchè li hai messi entrambi come type submit, quello di conferma deve essere submit, quello che azzera i campi deve essere reset (azzera i campi del form).

Ma quel bottone submit non azzera i campi di un form html ma richiama una funzione che cancella,

con una query, i dati fin ad allora inseriti in un campo del db (carrello).

Forse è colpa mia, ma non ci siamo intesi  ;D :) ;)

ciao e grazie ancora in ogni caso.

risposto 9 anni fa
frankphp
X 0 X

Allora cosa cambia?, mettilo come input type=button e sei a posto; il conflitto che hai è perchè sono entrambi submit.

Allora non capisco propio come fai a fare una fattura partendo dalla fine!

Cmq, gli articoli sono associati alla fattura tramite il numero della fattura stessa non ha senso associarli tramite id cliente, altrimenti come dividi gli articoli da una fattura di oggi da una del mese prossimo?

risposto 9 anni fa
LonelyWolf
X 0 X

Allora, mi son messo a guardare il tuo codice:

1 - perchè la parte HEAD è successiva ad altro output? la mandi dopo le intestazioni della fattura e addirittura dopo il body!

2 - perchè il numero della fattura lo metti in un textbox? non deve essere modificabile dato che l'hai già calcolato, non basta un echo? secondo me bastava usare un campo auto_increment e non ti dovevi nemmeno preoccupare di quello; inoltre non fa parte di nessun form, come anche la data.

3 - le annotazioni sono esterne al form.

4 - mandi 2 volte la parte head!

5 - questo:

<input type=\"submit\" class=\"btn\" Value=\"Reset\"
   onmouseover=\"this.className='btn btnhov'\" onmouseout=\"this.className='btn'\">

mettilo di fianco al bottone di conferma, cambianto il type da submit a button, così:

<input type=\"button\" class=\"btn\" Value=\"Reset\"
   onmouseover=\"this.className='btn btnhov'\" onmouseout=\"this.className='btn'\">

e ti risparmi un form, il task passalo come parametro alla funzione e non come campo hidden, così hai risolto il problema (e il codice è più leggibile).

6 - l'id cliente lo puoi passare alle varie funzioni come parametro, così lo integri nell'url quando reindirizzi la pagina e lo recuperi con $_GET, previo controllo ovviamente.

Es:

function delete($id,$idcliente) {
  mysql_query("delete from carrello WHERE id=$id");
  Header("Location: fatt1.php?idcliente=$idcliente");
}

7 - non chiudi mai la connessione al db, va bene che viene chiusa da sola, ma è sempre meglio metterla nel codice; idem per i risultati, non li "liberi" mai (freeresult)

risposto 9 anni fa
LonelyWolf
X 0 X

Allora cosa cambia?, mettilo come input type=button e sei a posto; il conflitto che hai è perchè sono entrambi submit.

Allora non capisco propio come fai a fare una fattura partendo dalla fine!

Cmq, gli articoli sono associati alla fattura tramite il numero della fattura stessa non ha senso associarli tramite id cliente, altrimenti come dividi gli articoli da una fattura di oggi da una del mese prossimo?

scusami manca una query nel codice sopra. Non l'ho inserita perchè dovevo

ancora "limare" il tutto.

alla fattura associo l'id cliente (la fattura appartiene ad un solo cliente)

e ai vari record dei prodotti acquistati associo l'id_fattura (i vari prodotti fanno parte di una certa fattura,

id_fattura o numero della stessa è uguale per lo scopo, non ti pare?)

In ogni caso ho risolto il problema dell'id_cliente.

Come hai suggerito tu ho inserito il campo hidden:

<INPUT TYPE=\"HIDDEN\"  name=\"id2\" value=\"$usercliente\">

che passa l'id2 alla funzione:

function conferma($id2) {ecc

L'intestazione scompare lo stesso ( ci devo lavorare ma non è così importante per il momento)

ma l'id del cliente è correttamente archiviato nel db quindi adesso ho tutti i dati salvati)

ma va bene.

Rimane il fatto (anche se anche questo non è fondamentale) che l'intestazione scompare ancora inserendo i vari articoli. Per risolverlo (ripeto anche se non è necessario) dovrei cambiare un po' di codice dei frame

per quanto ho capito..ma adesso non ne vale la pena.

No! Assolutamente non sono partito dalla fine.

I vari problemi che ho dovuto affrontare sono dovuti alla mia scarsa esperienza con il php

(e la programmazione in genere) che trascuro per molto tempo.

grazie

ps: ho dato un'occhiata ai tuoi suggerimenti del successivo post.

Tutte cose giuste , ma sono problemi marginali. L'importante è aver risolto

il problema principale; poi come ti ho detto devo ancora finire di mettere a posto il codice

e conto sul tuo aiuto anche per il futuro (il progetto è solo all'inizio!)

Grazie ancora e ciao

risposto 9 anni fa
frankphp
modificato 9 anni fa
X 0 X

allora, giusto per concludere

Dovrei passare i dati di una tabella (carrello) momentanea così

strutturata:

`id` int(5) NOT NULL auto_increment,

`codice` varchar(30) NOT NULL default '',

`descrizione` text NOT NULL,

`quantita` int(11) NOT NULL default '0',

`prezzo_un` int(11) NOT NULL default '0',

`iva` int(5) NOT NULL default '0',

a quest'altra che registra gli acquisti definitivi dei prodotti immessi nella fattura

che si chiama prodotti_acquistati:

`id_acquisto` int(5) NOT NULL auto_increment,

`codice` varchar(30) NOT NULL default '',

`descrizione` text NOT NULL,

`quantita` int(11) NOT NULL default '0',

`prezzo_un` int(11) NOT NULL default '0',

`iva` int(5) NOT NULL default '0',

`id_fattura` int(5) NOT NULL default '0',

Dovrei passare di ogni articolo: il codice, la descrizione, la quantità, il prezzo unitario e l'iva (id_fattura lo ricavo come già avete visto, ma deve essere inserito per ogni record relativi alla fattura stessa)

fra i vari

mysql_affected_rows()

mysql_fetch_row() e il ciclo for per leggere e inserire

ogni record all'altra tabella (con l'id fattura) mi sono incartato :-\

Potresti dirmi come si fa precisamente, per piacere?

Grazie

risposto 9 anni fa
frankphp
X 0 X

Scusa ma sarò molto assente in questi giorni, niente ufficio niente connessione (o quasi!)

risposto 9 anni fa
LonelyWolf
X 0 X

ragazzi, vorrei continuare questa discussione se non vi dispiace.

Mi hanno suggerito di dare un'occhiata qui:

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

ma non ho capito come adattare il tutto alle mie esigenze, visto che c'è un id_ fattura da aggiungere

alla fine. Potete aiutarmi?

grazie

risposto 9 anni fa
frankphp
X 0 X

Ciao

Ho provato anche a fare così:

function conferma($id2) {
if($id2 != 0){

global $numero, $tot_fatt;
$oggi = time();

$sql3 = mysql_query("INSERT INTO fatture (numero_fatt, id_cliente, totale, data)
VALUES ('$numero', '$id2', '$tot_fatt', '$oggi');");
$id_fatt =    mysql_insert_id();

$sql4 = mysql_query("SELECT * FROM carrello");

while( $row2 = mysql_fetch_array($sql4) )
{
$codi = $row2['codice'];
$desc = $row2['descrizione'];
$qua = $row2['quantita'];
$prezzou = $row2['prezzo_un'];
$iv = $row2['iva'];


$sql5 = mysql_query("INSERT INTO prodotti_acquistati (codice, descrizione, quantita, prezzo_un, iva, id_fattura)
VALUES ('$codi', '$desc', '$qua', '$prezzou', '$iv', '$id_fatt);");
  }

}
else {
echo "<b><font color=\"#FF0000\">ATTENZIONE. Inserimento non riuscito: intestazione fattura non inserita</font></b>";}
}

Questa funzione in pratica carica i dati generali della fattura e poi

ottenuto 'id_fattura dovrebbe inserire i vari articoli nella

tabella definitiva con l'id_fattura come potete vedere, ma la query $sql5 non funziona.

Potete dirmi dove sbaglio?

grazie

risposto 9 anni fa
frankphp
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda