Jump to content

PHP & Jquery-conectar dropdown menu com base de dados


Diana Madeira

Recommended Posts

Olá, estou a criar um site onde o adminstrador pode mudar o estado de uma encomenda:

criei uma form onde tenho o dropdown menu:

   <form name="changestatus" id="changestatus" action="status_update.php" method="POST">
    <td> <input type="text" name="orderID" value=" <?php echo $row['order_id'];?>" readonly></td>
    <td> <?php echo $row['ISBN'];?></td>
    <td> <?php echo $row['quantity']; ?></td>
    <td> <?php echo $row['customer_id'];?></td>
    <td> <?php echo $row['created']; ?></td>
    <td>
        <select name="status" onchange="change()">
          <option <?php echo (strcmp($row['status'], 'Shipped')   == 0  ?  'selected' : '');?> value="Shipped">Shipped</option>
          <option <?php echo (strcmp($row['status'], 'Cancelled') == 0  ?  'selected' : '');?> value="Cancelled">Cancelled</option>
          <option <?php echo (strcmp($row['status'], 'Refunded')  == 0  ?  'selected' : '');?> value="Refunded">Refunded</option>
          <option <?php echo (strcmp($row['status'], 'Completed') == 0  ?  'selected' : '');?> value="Completed">Completed</option>
          <option <?php echo (strcmp($row['status'], 'Progress')  == 0  ?  'selected' : '');?> value="Progress">In progress</option>
        </select></td>
    </form>

 

Depois usando Jquery, tentei fazer que ao selecionar a opção pretendida a pagina fosse redirecionada para a pagina status_update.php.

Jquery código:

 

<script>
        function change(){
            $.post("status_update.php", $("#changestatus").serialize());
        }    
    </script>

Código status_update.php:

<?php
$_SESSION['message'] ='';
include("config.php");


if($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    $sql= "UPDATE orders SET status = 'a'";.//mysqli_escape_string($_POST['status'])."'where";
              
    if($conn->query($sql)===TRUE)
    {
        echo "<script>window.location.href='showOrders.php';</script>";  
    }
    else
    {
        echo 'Error';
        echo $sql;
    }
}
?>

Infelizmente ainda não consegui perceber muito o que não esta funcionando aqui, se e o Jquery ou o PHP. Talvez o problema seja aqui nesta linha:"$.post("status_update.php", $("#changestatus").serialize());" Alguem que possa ajudar?

Link to comment
Share on other sites

Diana, vejo vários problemas no seu código. Mas irei apenas corrigir o que me parece mais óbvio e imediato: serialize não funciona em campos que não sejam input! Portanto transforme todos aqueles <td> em <input> assim como tu fizeste com 'order_id'. Exemplo: <td> <?php echo $row['ISBN'];?></td> ficará assim: <input type="text" name="ISBN" value=" <?php echo $row['ISBN'];?>"> . E fique atenta ao atributo "name"!! Sem ele serialize também não funcionará. Se quiseres posso ajudar-te a reestructurar teu código para implementer o padrão MVC. Diga se funcionou a alteração que te sugeri.

Link to comment
Share on other sites

Olá Diana,

Claro que existe outra solução e não somente uma única, mas sim muitas outras! Como sempre, gosto de iniciar pelo mais fácil e mais óbvio: ao invés de substituir os <td> por <input>, apenas coloca <input>s dentro dos <td>s. Outra solução seria utilizar <div> ao invés de input, dar ID a cada <div> e acessá-las vida jQuery assim: $('#ISBN').html(); E depois, ao invés de chamar $.post() por quê não chamas $.ajax()? Existe alguma restrição? Mais tarde hoje irei executar teu código aqui e ver o que posso fazer. Saudações!

Link to comment
Share on other sites

Olá Diana,

Como prometido, executei e testei teu código aqui. Fi-lo funcionar também. Coloquei o código fonte à disposição no Google Drive pois não encontrei nenhuma opção de anexar ficheiros aqui no site: https://drive.google.com/file/d/0B0yKRF3F7Ge6SGpNUjhjVmtWM2s/view?usp=sharing

Basicamente tens que desistir da idéia de redirecionar a página diretamente do PHP. Ao invés disto, é melhor passar uma função callback para o $.post() do jQuery. Tenho certeza que se leres o código que preparei entendê-lo-ás perfeitamente, porém fico à tua disposição para qualquer pergunta que ainda tiveres.

Happy coding! 🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.