MySql in un popup

paparucino

Nuovo Utente
8 Mag 2011
10
0
1
Ciao a tutti,
ho un problema di questo genere:
uno script php legge e mostra i dati di un database. Se lo script viene eseguito in una normale pagina del browser tutto funziona correttamente (accesso a Mysql, ricerca e display dei dati)
Se provo a far eseguire lo script dall interno di una popup window ho un messaggio d'errore.
Il popup si apre e al suo interno compare
Codice:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /media/hdb1/foo/Gestione/libri/printer1.php on line

Il codice per l'accesso ai dati nel DB è il seguente

Codice:
...
$db = mysqli_connect($db_host,$db_user, $db_password) or die('Connessione a MySql fallita. Controllare i dati di configurazione: ' . mysqli_connect_error($db));
mysqli_select_db($db,$db_name) or die('Selezione del DB fallita. Controllare il nome del DataBase: ' . mysqli_error($db));

$result = mysqli_query($db,"SELECT * FROM $db_table WHERE $option LIKE \"%$cerca%\"  ORDER BY $sort LIMIT 0,1000");
$num_rows = mysqli_num_rows($result);
....

Lo script che attiva il popup viene attivato in questo modo

Codice:
<script language="javascript" type="text/javascript">
<!--
function popitup(url) {
	newwindow=window.open(url,'name','height=300,width=400');
	if (window.focus) {newwindow.focus()}
	return false;
}

// -->
</script>

..........

<form method='post' name='alfa' action='printer1.php'  onSubmit="return popitup('printer1.php')" >
<input type = 'hidden' name = 'opzione' value = "<?php echo $option; ?>" />
<input type = 'hidden' name = 'testo' value = "<?php echo $cerca; ?>" />
<input class = 'input' value = 'Print' type = 'submit'/>
</form>



Qualche idea?
 
Prova a sostituire questa riga:
PHP:
$result = mysqli_query($db,"SELECT * FROM $db_table WHERE $option LIKE \"%$cerca%\"  ORDER BY $sort LIMIT 0,1000");
Con questa:
PHP:
$result = mysqli_query($db,"SELECT * FROM $db_table WHERE $option LIKE \"%$cerca%\"  ORDER BY $sort LIMIT 0,1000") or die(mysqli_error($db));
E vedi quale errore ti restituisce.
 
Ecco cosa mi sono empre dimenticato di fare!!! mettere "or die....."
grazie per avermelo ricordato.
Cmq l'errore che ricevo è il seguente

Codice:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIKE "%%" ORDER BY LIMIT 0,1000' at line 1

Ho visto il problema, non riceve la variabile $cerca. Come posso sopperire a ciò?

Grazie ancora per il "die"
 
Eccolo:

'testo' e 'opzione' sono passati a questo script dal form di cui al primo post di questo thread

Codice:
.....
$cerca = trim($_POST['testo']);
$option = trim($_POST['opzione']);

switch ($option){
    case 'cognome': $sort = 'titolo'; break;
    case 'titolo': $sort = 'titolo'; break;
    case 'originale': $sort = 'cognome'; break;
    case 'genere': $sort = 'cognome'; break;
    case 'edizioni': $sort = 'edizioni'; break;
    case 'ISBN': $option = 'isbn'; $sort = 'isbn'; break;
}


$db_host = 'xxxx';
$db_user = 'xxxxxxxxxxx';
$db_password = 'xxxxxxx';
$db_name = 'books';
$db_table ='libreria';


$db = mysqli_connect($db_host,$db_user, $db_password) or die('Connessione a MySql fallita. Controllare i dati di configurazione: ' . mysqli_connect_error($db));
mysqli_select_db($db,$db_name) or die('Selezione del DB fallita. Controllare il nome del DataBase: ' . mysqli_error($db));

