Mam nadzieję, że możesz pomóc

Chcę mieć listę rozwijaną, która przeszuka moją bazę danych MySQL i pokazuje pierwsze i nazwiska użytkowników. Następnie możesz wybrać dowolną nazwę i wygeneruje resztę szczegółów członkostwa (tj. Data zapisana w górę, ostatni zalogowany itp.).

Mam listę rozwijaną w porządku, ale mój problem ma następny krok do generowania reszty szczegółów. Z moim poniższym kodem wystde pokazuje szczegóły ostatniego użytkownika, który się zapisał i nie zmienia się, gdy zmieniam nazwę w menu rozwijanym.

Jestem pewien, że potrzebuję JavaScript, aby pomóc w tym działaniu, ale ponieważ jestem początkującym do PHP / MySQL każda doradza w kierunku właściwego kierunku, byłaby świetna. Dzięki

Jest to kod, który przeszukuje moją bazę danych i umieszcza imię i nazwisko na liście rozwijanej

$sql = "SELECT first_name,last_name FROM registration_tbl";
$query = mysqli_query($dbc, $sql);
echo '<select name="name" style="width: 400px">';
while ($row = mysqli_fetch_assoc($query)){
    $firstname = $row['first_name'];
    $lastname = $row['last_name'];
    echo'<option>' . $firstname . " " . $lastname . '</option>';
}
echo '</select> <p>';

Ponownie powyższy kod działa dobrze, ale poniższy kod jest tym, z czym mam trudności

$sql = "SELECT * FROM registration_tbl WHERE first_name = '".$firstname."'";
$query = mysqli_query($dbc, $sql);
while($row = mysqli_fetch_array($query)){
    echo "ID: " . " " . $row[0] . "<br>" . 
        "Name: " . $row[1] . " " . $row[2] . "<br>" . 
        "Company: " . $row[3] . "<br> " . 
        "Email: " .$row[4] . "<br> " . 
        "Date of registration: " . $row[6] . "<br> " . 
        "Last login:  " .$row[7] . "<br>" . 
        "Admin/User: " .$row[8] . "<p>";
}
0
Grigson 14 sierpień 2014, 13:29

4 odpowiedzi

Najlepsza odpowiedź

Jeśli nie chcesz używać AJAX, aby dynamicznie ładować zawartość, potrzebujesz formularza do przesłania danych, problem polega na tym, że po pierwszej pętli, $ FirstName jest ostatnim użytkownikiem załadowanym do telefonu, aby działało działanie kodu, ty Potrzebujesz formularza.

Wystarczy umieść wybrać formularz i dodaj przycisk

    <form action="mypage.php" method="get">
    <select name="name" style="width: 400px">
    <?php
    $sql = "SELECT first_name,last_name FROM registration_tbl";
    $query = mysqli_query($dbc, $sql);
    while ($row = mysqli_fetch_assoc($query)){
        $firstname = $row['first_name'];
        $lastname = $row['last_name'];
        echo'<option>' . $firstname . " " . $lastname . '</option>';
    }
    ?>

</select>
<input type="submit" value="Load User Data">
</form>

Następnie w myPage.php musisz sprawdzić, czy formularz jest przesłany i pokaż szczegóły użytkownika.

<?php
if(isset($_GET["name"]))  {
   //this form is posted, show user details
   //$firstname = $_GET["name"]; <--- SQL Injection enabled here!!
   $firstname = mysqli_real_escape_string($_GET["name"]); // please try to avoid SQL injection!
   //your code continues here
   $sql = "SELECT * FROM registration_tbl WHERE first_name = '".$firstname."'";
   $query = mysqli_query($dbc, $sql);
   while($row = mysqli_fetch_array($query)){
      echo "ID: " . " " . $row[0] . "<br>" . 
        "Name: " . $row[1] . " " . $row[2] . "<br>" . 
        "Company: " . $row[3] . "<br> " . 
        "Email: " .$row[4] . "<br> " . 
        "Date of registration: " . $row[6] . "<br> " . 
        "Last login:  " .$row[7] . "<br>" . 
        "Admin/User: " .$row[8] . "<p>";
   }

}

Ostatnia uwaga, jeśli nie chcesz, aby nazwa użytkownika pojawiła się w QueryString, zmień formularz akcji do publikacji i uzyskać zmienną za pomocą $ _POST ["Nazwa"]

Edytuj: Jeśli chcesz, aby formularz do autopostu przy użyciu JavaScript, a następnie dodaj to do UR Wybierz definicję:

<select name="name" style="width: 400px" onchange="this.form.submit()">

Ale pamiętaj, że wielu użytkowników blokuje JavaScript, więc nie będzie działać.

1
Dany Balian 14 sierpień 2014, 10:00

Najlepszym sposobem będzie użycie AJAX, aby uzyskać dane innego skryptu. Jednakże, inny (znacznie mniej elegancki i wydajny) sposób robienia tego, gdy zapętlasz się przez nazwy, aby umieścić w wybranej. Możesz także korzystać z nazw, aby uzyskać informacje o tej nazwie i umieścić go w tablicy (ale nie wykurz go), dopóki tego nie potrzebujesz.

0
Mattigins 14 sierpień 2014, 09:37

Użyj tego kodu, w którym użytkownik wybierze nazwę

