Jump to content
Diana Madeira

PHP & Jquery-conectar dropdown menu com base de dados

Recommended Posts

Diana Madeira

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?

Share this post


Link to post
Share on other sites
devgoncalo

ola

bem, tens de seguir o fluxo da informação.

F12 no browser -> Tab Console e/ou Tab Network

aí consegues ver o que se está a passar

cumps

Share this post


Link to post
Share on other sites
José Esteves

Olá Diana, mas tu não dissestes que problema está a acontecer!! Como poderemos ajudar-te? Peço-te por favor que expliques melhor o quê significa "o que não esta funcionando aqui".

Share this post


Link to post
Share on other sites
Diana Madeira

o que não funciona é ao selecionar a opçao que pretendo no dropdown menu simplesmte nao faz o que php pede. faço me entender?

Share this post


Link to post
Share on other sites
José Esteves

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.

Share this post


Link to post
Share on other sites
Diana Madeira

Ola José

Seria muito bom se me ajudasse a restruturar o codigo mas a verdade é que nao posso estar alterar os tds por input pois isso iria alterar todo o meu codigo! nao havera outra solucao?

Obrigado

Share this post


Link to post
Share on other sites
José Esteves

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!

Share this post


Link to post
Share on other sites
José Esteves

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! :)

Share this post


Link to post
Share on other sites
Diana Madeira

Olá José entretanto ontem a noite consegui, de qualquer das formas obrigado

Share this post


Link to post
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.