Avatar billede walkie84 Nybegynder
19. maj 2010 - 11:24 Der er 15 kommentarer og
1 løsning

PHP/AJAX problem

Hej alle programmører,

Jeg bruger dette script, http://www.w3schools.com/php/php_ajax_database.asp, til at sortere i et SQL udtræk med en dropdownmenu.
Det virker fint, men jeg vil gerne have at når man loader siden og intet er valgt, så skal den udskrive udtrækket usorteret. Hvis jeg bare laver udtrækket direkte i DIV'en som her:

<div id="txtHint">
<?
$sql="SELECT * FROM user";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
  {
  ...
  }
?>
</div>

så bliver det også vist når jeg vælger noget i selectboxen - altså ting kommer dobbelt. Det mærkelige er at hvis jeg bare skriver:

<div id="txtHint">Vælg noget i dropdownmenuen</div>

Så forsvinder den tekst når jeg vælger i selectboxen. Hvorfor forsvinder sql-udtrækket så ikke?

Mvh Morten
Avatar billede repox Seniormester
19. maj 2010 - 11:28 #1
Jeg tror du må ud med noget mere kode, hvis vi skal kunne komme med et kvalificeret bud...
Avatar billede walkie84 Nybegynder
19. maj 2010 - 11:38 #2
Hej repox,

Al koden står i linket, men jeg kan da godt paste det her :)


index.php:

<html>
<head>
<script type="text/javascript">
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").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("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getuser.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>

<form>
<select name="users" onchange="showUser(this.value)">
<option value="">Select a person:</option>
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>

</body>
</html>



getuser.php:

<?php
$q=$_GET["q"];

$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("ajax_demo", $con);

$sql="SELECT * FROM user WHERE id = '".$q."'";

$result = mysql_query($sql);

echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['FirstName'] . "</td>";
  echo "<td>" . $row['LastName'] . "</td>";
  echo "<td>" . $row['Age'] . "</td>";
  echo "<td>" . $row['Hometown'] . "</td>";
  echo "<td>" . $row['Job'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
?>
Avatar billede repox Seniormester
19. maj 2010 - 11:40 #3
Der står den kode, som du har lavet, der ikke virker, jo ikke...
Avatar billede walkie84 Nybegynder
19. maj 2010 - 11:55 #4
Hvis man kører det, som det står skrevet der, så forsvinder teksten "Person info will be listed here." når man vælger et punkt i select boksen.
Hvis man derimod istedet for den tekst skriver:

<?
$sql="SELECT * FROM user";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
  {
  ...
  }
?>

Så forsvinder det ikke, når man vælger noget i select boksen.
Avatar billede repox Seniormester
19. maj 2010 - 12:03 #5
ffs... tænk engang det er nødvendigt, for tredie gang at spørge efter koden...

Hvad står der i din while løkke?
Avatar billede walkie84 Nybegynder
19. maj 2010 - 12:08 #6
Inde i while løkken står der bare:

while($row = mysql_fetch_array($result))
  {
  echo $row['LastName'] . ", " . $row['FirstName'];
  }

Og det bliver udskrevet fint nok.. Men det forsvinder bare ikke, når jeg så vælger noget i selectboksen.
Avatar billede repox Seniormester
19. maj 2010 - 12:37 #7
Altså, hvis det er alt, så må det være noget andet; du må lægge det ud, så vi kan se det og selv prøve det af. På den måde kan sikkert pinpointe problemet.
Avatar billede olebole Juniormester
19. maj 2010 - 12:44 #8
<ole>

Hvis nogen har lært dig at bruge GET i Ajax kald, kan vedkommende ikke vide ret meget om Ajax. Explorer cacher resultatet, når du bruger GET. Det sker ikke ved POST.

Derudover må du, som repox skriver, lægge et eksempel.

/mvh
</bole>
Avatar billede walkie84 Nybegynder
20. maj 2010 - 23:11 #9
Ok, nu har jeg rodet lidt mere med det og min kode ser således ud:

index.php

<?php
include( "db.php" );
?>
<html>
<head>
<script type="text/javascript">
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").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("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getnews.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>

<select name="users" onchange="showUser(this.value)" style="width: 150px;">
  <option value="">Vælg hold</option>
  <option value="alle">Alle hold</option>
    <?
    $qlisthold3 = mysql_query("SELECT * FROM hold ORDER BY navn") or die(mysql_error());

    while ($qhold3 = mysql_fetch_array($qlisthold3)) {
        echo "<option value='$qhold3[navn]'>$qhold3[navn]</option>";
    }
    mysql_close($qlisthold3);
    ?>
</select>



        <div id="txtHint">
        <?
        $sql="SELECT * FROM nyhed WHERE type = '2' AND type_hold = '".$q."' ORDER BY id DESC";
        $result = mysql_query($sql);

        while($row = mysql_fetch_array($result))
        {
            echo "<b>" . $row['dato'] . "</b><br><A href='?page=nyheder&id=" . $row['id'] . "'>".$row['overskrift']. "</A><br>";
        }
        mysql_close($result);
        ?>
        </div>

</DIV>

</body>
</html


getnews.php

<?php
include( "db.php" );

$q=$_GET["q"];

$sql="SELECT * FROM nyhed WHERE type = '2' AND type_hold = '".$q."' ORDER BY id DESC";
$result = mysql_query($sql);

while($row = mysql_fetch_array($result))
{
    echo "<b>" . $row['dato'] . "</b><br><A href='?page=nyheder&id=" . $row['id'] . "'>" . $row['overskrift']

. "</A><br>";
}
mysql_close($result);
?>
Avatar billede repox Seniormester
21. maj 2010 - 08:52 #10
...
Virker det så nu?
Avatar billede olebole Juniormester
21. maj 2010 - 10:03 #11
Det er næppe sandsynligt. I index.php står f.eks. linjen:

        $sql="SELECT * FROM nyhed WHERE type = '2' AND type_hold = '".$q."' ORDER BY id DESC";
        $result = mysql_query($sql);

- men da $q ikke er defineret i dokumentet, kommer der formodentlig ikke meget ud af den query  ;o)
Avatar billede repox Seniormester
21. maj 2010 - 10:59 #12
#11

Jeg læste ikke rigtigt koden ;) Jeg gik mest bare op i at OP valgte at sige at han har rettet noget kode og derfra måtte vi så selv gætte hvilket resultat det gav...

Men godt spottet, ellers :D
Avatar billede olebole Juniormester
21. maj 2010 - 11:04 #13
- men vi er helt enige om, man ikke kan brokke sig over spørgerens informationsniveau. Der er ikke noget  ;D
Avatar billede walkie84 Nybegynder
09. juli 2010 - 22:49 #14
Hvis i kigger her -> http://test.kik-gymnastik.dk/ har jeg lagt det eksempel op som jeg postede i mit sidste indlæg for et par måneder siden.

Jeg vil gerne have at når siden loader, skal der vises alle poster (som man lige nu opnår ved at vælge "alle hold").
Avatar billede walkie84 Nybegynder
26. juli 2010 - 14:53 #15
tak
Avatar billede melle Nybegynder
27. juli 2010 - 09:12 #16
Hurtigt kig ned gennem koden, og bare et forslag.
Hvad sker der hvis du sætter: $q = "alle"; i starten af dit dokument?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester