Problema recupero valori da select con chiamata ajax

andreadb91

Nuovo Utente
20 Giu 2013
19
0
1
Ciao a tutti non riesco a farmi restituire in base a ciò che scelgo tutti i cellulari aventi gpu uguale a quella che seleziono
Non capisco dove sbaglio non ho usato spesso ajax
questa è la parte della chiamata

PHP:
<script type="text/javascript">
function showUser(str)
{
if (str=="")
  {
  document.getElementById("result").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("result").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","stampagpu.php?gpu="+str,true);
xmlhttp.send();
}
</script>

<form>
GPU
<select name="gpus" onchange="showUser(this.value)">
<?php
include("../include/connect.php");
$conn=mysql_connect($HOST, $USER, $PASSWORD);
$db_ok=mysql_select_db($DB, $conn);
$k=1;
$ris=mysql_query("SELECT DISTINCT gpu FROM cellulare ORDER BY gpu ASC", $conn);
$recnum=mysql_num_rows($ris);
for($i=0;$i<$recnum;$i++){
	$gp=mysql_result($ris,$i,"gpu");
		
   		echo "<option value=".$k++.">".$gp."</option>";
}
mysql_close($conn);
?>
</select>
</form>
        </div>
<div id="result"><b>GPU presenti</b></div>

Questo è il codice PHP  stampagpu.php
<?php
include("../include/connect.php");
$conn=mysql_connect($HOST, $USER, $PASSWORD);
$db_ok=mysql_select_db($DB, $conn);
$gpu = $_GET["gpu"];

$ris=mysql_query("SELECT * FROM cellulare WHERE gpu='".$gpu."'", $conn);
$recnum=mysql_num_rows($ris);

for($i=0;$i<$recnum;$i++){
	$id=mysql_result($ris,$i,"idSmart");
	$cp=mysql_result($ris,$i,"nome");
   	$pr=mysql_result($ris,$i,"aziendaProduttrice");
	$bn=mysql_result($ris,$i,"image");
	$gp=mysql_result($ris,$i,"gpu");
		
		echo $cp;
		echo $_POST['gpu'];
		echo $gp;
		echo "ciao";
	
}
mysql_close($conn);
?>
 
Ultima modifica di un moderatore:

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
23
Roma
alessandro1997.netsons.org
Innanzitutto non vedo perché scrivere tutta la parte della chiamata Ajax a mano quando ci sono framework Javascript che offrono una API per semplificarti il lavoro.

Inoltre, il tuo codice PHP usa la deprecata libreria mysql per la connessione al database ed è vulnerabile a SQL injection.

Ecco una versione rivisitata della pagina principale. stampagpu.php può facilmente essere riscritta a partire dal mio esempio.

PHP:
<?php
try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die('Errore interno.');
}

try {
    $stm = $pdo->query('SELECT DISTINCT gpu FROM cellulare ORDER BY gpu ASC');
} catch (PDOException $e) {
    die('Errore interno.');
}

$gpus = $stm->fetchAll(PDO::FETCH_ASSOC);

echo <<<EOF
<!DOCTYPE html>
<html lang="it">
    <head>
        <meta charset="utf-8">
        <title>jQuery</title>
    </head>

    <body>
        <select name="gpu" id="gpu">
EOF;

foreach ($gpus as $gpu) {
    echo <<<EOF
            <option value="{$gpu}">{$gpu}</option>
EOF;
}

echo <<<EOF
        </select>

        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script>
        $(function() {
            $("#gpu").change(function() {
                $("#result").load("stampagpu.php", {
                    gpu: $("#gpu").val()
                });
            });
        });
        </script>
    </body>
</html>
EOF;