2009-02-13 6 views
0

J'ai un problème de nombre en PHP ...Comment puis-je obtenir le nombre de résultats de recherche pour une liste déroulante dynamique?

Je crée dynamiquement une liste déroulante à partir de MySQL. Lorsque je sélectionne le premier menu déroulant, comment puis-je obtenir le résultat de la recherche ... comme 10 produits de la base de données?

Voici mon code:

ajax..file:

var xmlHttp 

function showCount(str) 
{ 
xmlHttp=GetXmlHttpObject(); 
if (xmlHttp==null) 
{ 
alert ("Your browser does not support AJAX!"); 
return; 
} 
var url="phpApplication.php"; 
url=url+"?action=count2"; 
url=url+"&sid="+Math.random(); 
xmlHttp.onreadystatechange=stateChanged; 
xmlHttp.open("POST",url,true); 
xmlHttp.send(null); 
} 

function stateChanged() 
{ 
if (xmlHttp.readyState==4) 
{ 
document.getElementById("countR").innerHTML=xmlHttp.responseText; 
} 
} 

function GetXmlHttpObject() 
{ 
var xmlHttp=null; 
try 
{ 
// Firefox, Opera 8.0+, Safari 
xmlHttp=new XMLHttpRequest(); 
} 
catch (e) 
{ 
// Internet Explorer 
try 
    { 
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
catch (e) 
    { 
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
} 
return xmlHttp; 
} 

PHP Application:

class Application { 


    public function __construct() { 

    } 


    function conn($sql) 
{ 

     $host  = "localhost"; 
     $username = "root"; 
     $pwd  = ""; 
     $dbname = "example"; 

    //echo "commnecing connection to local db<br>" 
    if (!($conn=mysql_connect($host, $username, $pwd))) { 
     printf("error connecting to DB by user = $username and pwd=$pwd"); 
     exit; 
    } 
    $db3=mysql_select_db($dbname,$conn) or die("Unable to connect to local database"); 


    $result = mysql_query($sql) or die ("Can't connect because ". mysql_error()); 

    return $result; 

}//end function 


function dropdown($field, $table) 
{ 
    //initialize variables 
    $oHTML = ''; 
    $result = ''; 

    //check to see if the field is passed correctly 
    if (($field == "")||($table == "")) 
    { 
    die("No column or table specified to create drop down from!"); 
    } 

    $sql = "select distinct($field) from $table"; 

    //call the db function and run the query 
    $result = $this->conn($sql); 

    //if no results are found to create a drop down return a textbox 
    if ((!$result) ||(mysql_num_rows($result)==0)) 
    { 
    $oHTML .= "<input type='text' name='$field' value='' size='15'>"; 
    }elseif (($result)&&(mysql_num_rows($result)>0)){ 


    //build the select box out of the results 
    $oHTML .= "<select name='$field' onchange='showCount(this.value)'>\n<option value='all'>All</option>\n"; 
    while ($rows = mysql_fetch_array($result)) 
    { 
     $oHTML .= "<option value='".$rows[$field]."'>".$rows[$field]."</option>\n"; 

    } 
    $oHTML .= "</select>\n"; 

    } 
    //send the value back to the calling code 
    return $oHTML; 
}//end function 


function countResult(){ 

    $sql2 = "select * from produkt_finder_table where 1 "; 


    if ($q == (!empty($_POST['Bauform_d']))&&($_POST['Bauform_d'] != 'all')) 
    { 
    $sql2 .= " and Bauform_d like '". addslashes($_POST['Bauform_d'])."%' "; 
    } 


    if ((!empty($_POST['Beschreibung_d']))&&($_POST['Beschreibung_d'] != 'all')) 
    { 
    $sql2 .= " and Beschreibung_d like '". addslashes($_POST['Beschreibung_d'])."%' "; 
    } 


    if ((!empty($_POST['SelectSchutzart_Cust_Bereich_d']))&&($_POST['SelectSchutzart_Cust_Bereich_d'] != 'all')) 
    { 
    $sql2 .= " and SelectSchutzart_Cust_Bereich_d like '". addslashes($_POST['SelectSchutzart_Cust_Bereich_d'])."%' "; 
    } 


    if ((!empty($_POST['SelectErfassungswinkel_Cust_Bereich_d']))&&($_POST['SelectErfassungswinkel_Cust_Bereich_d'] != 'all')) 
    { 
    $sql2 .= " and SelectErfassungswinkel_Cust_Bereich_d like '". addslashes($_POST['SelectErfassungswinkel_Cust_Bereich_d'])."%' "; 
    } 


    if ((!empty($_POST['ArtikelProduktgruppe_d']))&&($_POST['ArtikelProduktgruppe_d'] != 'all')) 
    { 
    $sql2 .= " and ArtikelProduktgruppe_d like '". addslashes($_POST['ArtikelProduktgruppe_d'])."%' "; 
    } 



$result2 = $this->conn($sql2); 
    //run query 

    if (!$result2){ die("No results due to database error.<br>".mysql_error()); } 

    if (mysql_num_rows($result2)==0) 
    { 
    echo "0"; 
    }else{ 

    echo mysql_num_rows($result2); 
} 
} 



function count1(){ 

    if ((!empty($_POST['Bauform_d']))&&($_POST['Bauform_d'] != 'all')) { 


} 

    $sql2 .= " and Bauform_d like '". addslashes($_POST['Bauform_d'])."%' "; 
    $sql2 = "select * from produkt_finder_table where 1 "; 
    $result2 = $this->conn($sql2); 
     if (!$result2){ die("No results due to database error.<br>".mysql_error()); } 

    if (mysql_num_rows($result2)==0) 
    { 
    echo "0"; 
    }else{ 

    echo mysql_num_rows($result2); 
    } 


    //run query 



} 



function countResultAll(){ 

$sql = "select * from produkt_finder_table where 1 "; 



    if ((!empty($_POST['searchfield']))&&($_POST['searchfield'] != 'all')) 
    { 
    $sql .= " and ArtikelName like '". addslashes($_POST['searchfield'])."%' "; 
    } 

$result = $this->conn($sql); 
    //run query 

    if (!$result){ die("No results due to database error.<br>".mysql_error()); } 

    if (mysql_num_rows($result)==0) 
    { 
    echo "0"; 
    }else{ 

    echo mysql_num_rows($result); 
} 
} 



function search() 
{ 

//base sql 
    $sql = "select * from produkt_finder_table where 1 "; 

//get the values from the form 


    if ((!empty($_POST['Bauform_d']))&&($_POST['Bauform_d'] != 'all')) 
    { 
    $sql .= " and Bauform_d like '". addslashes($_POST['Bauform_d'])."%' "; 
    } 

    if ((!empty($_POST['Beschreibung_d']))&&($_POST['Beschreibung_d'] != 'all')) 
    { 
    $sql .= " and Beschreibung_d like '". addslashes($_POST['Beschreibung_d'])."%' "; 
    } 

    if ((!empty($_POST['SelectSchutzart_Cust_Bereich_d']))&&($_POST['SelectSchutzart_Cust_Bereich_d'] != 'all')) 
    { 
    $sql .= " and SelectSchutzart_Cust_Bereich_d like '". addslashes($_POST['SelectSchutzart_Cust_Bereich_d'])."%' "; 
    } 

    if ((!empty($_POST['SelectErfassungswinkel_Cust_Bereich_d']))&&($_POST['SelectErfassungswinkel_Cust_Bereich_d'] != 'all')) 
    { 
    $sql .= " and SelectErfassungswinkel_Cust_Bereich_d like '". addslashes($_POST['SelectErfassungswinkel_Cust_Bereich_d'])."%' "; 
    } 

    if ((!empty($_POST['ArtikelProduktgruppe_d']))&&($_POST['ArtikelProduktgruppe_d'] != 'all')) 
    { 
    $sql .= " and ArtikelProduktgruppe_d like '". addslashes($_POST['ArtikelProduktgruppe_d'])."%' "; 
    } 


//run query 
    $result = $this->conn($sql); 

    if (!$result){ die("No results due to database error.<br>".mysql_error()); } 


    if (mysql_num_rows($result)==0) 
    { 
    echo "No Results found!"; 
    }else{ 


    echo "<table border='1' class='corner'><th width='332'><a href='product.php'>Back</a></th>"; 
    echo "<th>Product Result</th>"; 
    echo "<td width='40' align='center' style=' font-size:16px'><div id='countR'>"; 
    $this->countResult(); 
    echo "</div></td>"; 
     echo "</table>"; 

    // echo '<div style="float:right; font-size:16px">'.$this->countResultAll().'</div>'; 
    // echo "<div style='float:left; font-size:16px'>Produkt Result</div>"; 

    echo "<table border='1' class='corner'>"; 

    $i = 1; 
    if((mysql_num_rows($result) % 2) == 0){ 
    $complete = false; 
    }else{ 
    $complete = true; 
    } 

    while ($rows= mysql_fetch_array($result)) 
    { 

     echo "<td>"; 
     echo "<ul><li class='addResult'><span class='red'>".$rows['Bauform_d']."<br /><span class='black'>".$rows['ArtikelName']."</span></span><img src='{imag}' alt='' /> <a href='#'>More Info</a> </li></ul>"; 
     echo "</td>"; 

    if(($i % 2) == 0){ 

     echo "</tr><tr>"; 
    } 

     $i++; 
} 
if($complete == true){ 

    echo "<td>&nbsp;</td>"; 

}  


    echo "</tr></table>"; 
     echo "<table border='1' class='corner'><th width='332'><a href='product.php'>Back</a> <div></div></th>"; 
    echo "<th>Product Result</th>"; 
    echo "<td width='40' align='center' style=' font-size:16px'>"; 
    $this->countResult(); 
    echo "</td>"; 
     echo "</table>"; 

} 
} 


function show_form() 
{ 

    $Bauform = $this->dropdown('Bauform_d','produkt_finder_table'); 
    $Beschreibung = $this->dropdown('ArtikelGruppe_d','produkt_finder_table'); 
    $SelectSchutzart = $this->dropdown('SelectSchutzart_Cust_Bereich_d','produkt_finder_table'); 
    $SelectErfassungswinkel = $this->dropdown('SelectErfassungswinkel_Cust_Bereich_d','produkt_finder_table'); 
    $ArtikelProduktgruppe = $this->dropdown('ArtikelProduktgruppe_d','produkt_finder_table'); 

    echo "<form name='search' action='productResult.php?action=search' method='POST'> 
     <table width='50%' align='center' valign='center' class='corner'> 
     <tr> 
      <td colspan='2' align='center'> Search Form <div id='countR' style='float:right; font-size:16px'>Count</div></td> 
     </tr> 
     <tr> 
      <td align='right'>Montageart:</td><td>$Bauform</td> 
     </tr> 
     <tr> 
      <td align='right'>ProduktGruppe:</td><td>$Beschreibung</td> 
     </tr> 
     <tr> 
      <td align='right'>Speisung:</td><td>$SelectSchutzart</td> 
     </tr> 
     <tr> 
      <td align='right'>Reichweite:</td><td> $SelectErfassungswinkel </td> 
     </tr> 
     <tr> 
      <td align='right'>Erfwinkel:</td><td>$ArtikelProduktgruppe </td> 
     </tr> 

     <tr> 
      <td colspan='2' align='center'><input type='submit' name='submit' value='Go!'></td> 
     </tr> 
     </table> 
     </form>"; 

}//end function 




function searchAll() 
{ 

//base sql 
    $sql = "select * from produkt_finder_table where 1 "; 

//get the values from the form 
//NOTE: You should do way more valdation on the values before you attempt to process anything 


    if ((!empty($_POST['searchfield']))&&($_POST['searchfield'] != 'all')) 
    { 
    $sql .= " and ArtikelName like '". addslashes($_POST['searchfield'])."%' "; 
    } 

    //run query 
    $result = $this->conn($sql); 

    if (!$result){ die("No results due to database error.<br>".mysql_error()); } 


    if (mysql_num_rows($result)==0) 
    { 
    echo "No Results found!"; 
    }else{ 


    echo "<table border='1' class='corner'><th width='332'><a href='product.php'>Back</a></th>"; 
    echo "<th>Product Result</th>"; 
    echo "<td width='40' align='center' style=' font-size:16px'><div id='countR'>"; 
    $this->countResultAll(); 
    echo "</div></td>"; 
    echo "</table>"; 

    // echo '<div style="float:right; font-size:16px">'.$this->countResultAll().'</div>'; 
    // echo "<div style='float:left; font-size:16px'>Produkt Result</div>"; 

    echo "<table border='1' class='corner'>"; 

    $i = 1; 
    if((mysql_num_rows($result) % 2) == 0){ 
    $complete = false; 
    }else{ 
    $complete = true; 
    } 

    while ($rows= mysql_fetch_array($result)) 
    { 

     echo "<td>"; 
     echo "<ul><li class='addResult'><span class='red'>".$rows['Bauform_d']."<br /><span class='black'>".$rows['ArtikelName']."</span></span><img src='{imag}' alt='' /> <a href='#'>More Info</a> </li></ul>"; 
     echo "</td>"; 

    if(($i % 2) == 0){ 

     echo "</tr><tr>"; 
    } 

     $i++; 
} 
if($complete == true){ 

    echo "<td>&nbsp;</td>"; 

}  
    echo "</tr></table>"; 
    echo "<table border='1' class='corner'><th width='332'><a href='product.php'>Back</a> <div></div></th>"; 
    echo "<th>Product Result</th>"; 
    echo "<td width='40' align='center' style=' font-size:16px'>"; 
    $this->countResultAll(); 
    echo "</td>"; 
    echo "</table>"; 

} 
} 
} 

$action = $_GET['action']; 

$proFin = new Application(); 

switch($action) { 

     case 'show': 
      $proFin->show_form(); 
     break; 

     case 'search': 
      $proFin->search(); 
     break; 

     case 'searchAll': 
      $proFin->searchAll(); 
     break; 

     case 'count': 
      $proFin->countResult(); 
     break; 

     case 'count1': 
      print 'hallo'; 
     break; 

     case 'count2': 

      if (!empty($_POST)) 
{ 


     var_dump($_POST); 
} 


     break; 

     case 'count3': 
      echo $rows[$field]; 
     break; 
     } 
+0

Il devrait y avoir un fichier HTML où l'AJAX est également inclus, s'il vous plaît envoyer. – sfossen

+0

Voir, le HTML définit l'objet DOM à modifier par l'ID countR dans ce cas, la réponse XML à la fonction AJAX vient de PHP, ce qui signifie qu'il doit contenir une balise countR, envelopper les informations de remplacement. – sfossen

Répondre

1

Je l'ai testé cela sur apache avec Firefox et "vide" est remplacé avec "23".

test.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Test ajax</title> 
</head> 
<script language="javascript"> 
var xmlHttp 

function showCount(str) 
{ 
    xmlHttp=GetXmlHttpObject(); 
    if (xmlHttp==null) 
    { 
     alert ("Your browser does not support AJAX!"); 
     return; 
    } 
    var url="testajax.php"; 
    url=url+"?action=count2"; 
    url=url+"&sid="+Math.random(); 
    xmlHttp.onreadystatechange=stateChanged; 
    xmlHttp.open("POST",url,true); 
    xmlHttp.send(null); 
} 

function stateChanged() 
{ 
    if (xmlHttp.readyState==4) 
    { 
     document.getElementById("countR").innerHTML=xmlHttp.responseText; 
    } 
} 

function GetXmlHttpObject() 
{ 
    var xmlHttp=null; 
    try 
    { 
     // Firefox, Opera 8.0+, Safari 
     xmlHttp=new XMLHttpRequest(); 
    } 
    catch (e) 
    { 
     // Internet Explorer 
     try 
     { 
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
     } 
     catch (e) 
     { 
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    } 
    return xmlHttp; 
} 
</script> 
<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080" alink="#FF0000" onload="showCount('heelo')" > 
<span id="countR">empty</span> 
</body> 
</html> 

testajax.php

<? 

if($_REQUEST[ 'action' ] == 'count2') 
{ 
    header('Content-type: text/xml'); 
    echo <<<XMLTOP 
<?xml version="1.0" encoding="UTF-8"?> 

XMLTOP; 
     echo('<countr>23</countr>'); 
} 
?> 

// pour la ligne mysql comptage dans l'utilisation de MySQL Vous pouvez l'utiliser pour obtenir le nombre et mettre sur la première ligne.

$query = "SELECT SQL_CALC_FOUND_ROWS ..."; 

$result = mysql_query($query) or LogFatalError("Database error: " . mysql_error()); 
$count = mysql_result(mysql_query('SELECT FOUND_ROWS()'), 0, 0); 
+0

merci pour votre exemple gentil et cool, je veux dire que je poste le vrai cours de php j'utilise pourrait vous un peu comment, regardez-le et dites-moi ce qui ne va pas .. merci agian. –

+0

add header ('Content-type: text/xml'); echo ''; avant commutateur ($ action) – sfossen

Questions connexes