Newsgroup: it.comp.www.php
Titolo: Problema interrogazione mysql

Salve a tutti
ho un problema da risolvere e spero che qualcuno mi aiuti:
quando inserisco i dati nel form, volontariamente non inserisco i dati
riguardanti l'intervento, per far si che quando il cliente immette il
codice nella ricerca a lui riservata gli compare la scritta --- Salve ,
siamo spiacenti, ma il suo elettrodomestico non è ancora pronto! ---
e d invece dopo che è stato riparato ed inserisco l'intervento
all'immissione del codice deve comparire -----  come sotto specificato
che il suo el ----etc.etc.
Cosa devo modificare in questo listato
<?php
	$db=mysql_connect("127.0.0.1", "root", "");
	$comando="SELECT * FROM mio WHERE codice = '$codice ' ";
	$rs=mysql_db_query("Sql125583_1",$comando);
	$y=0;
	while($dati=mysql_fetch_row ($rs))
	{
	if ($y==0)
		echo "<table align=center border=0 width=70%>";
		$id=$dati[0];
		echo "<tr><td colspan=2 align=center bgcolor=#FFFFCC><b>---
Inserimento Dati Personali n° $id ---</b></td></tr>";
		$nome=$dati[1];
		$cognome=$dati[2];
		$via=$dati[3];
		$citta=$dati[4];
		$tel=$dati[5];
		$cel=$dati[6];
		$posta=$dati[7];
		$codice=$dati[8];
		$dat=$dati[9];
		$marca=$dati[10];
		$modello=$dati[11];
		$famiglia=$dati[12];
		$gar=$dati[13];
		$difetto=$dati[14];
		$intervento=$dati[15];
		$note=$dati[16];
		echo "<table align=center border=0 width=70%>";
		echo "<tr><td><b> --- SALVE SIG. $nome   $cognome ---</b></td></tr>";
		echo "<tr><td><b>Il Suo $marca   Modello   $modello  è gia pronto da
ritirare</b></td><td></td></tr>";
		echo "<tr><td><b>le comunichiamo che l'Intervento Tecnico è
stato:</b></td><td></td></tr>";
		echo "<tr><td><b>$intervento</b></td></tr>";
		$y++;
    };
	if ($y==0)
				echo "<tr><td colspan=4 align=center> Salve , siamo spiacenti, ma
il suo elettrodomestico non è ancora pronto!</td></tr></table> ";
	else
echo "</table>";
 
mysql_close($db);
?>

 
Premesso che il codice è illeggibile (probabile colpa del newsreader) e 
ci sono deile scelte non corrette (usa mysql_fetch_array al posto di 
mysql_fetch_row), sostituisci quel $y=0 con il corretto mysql_num_rows
$sql = ...
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) == 0) {
    echo "Elettrodomestico non ancora pronto";
} else {
    $row = mysql_fetch_array($res); [1]
    echo 'Caro signor ' . $row['nome'];
}
[1] Ho dato per scontato che a $codice corrisponde un solo record 
(magari è una chiave primaria). Se permetti aggiungo un altro 
particolare: non utilizzare un campo numerico autoincrement come codice 
di riparazione (perchè da come hai strutturato la query), chiunque 
potrebbe vedere le riparazione degli altri... 
(
www.sito.it?cod_riparazione=123
)
	Francesco

Francesco F ha scritto:
Salve Francesco ti ringrazio per avermi risposto, nella premessa già
troppo lunga non potevo anche dire che è solo da 20 giorni che mi sono
avvicinato al php ( e figurati che non conosco nemmeno l'html) dopo
aver letto le prime 200 pagine di un libro mi sono reso conto che ero
più confuso che persuso, e quindi ho cominciato a lavorare su delle
pagine fatte da un mio amico, questo per dirti che ancora non mastico
quasi per nulla il php, ma inizio a modificarlo tanto da aver fatto un
lavoretto alla mia compagna che gestisce un centro assistenza con il
quale può gestire un pò di magazzino e le ricevute per i clienti.
Cercherò di mettere in pratica il codice che mi hai trascritto, ma non
posso perchè non riesco a farlo, di renderlo leggibile o altro.
Spero di ritrovarti ancora in caso di necessità anche perchè non
conosco nessuno che lavora con il php . Grazie ancora

amatog...@siracusacity.com
 ha scritto:
Salve Francesco, ho cercato di capire come inserire il codice da Te
consigliatomi, ma nulla da fare
allora il mio problema è:
Dopo aver inserito tutti i dati, tranne l'intervento (che viene
inserito quando il pezzo è riparato)
tramite il codice (che non è  indicizzato, e nemmeno autoincrement) IL
Cliente dovrebbe poter vedere se il suo elettrodomestico è pronto.
Se ho inserito l'intervento allore dovrebbe risultare pronto
Se non ho inserito l'intervento dovrebbe rispondere che non è ancora
pronto.
Partendo dal presupposto che non capisco ancora nulla della logica del
php cosa posso fare?
So che chiedo troppo, ma se mi scrivi $sql.... etc , io non so cosa
mettere al posto dei puntini e mi viene da piangere hihihihi

 
L'avevi già scritto te nel primo post! A video avrai un campo dove 
l'utente immette il codice, diciamo via post, giusto? Se la variabile 
post è codice (e di tipo strettamente numerico), avrai:
if(isset($_POST['codice'])) {
   if(preg_match ("/^([0-9]+)$/", $_POST['codice'])) {
     $sql = "SELECT * FROM mio WHERE codice = '" . $_POST['codice'] . "';";
     $res = mysql_query($sql) or die(mysql_error());
     if(mysql_num_rows($res) == 0) {
       echo "Elettrodomestico non ancora pronto";
     } else {
       $row = mysql_fetch_array($res); [1]
       echo 'Caro signor ' . $row['nome'];
     }
   } else {
      echo "Il valore passato via POST non è valido";
   }
}
Buttata giù con diversi errori....
	Francesco

