Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHP Get Parameter nicht anzeigen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] PHP Get Parameter nicht anzeigen

    Hallo,

    ich habe da ein Problem bei meiner index.php, und zwar:

    Wenn jemand auf diesen Link klickt um einen Eintrag zu löschen, steht dann in der URL noch "http://die-domain.tld/index.php?action=del&id=135"
    Ich hätte aber gerne das nur "http://die-domain.tld" da steht, also die ganzen Parameter nicht angezeigt werden. (oder ggf. http://die-domain.tld/index.php)

    DER HREF LINK:
    PHP-Code:
    <a href='index.php?action=del&amp;id=". $adr['id'] ."' onclick=\"return confirm('Are you sure you want to delete?\\nUNRECOVERABLE!');\"><img src=\"img/table_delete.png\" alt=\"delete\" border=\"0\" /></a> 
    DAS SCRIPT:
    PHP-Code:
    <?php
    if ((isset($_GET['action']) && ($_GET['action']=="del") && (isset($_GET['id'])))) {
        
    $id $_GET['id'];
        
    $qry0 mysql_query ("SELECT id, uid FROM grid WHERE id = '$id' OR uid = '$id'");
        while (
    $ad mysql_fetch_array($qry0)) { 
            if(
    $ad['uid']!="") {
                
    $iddel =$ad['id'];
                  
    rmdirs("/contracts/$iddel/");
                  
    $qry mysql_query ("DELETE FROM grid WHERE id = '$iddel'");
            }
            if(
    $ad['uid']=="") {
                  
    $iddel =$ad['id'];
                  
    rmdirs("/contracts/$iddel/");
                  
    $qry mysql_query ("DELETE FROM grid WHERE id = '$iddel'");
            }
        }
    //Ajax Script was die Tabelle aktualisiert.
        
    echo "<script language=\"javaScript\">$('#myForm').ajaxForm({ target: '#showdata', success: function() { $('#showdata').fadeIn('slow'); } });</script>";
    //Ajax Notification das es erfolgreich ausgeführt worden ist.
        
    echo "<script language=\"javaScript\">$(document).ready(function() { $.growlUI('Action delete', 'Successfully completed!'); }); </script>";
    }
    ?>

    Hat jemand eine Idee wie ich die get paramenter verstecken kann, so das sie nicht mehr in der URL angezeigt werden sobald sie ausgeführt worden sind?

    Die Seite soll aber nicht neu geladen werden, da sonst die Ajax Notification nicht mehr funktioniert ;|

    Es würde eine .htaccess Variante funktionieren, da weiss ich nur nicht genau wie ich das anstellen soll

    DANKE!


  • #2
    Spricht etwas dagegen POST zu verwenden?

    Kommentar


    • #3
      Hmm, und wie kann ich dann die zu löschende ID ($adr['id']) übergeben?

      Kommentar


      • #4
        Du scheinst Null Ahnung von der Materie zu haben.

        - Ajax erzeugt kein Neuladen der Seite, ergo auch keine URL Änderung
        - Unsichtbare Parameterisierung gibts nunmal nicht.
        - POST kann man nachlesen. Das funktioniert so, wie es alle Tutorials zum Thema beschreiben.
        - .htaccess ist wieder eine andere Baustelle
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Du hast Luecken in deinem MySQL.

          $id Variable ist nicht sicher

          Kommentar


          • #6
            Durch einen Klick auf deinen Delete-Link wird die Seite neu geladen. Im Skript wird dann, wenn bestimmte GET-Parameter gesetzt sind, der Datensatz gelöscht und ajaxForm fügt nachträglich eine Änderung in dein Formular ein bzw. lässt einen Text "einfaden".

            Die Begründung, dass die AJAX-Notification dann nicht mehr funktionieren würde ist für mich daher absolut unlogsich.

            Du könntest also den Klick abfangen und die ID an ein serverseitiges Skript schicken dessen Response du dann in deiner JS-Funktion verarbeiten und dementsprechend reagieren kannst (Erfolgsmeldung+entspr. Datensatz aus Tabelle ausblenden oder Fehermeldung).

            Kommentar


            • #7
              statt dem browser per href zu sagen das er beim click auf den link ne "andere" seite laden soll als "augenscheinlich dargestellt", mach nen Ajax-Request und ruf damit das script auf.. onClick-Event sei mit dir, oder von mir aus auch QnD .. href="javascript:runthisstupidfunction();"

              Ich glaub du hast da lediglich entweder den überblick kurz verloren oder das einfach übersehen ^^
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar


              • #8
                Konnte nun mein Problem wie folgt lösen:

                Ajax Script zum übertragen des Links:
                PHP-Code:
                <script type="text/javascript">
                   var 
                http_request false;
                   function 
                makeRequest(urlparameters) {
                      
                http_request false;
                      if (
                window.XMLHttpRequest) {
                         
                http_request = new XMLHttpRequest();
                         if (
                http_request.overrideMimeType) {
                            
                http_request.overrideMimeType('text/html');
                         }
                      } else if (
                window.ActiveXObject) {
                         try {
                            
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
                         } catch (
                e) {
                            try {
                               
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
                            } catch (
                e) {}
                         }
                      }
                      if (!
                http_request) {
                         
                alert('Cannot create XMLHTTP instance');
                         return 
                false;
                      }
                      
                http_request.onreadystatechange alertContents;
                      
                http_request.open('GET'url parameterstrue);
                      
                http_request.send(null);
                      $(
                document).ready(function() { $.growlUI('Action delete''Successfully completed!'); }); 
                   }

                   function 
                alertContents() {
                      if (
                http_request.readyState == 4) {
                         if (
                http_request.status == 200) {
                            
                result http_request.responseText;
                            
                document.getElementById('showdata').innerHTML result;            
                         } else {
                            
                alert('There was a problem with the request.');
                         }
                      }
                   }
                </script> 
                Das PHP Script was ausgeführt wird:
                PHP-Code:
                if ((isset($_GET['action']) && ($_GET['action']=="del") && (isset($_GET['id'])))) {
                    
                $id $_GET['id'];
                    
                $qry0 mysql_query ("SELECT id, uid FROM grid WHERE id = '$id' OR uid = '$id'");
                    while (
                $ad mysql_fetch_array($qry0)) { 
                        if(
                $ad['uid']!="") {
                            
                $iddel =$ad['id'];
                              
                rmdirs("/contracts/$iddel/");
                              
                $qry mysql_query ("DELETE FROM grid WHERE id = '$iddel'");
                        }
                        if(
                $ad['uid']=="") {
                              
                $iddel =$ad['id'];
                              
                rmdirs("/contracts/$iddel/");
                              
                $qry mysql_query ("DELETE FROM grid WHERE id = '$iddel'");
                        }
                    }
                }
                ?> 

                Der Neue Link:
                PHP-Code:
                <a href='#' onClick=\"makeRequest('index.php', '?action=del&amp;id="$adr['id'] ."')\"><img src=\"img/table_delete.png\" alt=\"delete\" border=\"0\" /></a> 

                Nun wird der BrowserLink mit einem # dargestellt und der Link ist aber nicht mehr direkt sichtbar (Nur noch im Quelltext, was aber in meinem Fall nicht weiter tragisch ist.)

                PS: @md5(): Hällst du es für sicherer wenn ich die id so übertrage?
                PHP-Code:
                $iddel=mysql_real_escape_string($ad['id']); 
                bzw.
                PHP-Code:
                $id=mysql_real_escape_string($_GET['id']); 

                Kommentar

                Lädt...
                X