<script type="text/javascript" src="http://ajax.googleapis.com/
ajax/libs/jquery/1.4.2/jquery.min.js">
<script type="text/javascript">
$(document).ready(function()
{

$(".listdata").change(function()
{
var dataString = 'listdata='+ $(this).val();
$.ajax
({
type: "POST",
url: "alldata",
data: dataString,
cache: false,
success: function(html)
{
$(".alldata").html(html);
} 
});

});
});
</script>

<?php
$sql = "SELECT first_name,last_name FROM registration_tbl";
$query = mysqli_query($dbc, $sql);
echo '<select name="name" style="width: 400px" class="listdata">';
while ($row = mysqli_fetch_assoc($query)){
    $firstname = $row['first_name'];
    $lastname = $row['last_name'];
    echo'<option value="'.$firstname.'">' . $firstname . " " . $lastname . '</option>';
}
echo '</select> <p>';
?>
<div class="alldata">
    <!--here your all data will come-->

</div>
<br/><br/>

Skrzyń więcej i podaj nazwę alldata.php i użyj poniższego kodu na tej stronie

<?php
$sql = "SELECT * FROM registration_tbl WHERE first_name = '".$firstname."'";
$query = mysqli_query($dbc, $sql);
while($row = mysqli_fetch_array($query)){
    echo "ID: " . " " . $row[0] . "<br>" . 
        "Name: " . $row[1] . " " . $row[2] . "<br>" . 
        "Company: " . $row[3] . "<br> " . 
        "Email: " .$row[4] . "<br> " . 
        "Date of registration: " . $row[6] . "<br> " . 
        "Last login:  " .$row[7] . "<br>" . 
        "Admin/User: " .$row[8] . "<p>";
}
?>
0
Jha 14 sierpień 2014, 09:44

Aby wypełnić swoje opcje, tutaj masz pełną imprezę , ale podstawową AJAX (przy użyciu jQuery):

Plik select.php (część javascript na dole pliku):

<?php
  // Notice that you'll need to get the $dbc from somewhere, maybe require 'db.php'?
  // Retrieve list of people... (notice I've added id column!)
  $sql = "SELECT id, first_name, last_name FROM registration_tbl";
  $query = mysqli_query($dbc, $sql);
  $people = [];
  while ($row = mysqli_fetch_assoc($query)){
    $people[$row['id']] = $row['first_name'] . " " . $row['last_name'];
  }
?>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>List of people</title>
  <style type="text/css">
    .error {
        color: red;
        box-shadow: 0px 0px 15px 0px rgba(247, 17, 40, 0.44);
    }
    #person-info {
        padding: 10px;
        margin-top: 1em;
    }
  </style>
</head>
<body>
  <h2>People list</h2>
    <label for="person">Please select one person</label> 
    <select name="person" id="people-selection">
        <option value="-1"></option>

    <?php foreach ($people as $person_id => $person_name): ?>
        <option value="<?php echo $person_id ?>"><?php echo $person_name ?></option>
    <?php endforeach; ?>

    </select>
  <div id="person-info"><!-- here we will put person info using AJAX request --></div>

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <script>
    $(document).ready(function() {
        // We bind our AJAX handler to the onChange event of the select element
        $("#people-selection").on('change', function(e) {
            if ($(this).val() != -1) {  // If we did select some value
                $.ajax({
                    type: "POST",
                    url : "/get_people_info.php",
                    data: { id: $(this).val() },
                })
                  .done(function(data) {
                    $("#person-info")
                        .removeClass("error")  // we don't need the error class here, it's a success response
                        .html(data);
                  })
                  .fail(function(jqXHR, textStatus, errorThrown) {
                    $("#person-info")
                        .addClass("error")      // in order to add some UI for the user
                        .html("Something went wrong!<br><blockquote>" + errorThrown + "</blockquote>");
                  });
            }
            else {
                $("#person-info")
                    .removeClass("error")
                    .html("");
            }
        })
    });
  </script>
</body>
</html>

A następnie get_people_info.php

<?php

if ($_SERVER['REQUEST_METHOD'] !== "POST") {
    header('HTTP/1.0 400 Bad request');
    die("Only POST request accedpted!");
}

if (!isset($_POST['id'])) {
    header('HTTP/1.0 400 Bad request');
    die("id parameter is mandatory!");
}

$id = (int) $_POST['id'];

// Notice that you'll need to get the $dbc from somewhere, maybe require 'db.php'?
$sql = "SELECT * FROM registration_tbl WHERE id = ". $id .";";
$query = mysqli_query($dbc, $sql);

if ($row = mysqli_fetch_array($query)){
    echo "<p>ID: " . " " . $row[0] . "<br>" . 
         "Name: " . $row[1] . " " . $row[2] . "<br>" . 
         "Company: " . $row[3] . "<br> " . 
         "Email: " .$row[4] . "<br> " . 
         "Date of registration: " . $row[6] . "<br> " . 
         "Last login:  " .$row[7] . "<br>" . 
         "Admin/User: "  .$row[8] . "</p>";
}
else {
    echo "Person not found!";
}

Pozwól, że dam ci kilka dalszych czytania (powiedziałeś, że byłeś nowy do PHP, Asume całego rozwoju sieci Web):

0
mTorres 15 sierpień 2014, 10:10