Ciao Francesco, sono riuscito a sistemare il listato che mi hai mandato
e funziona correttamente, come dicevi tu c'erano solo alcuni errori che
ho individuato e sistemato.
Ma purtroppo questa non è la soluzione che ti domandavo, il problema
era nel far riconoscere che l'articolo era già pronto quando la mia
compagna aggiungeva l'intervento eseguito nel db, che fino a quel
momento era un campo vuoto. In poche parole
il cliente immette il codice, se il campo intervento nel db non è
ancora stato inserito(inserito successivamente) deve restituire che non
è pronto, se invece l'intervento risulta inserito deve dire che
l'elettrodomestico può essere ritirato dal sig. etc.etc.
Mentre ci sono, il listato che mi hai mandato serve per i solo
numerici, se volessi modificarlo per alfanumerici?
PS Se ti sei scocciato non preoccuparti sei stato molto gentile e ti
ringrazio

 
Mi sembrava di aver fatto proprio ciò :-)
$sql = "SELECT * FROM mio WHERE codice = '" . $_POST['codice'] . "';";
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) == 0) {
    echo "Elettrodomestico non ancora pronto";
} else {
    $row = mysql_fetch_array($res); [1]
    echo 'Caro signor ' . $row['nome'];
}
Resta da capire una cosa: codice cos'e'? Se è un codice identificativo 
della riparazione che lasci al cliente, nel caso sopra se tale codice 
non è nella tabella mio dà il mex "Elettrodomestico non ancora pronto"; 
nel secondo caso, ti ritorna il contenuto della tabella mio, relativo 
alla riga codice.
Tale implementazione ha un problema: se il codice che inserisce l'utente 
è sbagliato oppure se la riparazione non stata ancora effettuata dà il 
medesimo errore.
	Francesco

Allora:
il codice viene assegnato contemporaneamente alla ricevuta (che sarebbe
contemporaneamente la gestione del cliente e la gestione
dell'elettrodomestico dove quindi faccio inserire tutti i dati, sia
personali che dell'elettrodomestico che questo codice.Immetto tutti i
dati nel db che poi riutilizzo a mio piacere , per le ricerche varie
quando chiamano tramite l'id per sapere se hanno lasciato accessori ,
per stampare la ricevuta del cliente . Il codice mi serve solo per il
cliente in modo da controllare se il suo elettrodomestico è pronto
oppure no. Quindi se la cliente esce dal negozio e va a casa a
controllare dovrebbe avere come risposta che il suo elettrodomestico
non è pronto e questo dipende dal fatto che nel db il campo intervento
è ancora vuoto, mentre troverà la risposta che è pronto solo quando
tramite modifica del record si immetterà l'intervento tecnico.
Funziona tutto, quello che non riesco a fare e controllare richiamando
il record dal codice se il campo intervento è vuoto (ed allor deve
dare risposta NO) o se è pieno ed allora deve dare risposta SI).

 dare risposta NO) o se è pieno ed allora deve dare risposta SI).