$result = mysqli_query($db,"SELECT * FROM $db_table WHERE $option LIKE \"%$cerca%\"  ORDER BY $sort LIMIT 0,1000") or die(mysqli_error($db));
$num_rows = mysqli_num_rows($result);
if ($num_rows <= 0 )
{die('<b class="die">'.ucwords($cerca).'  <---doesnt exist</b><br /><br /><br /><br /><br />');}
$i = 1;
while ($row = mysqli_fetch_array($result))
{ 
...
}

segue l'elaborazione dei dati lrtti
 
L'unica soluzione è usare GET. Modifica il form così:
HTML:
<form method='get' name='alfa' action='printer1.php'  onSubmit="return popitup('printer1.php')" >
<input type = 'hidden' name = 'opzione' value = "<?php echo $option; ?>" />
<input type = 'hidden' name = 'testo' value = "<?php echo $cerca; ?>" />
<input class = 'input' value = 'Print' type = 'submit'/>
</form>
E queste due righe:
PHP:
$cerca = trim($_POST['testo']);
$option = trim($_POST['opzione']);
Così:
PHP:
$cerca = trim($_GET['testo']);
$option = trim($_GET['opzione']);
Assicurati di non visualizzare la barra degli indirizzi nel popup.
 
Grazie, ora vado a vedere come togliere la barra degli indirizzi dal popup poi provo e ti farò sapere
 
Dopo aver googlato un pò ho modificato la funzione che apre il popup in questo modo
Codice:
<script language="javascript" type="text/javascript">
<!--
function popitup(url) {
	newwindow=window.open(url,'name','height=300,width=400,[COLOR="red"]directories=no,location=no,menubar=no,toolbar=no[/COLOR]');
	if (window.focus) {newwindow.focus()}
	return false;
}

// -->
</script>
ho modificato i codici come mi hai suggerito ma ovviamente non funziona e la barra degli indirizzi è sempre lì minacciosa.
Altre ricerche su google e ho scoperto che, se è vero, non è possibile disabilitare tale barra. va detto che sostanzialmente si riferivano a IE7 e 8, ma non funziona neppure in Firefox, Opera, Chrome.
Qualche idea?

Dimenticavo... uso linux, non Windows
 
Devo fare pubblica ammenda.
Le indicazioni che mi hai dato vanno benissimo. Se forzo i dati i dati nel file printer1.php il popup mostra correttamente i dati di MySql.
Nel fare prove/misure/tentativi ho sicuramente introdotto un errore per cui il get/post non funzionano correttamente.
Sto indagando.

Grazie infinite per la'iuto e scusami ancora per il tempo che ti ho fatto perdere
 
Ahemmm... eccomi ancora qua perchè il problema non è risolto.
Ho corretto l'errore che mi ha portato fuori strada, ora se non uso il popup è tutto OK, ma se provo ad indirizzare lo stesso script nel popup i dati del form non vengono ricevuti dallo script.

Queste solo le prime tre linee di printer1.php e vengono visualizzate solo i 4 trattini :(
Codice:
<?php
$cerca = trim($_GET['testo']);
$option = trim($_GET['opzione']);
echo $cerca." ---- ".$option;
.....
 
Ho provato ma non funziona, però cercando negli angoli più oscuri della rete ho trovato una noticina con la soluzione.
Praticamente il form deve essere costruito come qua sotto (in rosso le varianti rispetto al mio originale):

Codice:
<form method='POST' name='alfa' action='printer1.php'[B][COLOR="red"] target='nuovapagina'[/COLOR][/B]>
<input type = 'hidden' name = 'opzione' value = "<?php echo $option; ?>" />
<input type = 'hidden' name = 'testo' value = "<?php echo $cerca; ?>" />
<input class = 'input' value = 'Print' type = 'submit' [B][COLOR="red"]onClick="window.open('','nuovapagina','width=200,height=200');"[/COLOR][/B]/>
</form>

In questo modo funziona come un violino e sono molto felice. :D

Ancora grazie infinite per l'aiuto
 

Discussioni simili