PHP E QUERY

Ciao a tutti,

sto provando a fare una query tramite combobox ma non funziona.

la prima pagina credo sia ok (l'unica cosa che vorrei sapere è come poter scegliere le tabelle da inserire nel combobox invece che averle tutte)

Il codice che uso ora è:

// SELECT FUNZIONANTE MA ESTRAE TUTTI I CAMPI

$sql ="select name from [db]..sysobjects where xtype = 'U'order by name";

La seconda pagina invece deve avere qualcosa di sbagliato ma non so cosa.

Pagina 1.php

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
//----------------------------------------------------------------- 



$dbname = "[db]"; 
$link = mssql_connect("***", "****", "****")or die("Could not connect: " . mssql_error()); 
mssql_select_db($dbname) or die('Could not select database'); 
?> 


<html> 
<head></head> 
<body> 
<?php 



// SELECT FUNZIONANTE MA ESTRAE TUTTI I CAMPI 
$sql ="select name from [db]..sysobjects where xtype = 'U'order by name"; 


// processi la stringa (io ho usato mysql ma non è diverso devi solo chiamare la funzione corretta che dovrebbe essere mssql_query(....)) 
$result = mssql_query($sql); 


//verifichi il risultato se diverso da 0. Se fallisce significa che non ci sono tabelle nel db 
if (!$result) { 
echo "DB Error, could not list tables\n"; 
echo 'MSSQL ERROR: '.mssql_get_last_message(); 
exit; 
} 

?> 

<table width="100%" border="0" cellpadding="0" cellspacing="0"> 
<tr> 
<td width="171">Select table </td> 
<td width="620">codice</td> 
</tr> 
<tr> 
<td><form name="myform" method="post" action="test2b.php"> 
Tables: <select name="category" onChange="submit()"> 
<option value=""></option> 

<?php 

// cicli per estrarre tutti i nomi delle tabelle e crei direttamente il form di scelta. 
while ($row = mssql_fetch_row($result)) { 
echo "<option value=\"".$row[0]."\">".$row[0]."</option>"; 
} 

mssql_free_result($result); 
?> 

</select> 
</form> 
</td><td>&nbsp;</td> 
</tr> 
<tr><td>&nbsp;</td><td>&nbsp;</td> 
</tr> 
</table> 


</body> 
</html>

 

PAGINA "test2b.php"

Code:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
$dbname = '[db]'; 
$link = mssql_connect('***', '***', '***')or die("Could not connect: " .mssql_get_last_message()); 
mssql_select_db($dbname) or die('Could not select database'); 
if(isset($_POST['nome'])) { 
$azienda = $_POST['nome']; 
if($azienda == "[Telephony Daily AAA]"){ 
$sql = "SELECT Queue, Date, Abandoned, Abandoned_Percent 
from $azienda"; 
}else if($azienda == "[Telephony Daily BBB"){ 
$sql = "SELECT Queue, Date, Net, Answered 
from $azienda"; 
}else{ 
echo "errore nella definizione del nome azienda"; 
} 
echo $sql; 
} 


?> 
<html><head></head><body> 
<?php 
// processi la stringa (io ho usato mysql ma non è diverso devi solo chiamare la funzione corretta 
// che dovrebbe essere mssql_query(....)) 
$result = mssql_query($sql); 


//verifichi il risultato se diverso da 0. Se fallisce significa che non ci sono tabelle nel db 
if (!$result) { 
echo "DB Error, could not list tables\n"; 
echo 'MSSQL ERROR: '.mssql_get_last_message(); 
exit; 
} 
?>               
<table width="100%" border="1" cellpadding="0" cellspacing="0"><tr><td><div align="center">name/address</div></td><td><div align="center">department/surname</div></td><td><div align="center">field/history</div></td></tr> 
<?php 
//while ($row = mssql_fetch_array($result, MSSQL_ASSOC)) { 
// cicli l'array dei record per ircavare i dati 
while($row = mssql_fetch_row($result)){ 
echo "<tr><td><div>s".$row[0]."</div></td><td><div>".$row[1]."</div></td><td><div> 
".$row[2]."</div></td></tr>"; 
} 
mssql_free_result($result); 
mssql_close($link); 
                        ?>               
</table></body></html> 

 

Quando lo testo questi sono gli errori:

Notice: Undefined variable: sql in C:\Program Files\xampp\htdocs\intranet\test2b.php on line 27

Warning: mssql_query() [function.mssql-query]: Query failed in C:\Program Files\xampp\htdocs\intranet\test2b.php on line 27

DB Error, could not list tables MSSQL ERROR: Changed database context to 'ctxd124z'.

La riga 27 è questa:

$result = mssql_query($sql);

inviato 8 anni fa
lid
lid
1
X 0 X

mi sembra che l'unico caso in cui $sql non viene definito è quando c'è un "errore nella definizione del nome azienda"

non è questo il caso?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Si, hai ragione, ma non ho capito perchè $sql non viene definito.

Non la sto definendo qui?

if(isset($_POST['nome'])) {

$azienda = $_POST['nome'];

if($azienda == "[Telephony Daily AAA]"){

$sql = "SELECT Queue, Date, Abandoned, Abandoned_Percent

from $azienda";

}else if($azienda == "[Telephony Daily BBB"){

$sql = "SELECT Queue, Date, Net, Answered

from $azienda";

risposto 8 anni fa
lid
lid
1
X 0 X

ho provato a controllare la variabile con

echo $sql;}else{

echo"Nessuna definizione";

}

mi conferma che non è definita

risposto 8 anni fa
lid
lid
1
X 0 X

Ciao,

penso non sia definita poiché nel form che utilizzi non c'è nessun campo di input che si chiama 'nome' (dal codice che hai postato) ma c'è solo un "category"...

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

Innanzitutto vi ringrazio dell'aiuto!

Ho sostituito "category" con "nome"

<td><form name="myform" method="post" action="test2b.php">

Tables: <select name="nome" onChange="submit()">

<option value=""></option>

<?php

Però non funziona mi tornano  sempre questi errori

errore nella definizione del nome azienda

Notice: Undefined variable: sql in C:\Program Files\xampp\htdocs\intranet\test2b.php on line 19

Notice: Undefined variable: sql in C:\Program Files\xampp\htdocs\intranet\test2b.php on line 43

Warning: mssql_query() [function.mssql-query]: Query failed in C:\Program Files\xampp\htdocs\intranet\test2b.php on line 43

DB Error, could not list tables

Linea 19: echo $sql;

Linea 43 $result = mssql_query($sql);

risposto 8 anni fa
lid
lid
1
X 0 X

Se la query $sql non è definita direi che l'errore di Mysql è corretto....

f(isset($_POST['nome'])) {
$azienda = $_POST['nome'];
if($azienda == "[Telephony Daily AAA]"){
$sql = "SELECT Queue, Date, Abandoned, Abandoned_Percent
from $azienda";
}else if($azienda == "[Telephony Daily BBB"){
$sql = "SELECT Queue, Date, Net, Answered
from $azienda";
} else {
echo "errore nella definizione del nome azienda";
}

Nell'ultimo else non hai definito la variabile $sql... e questo viene riscontrato dall'errore nell'echo successivo.

Ti consiglio di fare questa assegnazione

$sql = "";

e di eseguire la query solo se viene verificata la seguente condizione:

if ($sql != "") { ... }

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

Perdona l'ignoranza ma ho appena iniziato a lavorare con php e il database e per ora non ci sto capendo molto. Dove lo devo inserire il codice che mi hai postato? :-[

Con quel codice però ho controllato che $azienda funzionasse,  dovrebbe andare perchè nella pagina, a parte gli errori mi da anche la scritta "Telephony Daily AAA" che è la scelta che ho fatto dal combobox.

if(isset($_POST['nome'])) { 
$azienda = $_POST['nome']; 
if($azienda == "[Telephony Daily AAA]"){ 
$sql = "SELECT Queue, Date, Abandoned, Abandoned_Percent 
from $azienda"; 
}else if($azienda == "[Telephony Daily BBB"){ 
$sql = "SELECT Queue, Date, Net, Answered 
from $azienda"; 
}else{ 
echo "errore nella definizione del nome azienda"; 
} 
echo $sql; 
} 
if ($azienda != "") echo $azienda;  // azienda dovrebbe essere giusto

errore nella definizione del nome azienda

Notice: Undefined variable: sql in C:\Program Files\xampp\htdocs\intranet\test3b.php on line 19

Telephony Daily AAA Notice: Undefined variable: sql in C:\Program Files\xampp\htdocs\intranet\test3b.php on line 55

Warning: mssql_query() [function.mssql-query]: Query failed in C:\Program Files\xampp\htdocs\intranet\test3b.php on line 55

DB Error, could not list tables

risposto 8 anni fa
lid
lid
1
X 0 X

Ciao,

se la srcritta che ti viene restituita è: "Telephony Daily AAA" sicuramente vengono saltate entrambe le condizioni if perché la stringa è diversa da "[Telephony Daily AAA]" e da "[Telephony Daily BBB".

Ti consiglio di togliere le parentesi quadre e il tutto dovrebbe funzionare. Ti faccio una piccola osservazione: nel caso in cui il nome dell'azienda è diverso da quelle te scelte verrà comunque eseguita la query e nella tua pagina si presenterà sempre un errore. Il mio consiglio era di "monitorare" la query e di assegnargli un valore vuoto ($sql = "";) prima della stampa echo "errore nella definizione del nome azienda";

Poi prima del comando che eseguirà la query ti consiglio di aggiungere il controllo che questo valore sia diverso da vuoto per evitare di eseguire una query errata nel DB.

Spero di essere stato il più chiaro possibile nelle spiegazioni, rimango a disposizione per ulteriori dubbi.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

Ciao non riesco a starti dietro, 

Le quadre le ho messe perchè ci sono degli spazi nel nome della tabella, altrimenti non capisce che è un nome unico. (almeno questo ho capito studiado qualcosina su mssql)

Potresti avere un sacco di pazienza e scrivermi il codice corretto? 

Non sono ancora abbastanza pratica per capire come si aggiunge un controllo, ho capito che è questa sotto ma non so dove metterla e come metterla.

$sql = "";

if ($sql != "") { ... }

Sto studiando per migliorare la mia conoscenza su php a db ma 2 settimane per me non sono abbastanza per capire come funziona   :-[

risposto 8 anni fa
lid
lid
1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda