Avatar billede miss-g Seniormester
23. marts 2018 - 22:36 Der er 9 kommentarer og
1 løsning

Rettelse i PHP kode

Er der nogen der vil være søde at hjælpe mig med min "søge-kode" her, (jeg kan ikke selv programmere)...

1) Ændre - så der ikke bliver vist noget som udgangspunkt. (Der skal først vises resultat, når man søger).

2) Ændre - så den først søger, når man trykker på button/knappen "søg"

Koden der skal ændres i kommer her:
-----------------------------------------
<?php
$output = '';
if(isset($_POST["query"]))
{
$search = mysqli_real_escape_string($conn, $_POST["query"]);
$query = "
  SELECT * FROM ordliste WHERE ord_dansk LIKE '%".$search."%' OR ord_engelsk LIKE '%".$search."%'
";
}
else
{
$query = "
  SELECT * FROM ordliste ORDER BY ord_dansk
";
}
$result = mysqli_query($conn, $query);
if(mysqli_num_rows($result) > 0)
{
$output .= '
    <table class="table table bordered">
          <tr>
            <th style="width:50%">Dansk</th>
            <th style="width:50%">Engelsk</th>
          </tr>
';
while($row = mysqli_fetch_array($result))
{
  $output .= '
    <tr>
    <td>'.$row["ord_dansk"].'</td>
    <td>'.$row["ord_engelsk"].'</td>
  </tr>
  ';
}
echo $output;
}
else
{
echo 'Ingen data fundet.';
}

?>
-----------------------------------------
På forhånd tak :-)
Avatar billede miss-g Seniormester
23. marts 2018 - 22:37 #1
Ajaxkoden:
--------------------------------
<script>
$(document).ready(function(){

load_data();

function load_data(query)
{
  $.ajax({
  url:"includes/inc_search.php",
  method:"POST",
  data:{query:query},
  success:function(data)
  {
    $('#result').html(data);
  }
  });
}
$('#search').keyup(function(){
  var search = $(this).val();
  if(search != '')
  {
  load_data(search);
  }
  else
  {
  load_data();
  }
});
});
</script>
Avatar billede olsensweb.dk Ekspert
24. marts 2018 - 08:56 #2
1)
den første lille ændring kunne se sådan ud:

inc_search.php
<?php
require("conn.php");
$output = '';
if (isset($_POST["query"])) {
    $search = mysqli_real_escape_string($conn, $_POST["query"]);
    $query = "
  SELECT * FROM ordliste WHERE ord_dansk LIKE '%" . $search . "%' OR ord_engelsk LIKE '%" . $search . "%'
";


    $result = mysqli_query($conn, $query);
    if (mysqli_num_rows($result) > 0) {
        $output .= '
    <table class="table table bordered">
          <tr>
            <th style="width:50%">Dansk</th>
            <th style="width:50%">Engelsk</th>
          </tr>
';
        while ($row = mysqli_fetch_array($result)) {
            $output .= '
    <tr>
    <td>' . $row["ord_dansk"] . '</td>
    <td>' . $row["ord_engelsk"] . '</td>
  </tr>
  ';
        }
        echo $output;
    } else {
        echo 'Ingen data fundet.';
    }
}
?>

der er intet ændret i din html fil.


2)
kunne se ca sådan ud
<!DOCTYPE html>
<html lang="da">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
        <title>demo</title>
        <style type="text/css">
        </style>
        <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
        <script>
            $(document).ready(function () {
                function load_data(query){
                    $.ajax({
                        url: "inc_search.php",
                        method: "POST",
                        data: {query: query},
                        success: function (data){
                            $('#result').html(data);
                        }
                    });
                }
                $('#soeg').click(function () {
                    var search = $('#search').val();
                    if (search != ''){
                        load_data(search);
                    }
                });         
            });
        </script>
    </head>
    <body>
        <div id="result"></div>
        <input type="text" id="search">
        <button type="button" id="soeg">søg</button>
    </body>
</html>



men det er en uskik at retunerer html fra AJAX, du skal kun retunerer de rå data, og lave alt html via js
en pænere og mere server effektiv løsning kunne se sådan ud:
html fil
<!DOCTYPE html>
<html lang="da">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
        <title>demo</title>

        <style type="text/css">
        </style>
        <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>

        <script>
            $(document).ready(function () {
                function load_data(query){
                    $.ajax({
                        url: "inc_search.php",
                        method: "POST",
                        data: {query: query},
                        success: function (data){
                            data = jQuery.parseJSON(data);
                           
                            var lng=data.length;
                            if(lng>0){
                                var html = '<table class="table table bordered"><tr><th style="width:50%">Dansk</th><th style="width:50%">Engelsk</th></tr>';
                                for(i=0; i<lng;i++){
                                    html += '<tr>';                               
                                    html += '<td>' + data[i]['ord_dansk'] + '</td>';
                                    html += '<td>' + data[i]['ord_engelsk'] + '</td>';
                                    html += '</tr>';
                                }
                                html += '</table>';
                            }
                            else{
                                html = 'ingen data fundet';
                            }                           
                            $('#result').html(html);
                        }
                    });
                }
                $('#soeg').click(function () {
                    var search = $('#search').val();
                    if (search != ''){
                        load_data(search);
                    }
                });           
            });
        </script>
    </head>
    <body>
        <div id="result"></div>
        <input type="text" id="search">
        <button type="button" id="soeg">søg</button> 
    </body>