Allora abbiamo un problema di comunicazione!
Posta il codice e vediamo cosa succede perchè quello che ti avevo 
precedentemente inviato fa proprio quello che dici. Alcune volte parli 
di tabelle, altre volte di campi, ma questo "intervento" cos'e' una riga 
della tabella interventi o un campo di un'altra tabella? Nel mio 
esempio, era chiaramente una riga della tabella interventi (visto che 
quasi sicuramente avrai la data di riparazione, il costo della 
riparazione, il tecnico che l'ha riparato, e compagnia bella!)
	Francesco

Ho inserito il tutto nel mio sito così potrai renderti conto del
funzionamento
http://www.siracusacity.com/miodb
Nel DB ho creato due tabelle, una per gestire (si fa per dire) il
magazzino
ed una per gestire gli elettrodomestici in entrata se vai in
amministrazione lo potrai vedere dal form
I dati del form in GESTIONE ARTICOLI fanno parte della tabella
denominata 'mio' e come chiave primaria hanno id - autoincrement , non
ci sono altre tabelle o db collegati (non riuscirei nemmeno a farlo).
Praticamente in questo momento funziona in questo modo:
 quando viene il cliente faccio riempire tutto il form e NON faccio
inserire il codice e l'intervento, nella ricevuta che si da alla
cliente faccio mettere a penna il codice così quando la cliente da
casa
dall'index vuole vedere se il suo elettrodomestico è pronto immette
quel codice ( il db non lo trova e gli dice che non è pronto).
Quando l'elettromestico è stato riparato sempre dall'amministrazione
(inserisci intervento) faccio inserire sia il codice che l'intervento,
così quando la cliente proverà ad immettere il codice il db lo trova
e gli dice che è pronto.
In questo modo funziona, ma .......
il lavoro diventa anche cartaceo nel senso che devo scrivere il codice
a parte, poi immeterlo insieme all'intervento.
Credo sia più corretto invece inserire il codice mentre si compila il
form, ed il controllo passerebbe al db , quando è stato inserito il
campo intervento dice pronto, altrimenti dice non pronto.
Passarti tutto il codice posso anche farlo, ma di quali pagine?
Ti ringrazio sempre e scusa se non so spiegarti tecnicamente il
problema ma ci riesco solo così

 
Ehi, l'area amministrazione č accessibile a tutti!
Provvedi immediatamente a bloccarla
 
	Francesco

Francesco F ha scritto:
si la ho scritta così per te
nel sito ufficiale non la trovi
a proposito mi dai un tuo parere sul lavoretto che sto facendo?
ciao

 In questo modo funziona, ma .......
Ripeto, secondo me hai sbagliato approccio. Io lo modificherei nel 
seguente modo:
l'utente ti porta il ferro da riparare, te inserisci i dati (presenti 
nella schermata inserisci dati, il sistema genera un codice univoco non 
progressivo da dare al cliente insieme alla ricevuta.
Nella tabella mio, aggiungi un campo che ti indica se la riparazione è 
stata evasa e altri campi informativi sulla riparazione (costo, tecnico 
e chi più ne ha più ne metta)
L'utente dalla pagina Controllo Consegna mette il codice che gli hai 
dato, nel db c'e' un *solo record* assegnato a tal codice, controllo il 
campo "evaso", se è falso comunichi "In lavorazione" altrimenti "Bene 
riparato, importo xxxx, e compagnia bella"
Se il codice inserito è fasullo, avrai record non trovato.
	Francesco

!!!::::::::::::::::::::::::
ho letto con molto interesse, ma mentre leggevo (e lo ho dovuto fare
almeno tre volte per capire cosa dovevo fare) ridevo da solo
Hai perfettamente ragione sull'approccio alla logica del funzionamento,
ma non saprei da dove cominciare per fare quello che dici.
Ho cominciato a guardare il php perchè avevo chiesto ad una ditta di
automatizzare tutti i servizi di 
siracusacity.com
, il sito che da anii
lavoro manualmente, e dopo che mi hanno chiesto 4000 euro mi ero
allarmato, ma adesso che inizio a vedere da dentro le cose capisco che
per il lavoro che c'è da fare era un buon prezzo. scusa per la
divagazione, ma sono momentaneamente giù di morale per le mie
incapacità di programmazione capisco che devo studiare molto di più e
forse tra qualche anno potrò fare qualcosa

 
Hai già fatto il tutto, basta cambiare alcune cose, non demoralizzarti!
Ovviamente non c'e' una soluzione unica per un problema (e nemmeno 
perfetta), ti ho detto quella che secondo me è la più semplice.
Alla fine devi cambiare la pagina dell'inserisci dati e inserisci 
intervento.
	Francesco

amatog...@siracusacity.com
 ha scritto:

zzo! che casino!
Aggiungi al database un campo "riparato" si/no così chi si occupa di 
assegnare le riparazioni deve solo cliccare su "Riparato" et voilà fai 
risparmiare tempo a chi lavora perché non deve andare alla ricerca di 
codici e ridigitarli (evitando anche potenziali errori di battitura) ed 
ottieni un sistema più semplice da gestire.
Buon lavoro