Agenzia immobiliare

Fatto, adesso l'errore che mi da è:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:....
 
ciao
verifica che le due variabili in rosso siano scritte uguali (anche siquello che ho io sì)

$risultato=mysql_query($query);
//la seguente istruzione è utile soprattutto se le selezioni possibili sono + di una
$esiste=mysql_num_rows($risultato);

poi prova a scrivere appenasotto
PHP:
$risultato=mysql_query($query);
var_dump($risultato);//questa riga poi la togli  
    //la seguente istruzione è utile soprattutto se le selezioni possibili sono + di una  
    $esiste=mysql_num_rows($risultato);

se la query va a buon fine dovresti ottenere un scritta (resuorce), altrimenti (bool)FALSE.
se è false mysql_num_rows ti da qull'errore che hai detto, ma l'errore nasce molto prima.
ora sta a vedere dove e quale
 
Risultato FALSE, però non saprei dove cercare visto che ho fatto copi/incolla.

Comunque questa sera mi sono comperato un libro in inglese su PHP MYSQL e JAVASCRIPT, così spero di parlare un po' più la stessa lingua.

Grazie di tutto

P.S.: di fatto mi rodo perché mi sembra di non essere molto lontano dalla soluzione, so collegare hph a mysql, so immettere dati da pagine php a tabelle mysql, mi manca solo di riuscire ad estrapolarne i dati e sono a cavallo!

Luca
 
ciao
visti? così impari anche il debag:)
come preventivato l'errore nasce prima, quindi bisogna salire
cancella anzi commenta quel var_dump tanto ormai sappiamo che l'errore è prima
sali di due posti
e metti
var_dump($query);
ti dovrebbe dare string(xy) "SELECT......"
cioè fartivedere come è fatta la stringa, guarda se secondo te e secondo le selezioni che hai fatto è giusta
dimenticavo quel xy sarà la lunghezza della stringa
 
Ciao Borgo (anche a tutti quelli che seguono).
Dopo alcune ore di tribolazione passate a smanettare e studiare durante il we, sono riuscito a fare funzionare il programma però vorrei chiederti alcuni consigli/chiarimenti per proseguire.

La prima cosa ch ho fatto e non ho realmente capito perché (ma funzia) è stata quella di cambiare il comando if($scelta==0) in if($scelta=="0"), altrimenti questa if non funzionava e mi dava sempre tutti gli immobili. Contrariamente anche a come indicato nel mio libro, sembra che debba dichiarare il valore come stringa e non come valore vero e proprio.

Per visualizzare i dati entro una tabella con una classe CSS, durante il ciclo "while" esco da PHP, creo la tabella entro la quale inserisco variabili PHP così
PHP:
<?php echo $tipo; ?>
, per poi rientrare prima di uscire dal ciclo.
Mi sembra macchinoso ed ho visto che tu usi il comando echo (nel form) per comandi HTML entro codice PHP, si può fare anche nel caso della citata tabella?

Sempre il citato form (che trovo intelligentissimo) la scelta fatta sparisce appena cliccato sul pulsante Submit. Io volevo che rimanesse fissa all'ultima selezione. Ho pensato a "static", ma non posso usarlo perché non siamo all'interno di alcuna funzione. Soluzioni?

Ultimo (per ora), se volessi aggiungere altri campi di ricerca in combinazione a quello implementato quale strada devo percorrere?

In trepidante attesa di tue illuminazioni, e continuando a scervellarmi, ti auguro buona giornata:elvis:

Luca
 
ciao
....a smanettare e studiare durante il we
tanto col tempo che fà

if($scelta=="0")
va bene comunque confronta la stringa che è 0 se non hai record che soddisfano le condizioni

....si può fare anche nel caso della citata tabella?
si

Io volevo che rimanesse fissa...
devi usare le sessioni

