[PHP] URL -Handling

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Smokers, 3. April 2008 .

Schlagworte:
  1. 3. April 2008
    URL -Handling

    Also folgender Sachverhalt,
    hab nen kleines "Plugin" gebaut , das nur bewirken soll das ein Kalender angezeigt wird, und man die Tage markieren kann (rot).

    Das ganze wird lediglich über include eingebunden ( is nur eine php datei );

    Um Monate zu finden etc beziehe ich den kram über eine get variable... etc

    Nun habe ich folgendes Problem beim Generieren der Links...

    PHP:
    echo  '        <td class="red" onClick="location.href=\'' . $orgurl . '&m=' . $Monat . '&y=' . $Jahr . '&d=' . $i . '\'">' . "\n" ;   

    echo 
    '        <td class="days" onClick="location.href=\'' . $orgurl . '&m=' . $Monat . '&y=' . $Jahr . '&d=' . $i . '\'">' . "\n" ;

    echo 
    '        <td class="today" onClick="location.href=\'' . $orgurl . '&m=' . $Monat . '&y=' . $Jahr . '&d=' . $i . '\'">' . "\n" ;
    So werden die Links erzeugt.

    Sprich wenn das jemand in einer Seite einbaut die die Sektion auch aus der URL bezieht, wird die bisherige URL gelöscht soweit, und ich komme auf einer ganz anderen seite raus anstatt bei :
    ?section=start&m=2&y=1999&d=4.


    Dann habe ich gedacht ich nehme org. URL und hänge meine GETs dran,
    geht auch nicht, da nach 2 mal benutzen des Kalenders logischer Weise das hier rauskommt:
    PHP:
    index . php ? section = bw & m = 04 & y = 2008 & d = 5 & m = 4 & y = 2008 & d = 16

    Wie könnte man das am klügsten lösen?

    THX im voraus.


    S
     
  2. 3. April 2008
    AW: URL -Handling

    probiers doch mal mit

    <a href=\"$_SERVER[PHP_SELF]? und dann da das zeug hinten dran

    vllt hilfts ja was
    greetz

    zb: <a href=\"$_SERVER[PHP_SELF]?start=$i\" wenn du bei index.php bist generiert index.php?start=zahl die halt i hat kann man so oft machen wie man will
     
  3. 3. April 2008
    AW: URL -Handling

    jo, sende doch deine daten mit POST, dann kannst du auf ein array übergeben

    machst dazu einfach 3 hidden inputs

    <input type="hidden" name="day" value="3">
    <input type="hidden" name="month" value="4">
    <input type="hidden" name="year" value="2008">

    <input type="hidden" name="day" value="4">
    <input type="hidden" name="month" value="4">
    <input type="hidden" name="year" value="2008">

    <input type="hidden" name="day" value="5">
    <input type="hidden" name="month" value="4">
    <input type="hidden" name="year" value="2008">

    gruß
     
  4. 3. April 2008
    AW: URL -Handling

    @Smokers, wer hält dich davon ab zu kontrollieren ob die GET - Parameter schon gesetzt sind?
     
  5. 3. April 2008
    AW: URL -Handling

    Meine unwissnheit über gute Regexp mit denen ich zurnot
    die ersetzen kann, bzw entferne.

    ich arbeite höchst ungern damit und stelle mich immer wieder dumm an mit dem erstellen solcher regexp und mit dem finden der richtigen funktion.

    str_replace
    oder
    ereg_replace, oder wie auch immer alle heißen und wo der genaue unterschied ist.

    Außerdem habe ich gehofft das es eine weitaus einfacherere , bzw weitaus zutreffendere Möglichkeit gibt.



    \\ Zu den anderen:

    Das Problem ist, das ich nicht weis was womöglich für andere GET variablen gesetzt sind.
    es könnte auch area=start sein, oder page=1231323......

    und wenn ich die $_SERVER['self'] Lösung nehme , gehen mit die alten GETs flöten,
    wenn ich allerdings die alten GETs wieder ranhänge, dann werden beim 2ten mal benutzen des Kalenders
    MEINE GETs auch 2x dran gehängt, weil ja
    die alten gets genommen werden, und meine dran gehängt werden.
     
  6. 3. April 2008
    AW: URL -Handling

    hä?
    eentweder ich versteh nich was du machen willst oder es is einfach falsch^^
    was willst du mit regexp machen?

    Du musst doch nur prüfen ob die Werte gesetzt sind.
    also if(isset($blblbla)){ echo "was auch immer"; }
    da brauchst du keine regexp!!

    vllt. hab ichs auch falsch verstanden^^
     
  7. 3. April 2008
    AW: URL -Handling

    richtig, so sehe ich das auch das wäre die einfachste lösung .... denn man muss dafür nciht unbedingt keine regexe kennen/können und zum beispiel um die alten get parameter nicht zu verlieren, hast du das get array doch im script immer verfügbar .. also die kalendar/url funktionalität gehört mindestens in eine funktion als kannste doch schonmal dirty anfangen ....
     
  8. 3. April 2008
    AW: URL -Handling

    Also nochmal , es ist nicht so einfach wies sich anhört, oder ich bin wiedermal zu doof.

    mein script wird in jede X-beliebige Seite eingebaut,sprich andere GET parameter sind nicht namentlich bekannt und kann ich also so nicht gezielt auslesen.

    if(isset($_GET[???])).......

    , gehen wir also von einem CMS aus, derjenige baut auf der section "kontakt" mein kalender ein.

    dann sieht die URL so aus:
    jemand klickt auf meinen kalender, meine GETs überschreiben entweder, das "section=kontakt" oder wenn ich vorher die bisherigen GETs auslese ($_SERVER['STRING_QUERY'])

    dann wird beim 2ten klick ein link generiert der so aussieht:

    beim vierten mal dann so:

    also ich finde da keine andere lösung als den query_string mit regexp zu durchsuchen und dann meine ersten GETs zu entfernen , und neu dazuzuschreiben.

    Vllt hab ich auch nen Denkfehler.
    Hier mal mein ganzes Script bisher.
    Nich lachen, und nicht über die Form reden, war nur für mich intern:

    Code:
    <?php
    $Monat = (int)htmlspecialchars($_GET['m']);
    $Jahr = (int)htmlspecialchars($_GET['y']);
    $Tag = (int)htmlspecialchars($_GET['d']);
    
    
    if(empty($Monat)){
     $Monat = date("m",time());
    }
    if(empty($Jahr)){
     $Jahr = date("Y",time());
    }
    
    ?>
    <style>
    <?php
    include_once("style.css");
    ?>
    </style>
    <?php 
    
    ?>
    <table class="kalender">
     <tr>
     <td class="little">
     <a href="?m=<?php if($Monat-1 == "0") { echo '12'.'&y=';echo $Jahr-1; } else { echo $Monat-1; if($Jahr != date("Y",time() )) echo '&y='.$Jahr; } ?>"> << </a>
     </td>
     <td class="big">
     <?php echo date("F",mktime("0","0","0",$Monat,"1","0")) . " " . $Jahr ; ?> 
     </td>
     <td class="little">
     <a href="?m=<?php if($Monat+1 == "13") { echo '1'.'&y=';echo $Jahr+1; } else { echo $Monat+1; if($Jahr != 2008) { echo '&y='.$Jahr;}; } ?>"> >> </a>
     </td>
     </tr>
    </table>
    <table class="kalender">
     <tr class="top">
     <td class="little">
     Mo
     </td>
     <td class="little">
     Di
     </td>
     <td class="little">
     Mi
     </td>
     <td class="little">
     Do
     </td>
     <td class="little">
     Fr
     </td>
     <td class="little">
     Sa
     </td>
     <td class="little"> 
     So
     </td>
     </tr>
     <tr>
    <?php
    
    $days = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');
    
    switch(date("l",mktime("0","0","0",$Monat,"1",$Jahr))) {
     case "Monday" : $minus = 0; break;
     case "Tuesday" : $minus = 1; break;
     case "Wednesday" : $minus = 2; break;
     case "Thursday" : $minus = 3; break;
     case "Friday" : $minus = 4; break;
     case "Saturday" : $minus = 5; break;
     case "Sunday" : $minus = 6; break;
     default : break;
     
    }
    for($i=1-$minus;$i<= date("t",mktime("0","0","0",$Monat,"1",$Jahr));$i++){
     $innercount++;
     if($i > 0) {
     // generieren der OnClick Verlinkungen
     if(date("Ymd",time()) == date("Ymd",mktime("0","0","0",$Monat,$i,$Jahr))) {
     echo ' <td class="today" onClick="location.href=\'?m='.$Monat.'&y='.$Jahr.'&d='.$i.'\'">'."\n";
     }
     else {
     if((date("Ymd",mktime("0","0","0",$Monat,$i,$Jahr))== date("Ymd",mktime("0","0","0",$Monat,$Tag,$Jahr))) ) {
     echo ' <td class="red" onClick="location.href=\'?m='.$Monat.'&y='.$Jahr.'&d='.$i.'\'">'."\n"; 
     }
     else {
     echo ' <td class="days" onClick="location.href=\'?m='.$Monat.'&y='.$Jahr.'&d='.$i.'\'">'."\n";
     }
     }
     echo ' '.$i."\n";
     echo ' </td>'."\n"; 
     
     if($innercount%7 == 0) {
     echo ' </tr>'."\n";
     echo ' <tr>'."\n";
     }
    
     
     }
     else {
     echo ' <td>'."\n";
     echo ' &nbsp;'."\n";
     echo ' </td>'."\n"; 
     }
    }
    echo '</table>';
    
    ?>
    
    
    
     
  9. 3. April 2008
    AW: URL -Handling

    Quick and dirty und nicht getestet



    PHP:
    $reserved_gets  = array( "m" "d" "y" );

    $newurl  "" ;
    $counter  0 ;
    foreach(
    $_GET  as  $varname  =>  $varcontent )
    {
      if(
    $counter == 0 )
      {
        
    $newurl  .=  "?" ;
      }
      else 
      {
        
    $newurl  .=  "&" ;
      }
      
      if(
    in_array ( $varname $reserved_gets ))
      {
        switch(
    $reserved_gets )
        {
           case 
    "m" :   $newurl  .=  $varname . "=" . $Monat ;
                      break;
           case 
    "d"
           
    #und so weiter
        
    }
      } 
      else
      {
        
    $newurl  .=  $varname . "=" . $varcontent ;
      }
      
    $counter ++;
    }
    ist total unsauber, aber aufgrund deines bisherigen codes geht es nicht viel sauberer (und in der textbox hier :>)
    das ganze kann man jetzt noch schön in funktionen aufschlüsseln + zusätzliche option damit keine statischen GETs genommen werden sondern dynamische

    naja, ich sag nur ajax
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.