</html>


inc_search.php
<?php
require("conn.php");
$liste = array();
if (isset($_POST["query"])) {
    $search = mysqli_real_escape_string($conn, $_POST["query"]);
    $query = "
  SELECT * FROM ordliste WHERE ord_dansk LIKE '%" . $search . "%' OR ord_engelsk LIKE '%" . $search . "%'
";
    $result = mysqli_query($conn, $query);
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            $liste[]=$row;       
        }
    }
}
echo json_encode($liste);
?>
Avatar billede michael_stim Ekspert
24. marts 2018 - 12:07 #3
Men er det ikke lidt overflödigt at bruge ajax osv når den först skal vise resultat når du giver den en kommande?
Avatar billede olsensweb.dk Ekspert
24. marts 2018 - 13:01 #4
#3
>overflödigt at bruge ajax
ikke nødvendigvis, da du ikke reloader hele siden, men kun den del af siden du ændre (her indholdet af  <div id="result"></div>),

1) det kunne også være man gøre det for at minske den mængde data der loades af gangen,

2) mindske belastningen af egen/andre servere, som man ville skulle requeste ved en reload, tænker der vil være en del mere indhold på siden

3) hurtigere opdateringer af skærmbilledet

4) da ajax default laver et non bloking kald, vil brugeren kunne arbejde vidre på siden mens der hentes data i baggrunden.

men jeg ville overveje at ændre
$('#soeg').click(function () {
til
$('#search').blur(function () {

så den laver søgningen når feltet forlades, og man ikke skal trykke på en knap, for at starte søgningen, (spare et click, og en knap), hvis det er det du hentyder til

men ved ajax kan der komme en lille opgave med CSS, og hvad hvis brugeren har slået js fra (de få % der kan finde på af gøre det), så virker det ikke
Avatar billede miss-g Seniormester
26. marts 2018 - 15:55 #5
Så har jeg afprøvet den sidste kode. Når jeg trykker "søg" / enter, får jeg et glimt af resultatet og så forsvinder indtastning og resultat / siden bliver nulstillet...?
Avatar billede olsensweb.dk Ekspert
26. marts 2018 - 17:00 #6
har lige afprøvet coden jeg har posted i #2


ligger inc_search.php hvor den er angivet i  url: "inc_search.php",
 
jeg har i testen ikke lagt den i en subfolder.

har du prøvet at kigge i browserens udviklings værktøj (F12) under XHR

ellers lig en demo op, så vi kan se fejlen

har du i php slået error_reporting og display error til ?? hvis ikke gør det under udvikling, og slå det fra i produktion
http://php.net/manual/en/function.error-reporting.php
http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors

jeg plejer at sætte dette ind i toppen af mine php documenter under udvikling
ini_set("display_startup_errors", "on");
ini_set("display_errors", "on");
ini_set("html_errors", "false");
error_reporting(-1); // -1 viser alle slags fejl beskeder
ini_set("ignore_repeated_errors", 0);
Avatar billede miss-g Seniormester
26. marts 2018 - 18:31 #7
Det er nok nemmere med en test-side, så du kan se, hvad den gør:

http://www.syord.dk/test_soeg.php
Avatar billede olsensweb.dk Ekspert
26. marts 2018 - 19:10 #8
du har 5 js fejl,

bootstrap.min.js:6 Uncaught Error: Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3
    at bootstrap.min.js:6
    at bootstrap.min.js:6


   
hvis jeg ser i source coden kan jeg se du loader flere vertioner af jquery, hvilke skal gå galt

dette er dømt til at gå galt


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

<script src="https://code.jquery.com/jquery-1.10.2.js"></script> <!-- bruges inc_content_right.php -->
<script src="js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>   

du skal kun loade den nyeste
dvs
Avatar billede miss-g Seniormester
26. marts 2018 - 19:55 #9
Ovenstående er hermed rettet.
Avatar billede miss-g Seniormester
26. marts 2018 - 21:38 #10
Din kode virker fint i en ny html fil (uden mit bootstrap-layout).

Når jeg bruger den i mit færdige layout, så klapper det bare sammen. Samme problem har jeg faktisk med menuen i toogle-view.

Jeg må gå systematisk til værks og finde årsagen.

Igen - tusind tak for hjælpen :-)
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

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