....se volessi aggiungere altri campi di ricerca in combinazione
devi aggiungere nel form le selezioni che vuoi fare e nella parte di php oltre a leggere i vari tipi di scelta
o con degli if concatenati o con switch devi costruire la clausola WHERE
es. (guarda che cambio leggermente i nomi delle variabili) e modifico la variabile $where
!!verifica i nomi che ho messo con quelli che usi nel db!!
PHP:
<?php
//.....    
$where=" WHERE ";
	$scelta_loc=$_POST['localita'];//come prima 0 se tutte
	$scelta_num_stanze=$_POST['num_stanze'];//sempre 0 se indifferente
	//per il prezzo conviene fare minore di
	$scelta_prezzo=$_POST['prezzo'];//sempre 0 se tutti
	//quindi devi combinare le tre scelte
	if($scelta_loc=="0"){
		$loc="";//SE 0 LASCIO VUOTA
	}else{
		$loc=" localita='$localita' AND";
	}
	if($scelta_num_stanz=="0"){
		$stanze="";//SE 0 LASCIO VUOTA
	}else{
		$stanze=" num_stanze='$scelta_num_stanze' AND";
	}
	if($scelta_prezzo=="0"){
		$prezzo="";//SE 0 LASCIO VUOTA
	}else{
		$prezzo=" prezzo<'$scelta_prezzo' AND";
	}
	
	//e costruisci la clausola
	$where .=$loc.$stanze.$prezzo." 1=1";//dopo ti spiego quell' uno=uno finale
	/*in funzione delle scelte fatte la $where diventa
	tutte 0 $where = "WHERE 1=1"
	poi le varie combinazioni es. loc=padova e prezzo 100000
	$where = "WHERE localita='padova' AND prezzo<'100000' AND 1=1"
	quell' uno=uno viene messo perchè se non fai alcuna scelta e non lo mettessi
	$where sarebbe = "WHERE " e ti darebbe errore oppure se ai fatto una scelta
	avresti un AND finale non chiuso e quindi errore
	1=1 elimina questi errori senza dover ricorrere ad astruse complicazioni
	*/
//.....
?>
un consiglio: metti, in fase di prova, un var_dump dopo aver costruito la stringa di query in modo da vedere come risulta.
più complichi le possibilità di scelta e più il var_dump ti è utile

il tutto SEO che in questo caso vuol dire: salvo errori e omissioni0:)
 
Premesso che non ho ancora aggiunto campi di ricerca, però:
1) ho trovato la soluzione senza sessioni per la persistenza dell'ultima scelta fatta mettendo
PHP:
<option selected="<?php $scelta; ?>"><?php echo $scelta; ?></option>
fatto giusto?

2) Ho provato ad utilizzare come attributo select onchange="this-forum.submit()", ma mi restituisce errore di variabile come se non acquisisse alcuna selezione, riesci ad aiutarmi?

Luca
 
ciao
dopo il submit (o anche un aggiorna) la variabile $scelta non esiste più.

per la seconda domanda non so come aiutarti (di js ne capisco poco).
forse devo avere qualcosa da qualche parte se lo trovo te lo posto
 
Vediamo se sono un buon allievo:
ho modificato il codice così
PHP:
<option selected="<?php $_POST['camere']; ?>"><?php echo $_POST['camere']; ?></option>
e per ora sembra funzionare bene, riesco a vedere l'ultima scelta fatta nella select.

Inoltre, 1=1 secondo me serve nel caso tuti i valori di selezione siano "" per non chiudere il comando "SELECT * FROM immobile WHERE ; che darebbe errore, gli do un'equazione con ovvio valore di true così continua a selezionare tutto il db. Corretto?

Per la tabella html dentro il php mi dai un esempio di codice? (mi riferisco alla domanda fatta stamane)

Luca
 
ciao
per quanto riguarda la tabella (penso che in questo caso tu intenda <table>...</table>) guarda il post #38.
per quanto riguarda 1=1 serve sia che tutte le scelte siano vuote per cui diventa

"SELECT....WHERE 1=1"

se una scelta non (o più d'una) è vuota es. diventerebbe (sensa 1=1)
"SELECT...WHERE localita='$localita' AND" e quindi errore (la query termina con un AND senza nulla)
con quell'1=1 la select diventa
"SELECT...WHERE localita='$localita' AND 1=1"
non devi metterlo nel db, ma solo nella select
è solo un sistema comodo per non fare script in più per togliere o il WHERE (se tutte vuote) o l'ultimo AND
 
Domanda del giorno, come faccio a far si che appena aperta la pagina degli immobili venga visualizzato tutto il db, che poi l'utente andrà a ridurre in base alla selezione di cui abbiamo discusso i giorni scorsi?

Ho provato ad inserire il codice nel file di connessione al db, richiamato con require_once, il risultato è che apre sì la tabella correttamente, ma quando vado a fare una selezione il risultato viene accodato a questa prima che non se ne va:incazz2:

Luca
 
Scusa, ho risolto aggiungendo codice all'if isset iniziale, ho messo un else che carica tutta la tabella del db.

Non preoccuparti che comunque oggi ti chiederò qualcosaltro...:hammer:
 
Ti ringrazio, ma ottengo lo stesso risultato con il comando onchange="this.form.submit()".
Il punto è questo (e quì ho bisogno del tuo aiuto esperto), per farlo funzionare ho dovuto aggiungere la variabile $_POST['localita'] all'IF iniziale che seleziona il db nel momento in cui premo il pulsante Submit. Così diventa if(isset($_POST['Submit']) OR ($_POST['localita'])).
Sembra funzionare tutto perfettamente ma non è così, se chiudo la pagina e la riapro mi da errore proprio a quella linea perché la variabile $_POST['localita'] non è ancora stata definita.

Non c'è un modo di fare un controllo solo al cambiare di valore di una variabile che però non dia errore se questa non è ancora stata definita?

Luca
 
ciao
per vedere se $_POSU['localita'] è definite metti un altro isset

PHP:
if(isset($_POST['Submit']) OR isset($_POST['localita'])){
//....

almeno mi sembra di aver capito che tu voglia fare una cosa del genere, cioè entrare nell if sia che tu abbia premuto il submit o che tu abbia scelto la località.
credo pero che tu abbia dei problemi nel caso che tu debba mettere altri tipi di scelta, perchè ti va subito nel db appena selezioni la località e non ti da il tempo di fare altre selezioni
 
No, almeno in locale sta funzionando perfettamente anche con un altra opzione così:
PHP:
if(isset($_POST['Submit']) OR ($_POST['localita']) OR ($_POST['camere']))

Il problema è quando richiamo per la prima volta la pagina, perché stranamente "digerisce" l'index: Submit ma non quello localita e camere.

La sluzione potrebbe essere creare un if ancora superiore con un controllo sul primo caricamento pagina che mi mandi fuori da questo if dove entrerò poi ad ogni iterazione del form.

Sono stato chiaro?

Luca
 
PHP:
<?php require_once("Connessione.php");

	$default_localita="OGNI";
	$default_locali="OGNI";
	
if(isset($_POST['Submit']) OR ($_POST['localita']) OR ($_POST['camere'])){//attento maiuscole/minuscole 
    //leggo il valore della scelta fatta 
    $scelta_localita=$_POST['localita'];
	$default_localita=$scelta_localita;
	$scelta_locali=$_POST['camere'];
	$default_locali=$scelta_locali;
	$where=" WHERE ";

    //e in funzione della scelta fatta creero la query di interrogazione 
    if($scelta_localita=="OGNI"){ 
        $scelta_localita=""; //metto a stringa vuota 
    }else{ 
        $scelta_localita=" localita='$scelta_localita' AND";
    }
	if($scelta_locali=="OGNI"){ 
        $scelta_locali=""; //metto a stringa vuota 
    }else{ 
        $scelta_locali=" camere='$scelta_locali' AND";
    }
	$where .=$scelta_localita.$scelta_locali." 1=1";
    //interrogo nuovamente per cercare gli immobili 
    //penso che tu abbia compreso come risulta la variabile $where dopo l'if 
    //stringa query, con * questa volta leggo tutti i campi del record e non solo il campo localita 
    $query="SELECT * FROM immobile".$where; 
	//e cioe la query cambierà in funzione della scelta fatta 
    //volendo porei aggiungere alla riga ORDER BY prezzo per poi eventualmente averli in ordine di prezzo 
    //è evidente che posso fare tutte le selezioni possibili, sul prezzo, se affitto o vendita, numero di stanze... 
    // e interrogo il db 
    $risultato=mysql_query($query);
    //la seguente istruzione è utile soprattutto se le selezioni possibili sono + di una 
    $esiste=mysql_num_rows($risultato);//conto quanti record (immobili) esistono con le condizioni richieste 
	if($esiste==0){ 
        //non ci sono immobili con le condiszioni richieste 
       echo "<h4>Non ci sono immobili con le condizioni richieste</h4>"; 
    }else{ 
        //esiste almeno uno quindi devo visualizzare i suoi dati 
        //ciclo con while perchè devo visualizzare tutti gli esistenti con le caratteristice selezionate 
        echo "La selezione ha fornito $esiste immobili<br>"; 
		while($riga=mysql_fetch_array($risultato)){ 
            //a ogni ciclo del while leggo un record e estraggo i suoi campi 
            $tipo=$riga['tipo']; 
            $camere=$riga['camere']; 
            $localita=$riga['localita']; 
            $prezzo=number_format($riga['prezzo'], 0, ",", "."); 
            $disp=$riga['disp']; 
			echo "<table class=\"table3\" width=\"99%\" align=\"center\">
					<tbody><tr>
					<td width=\"15%\" bgcolor=\"#696969\"></td>
      <td width=\"30%\" bgcolor=\"#dcdcdc\"> $localita <br /> $tipo <br />composto da  $camere locali <br  />al prezzo di €$prezzo<br />contratto $disp</td>
    </tr></tbody></table>";// in alternativa si può fare tabella uscendo da PHP e rientrando prima di chiudere il while
		
        } 
    } 
} else {
	echo "siamo in ELSE";
	$query="SELECT * FROM immobile"; 
	//estraggo tutti i record dal db
    
    $risultato=mysql_query($query);
    //la seguente istruzione è utile soprattutto se le selezioni possibili sono + di una 
    $esiste=mysql_num_rows($risultato);//conto quanti record (immobili) esistono con le condizioni richieste 
	
		while($riga=mysql_fetch_array($risultato)){ 
            //a ogni ciclo del while leggo un record e estraggo i suoi campi 
            $tipo=$riga['tipo']; 
            $camere=$riga['camere']; 
            $localita=$riga['localita']; 
            $prezzo=number_format($riga['prezzo'], 0, ",", "."); 
            $disp=$riga['disp']; 
			echo "<table class=\"table3\" width=\"99%\" align=\"center\">
					<tbody><tr>
					<td width=\"15%\" bgcolor=\"#696969\"></td>
      <td width=\"30%\" bgcolor=\"#dcdcdc\"> $localita <br /> $tipo <br />composto da  $camere locali <br  />al prezzo di €$prezzo<br />contratto $disp</td>
    </tr></tbody></table>";
  	}
}
?> 

<p></p> 
<!--  
nota il costrutto action è dinamico ti permette di cambiare nome alla pagina senza preuccupazione  
e come si può entrare ed uscire da php a html nei punti che servono 
--> 


<div style="position:fixed; top:145px; right:10px; width: 141px; height: 89px;">
<form name="form1" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 
<!--faccio una selct per scegliere la località --> 
<fieldset>
<legend style="color:#FFF">SELEZIONA</legend>

<p style="text-align:left; font-size:9px; color:#FFF">DOVE</p>
    <select  name="localita" id="localita" title="dove" onchange="this.form.submit()"> 
    <option selected="<?php $default_localita; ?>"><?php echo $default_localita; ?></option>
    <option value="OGNI"><strong>OGNI</strong></option> <!--onchange='this.form.submit()'-->
      <?php 
//entro in php per farla dinamica 
//interrogo il db per sapere in quali località ci sono gli immobili 
//faccio la solita stringa di query 
$query="SELECT localita FROM immobile GROUP BY localita ORDER BY localita"; 
/*in pratica tradotto in linguaggio umano 
CERCA le località esistenti NELLA tabella immobili, RAGGRUPPANDO PER località (se due o più immobili a padova fai vedere padova una volta sola) 
METTENDO IN ORDINE (in questo caso) alfabetico le località es. padova treviso venezia 
*/ 
//faccio l'interrogazione, in questo caso "mettendola" in una variabile che mi servirà in seguito 
$risultato=mysql_query($query) or die(mysql_error()); 
//estraggo tutti i record dalla tabella con un ciclo while, caso mai discutermo perchè 
while($riga=mysql_fetch_array($risultato)){//in pratica esploro tutta la tabella estraendo i record uno alla volta 
    $localita=$riga['localita']; 
    //dico a php di creare la/e casella/e di selezione 
    echo "<option value=\"$localita\">$localita</option>";
}//fine del while 
?> 
</select>

<p style="text-align:left; font-size:9px; color:#FFF">STANZE</p>
  <select  name="camere" id="camere" onchange="this.form.submit()"> 
    <option selected="<?php $default_locali; ?>"><?php echo $default_locali; ?></option>
    <option value="OGNI"><strong>OGNI</strong></option> 
    <!--onchange='this.form.submit()'-->
    <?php 
$query="SELECT camere FROM immobile GROUP BY camere ORDER BY camere"; 

$risultato=mysql_query($query) or die(mysql_error()); 

while($riga=mysql_fetch_array($risultato)){
    $camere=$riga['camere']; 
    echo "<option value=\"$camere\">$camere</option>";
}//fine del while 
?> 
  </select>
</p>

<p><input type="submit" name="Submit" value="cerca">
</p> 
</fieldset>
</form>
</div>
<p></p>
Te l'ho messo praticamente tutto, che poi in buona parte l'hai scritto tu.
So che la soluzione potrebbe essere nella funzione Javascript "onload" associata a body oppure window, solo che ancora non ci capisco un accidente:incazz:
 
ciao
prova così
PHP:
<?php require_once("Connessione.php"); 

    $default_localita="OGNI"; 
    $default_locali="OGNI"; 
     
if(isset($_POST['Submit']) OR ($_POST['localita']) OR ($_POST['camere'])){  
    //leggo il valore della scelta fatta  
    //prova in questa maniera
	if(isset($_POST['localita'])){
		$default_localita=$_POST['localita'];
	}
	if(isset($_POST['camere'])){
		$default_locali=$_POST['camere'];
	}
	//se non hai dato il post localita o camere rimane il valore di default
	/*
	$scelta_localita=$_POST['localita']; 
    $default_localita=$scelta_localita; 
    $scelta_locali=$_POST['camere']; 
    $default_locali=$scelta_locali;
	*/
	
    $where=" WHERE ";
	//ecc.....
 
Mi sa che sto diventando bravino0:)
Ho risolto così
PHP:
<?php
if(!empty($_POST)){//Al primo caricamento pagina tutti i POST sono vuoti e non definiti, basta cambiarne uno per avere TRUE

//poi nel ciclo che crea le select option ho messo questo
<select  name="localita" id="localita" title="dove" onchange="this.form.submit()"> 
    <option selected="<?php $default_localita; ?>"><?php echo $default_localita; ?></option>
    <?php if ($default_localita!="OGNI") {
    echo "<option value=\"OGNI\"><strong>OGNI</strong></option>"; }
//entro in php per farla dinamica e verifico se l'ultima selezione fatta è OGNI, non ripeto
//faccio la solita stringa di query 
$query="SELECT localita FROM immobile GROUP BY localita ORDER BY localita"; 
$risultato=mysql_query($query) or die(mysql_error()); 
while($riga=mysql_fetch_array($risultato)){//in pratica esploro ed estraggo 
    $localita=$riga['localita'];
	if ($localita==$default_localita) continue;//saltando l'opzione già selezionata
    //dico a php di creare la/e casella/e di selezione 
    echo "<option value=\"$localita\">$localita</option>";
}//fine del while 
?> 
</select>
Al primo caricamento pagina, quando tutti i $_POST sono indefiniti, vado in else, visualizzo tutto il db e porto tutti gli potion selected al valore OGNI.

So che si potrebbe fare più pulito, ma io fino ad una sttimana fa non sapevo un accidenti di php e form, comunque accetto tuoi/vostri consigli.

Il prossimo step sarà quello di creare un vero e proprio db con tutti i campi necessari.
Per quanto riguarda le foto come già discusso, non so se saricarle direttamente in variabili di tipo BLOB oppure inserire solo una stringa testo che indichi il link alla cartella foto.
 

Discussioni simili