88871
Goto Top

PHP - Probleme mit Zähler und GET

Hoied

Hab da mal wieder ein Problem und kriege das nicht ganz gebacken.


Ich möchte folgendes:


1. Ich gebe ein MAXIMUM auf der ersten Seite an. Da kann der User eine 1-5 angeben.
2. Dann soll auf der zweite Seite ein Formular immer wieder neu geladen werden bis das MAXIMUM erreicht ist.
3. Wenn dann das MAXIMUM erreicht ist, leite ich per header() auf die dritte und letzte Seite weiter.

Auf der ersten Seite gebe ich das Maximum per URL mit: PARTS
Auf der zweiten Seite hole ich mir das Maximum per $_GET[PARTS].
Starte auf der ersten Seite die URL mit part=1, damit ich auf der zweiten Seite mit der 1 beginnen kann.
Vergleichen bis das MAXIMUM erreicht ist, mach ich so: if($PART <= $PARTS) { mySQL befüllen }
Erhöhen mach ich folgendermassen: $PART++

Auf der zweiten Seite, welches sich bis zum MAXIMUM wieder laden soll, hat das Formular hat folgende Action:
"action='SichSelber.php?part=$PART&parts=$PARTS"


Wie soll ich nun von der ersten Seite das mitgeben, auf der zweiten abfangen und dann bis zum MAXIMUM durchlaufen lassen ? Hoffe das war Verständlich face-smile

PS: Möchte es über GET lösen.....nicht mit $_SESSION

Content-Key: 186364

Url: https://administrator.de/contentid/186364

Printed on: April 18, 2024 at 08:04 o'clock

Member: Arano
Arano Jun 12, 2012 at 17:52:11 (UTC)
Goto Top
Hi,

Hoffe das war Verständlich face-smile
Kein Stück !

Wie soll ich nun...
...
Möchte es über GET lösen...
Tja, dann wohl in der URI als Parameter !

Erkläre doch einmal wozu das ganze gedacht sein soll, denn wie gesagt habe ich nichts verstanden !

Hm... man bemüht sich ja...

<?php

if( isset($_GET['parts']) && is_numeric($_GET['parts']) )  
    repeat_n_times( (int)$_GET['parts'] );  
else
    echo 'Parameter one expect to be integer - something given';  


function repeat_n_times( $n )
{
    for( $x=1; $x<=$n; ++$x )
    {
        // mache etwas N mal...
    }
}
?>
So kann man auch alles in eine Datei schieben - FALLS es das ist was du benötigst !?.


~Arano
Mitglied: 88871
88871 Jun 13, 2012 at 08:48:59 (UTC)
Goto Top
Hei Arano

Habe hier das mal Visualisiert. Eigentlich wäre das ganze ja ne simple Sache. Aber ich krieg das Hochzählen, per URL wieder mitgeben und wieder auslesen nicht so genau hin.....


http://postimage.org/image/lurjx1znr/
Mitglied: 88871
88871 Jun 13, 2012, updated at Jun 15, 2012 at 13:32:41 (UTC)
Goto Top
Ich habs gelöst. Danek Dir Arano für den Input

Meine IF Abfragen waren nicht ganz direkt. Frage nun auch nach dem Inhalt des Submits nach. So funktioniert mein Script. Kann es hier nicht posten, ist zu Spaghetti-mässig face-smile


if (!isset($_POST['submit']) || ($_POST['submit'] != 'Speichern'))  
{
Mitglied: 88871
88871 Jun 13, 2012 updated at 09:29:30 (UTC)
Goto Top
Jetzt hab ich einfach das Problem das er bei Gleichstand schon auf die dritte und letzte Seite weiterleitet und den letzten teil nicht speichert. also wenn ich MAX auf "3" habe, geht er bei * gleich auf die nächste seite und speichert die 3 nicht ab face-sad

Hab folgende Varianten gestestet:

Variante1:
if($PART <= $MAX)
(Da meinte ich doch: <= – prüft ob der linke Wert kleiner oder gleich ist vom rechten Wert. Das "gleich" kapiert mein webserver wohl nicht. neuste php5 und mySQL drauf)

Variante2:
 
if(($PART < $MAX) OR ($PART == $MAX))
(geht auch nicht, dasselbe ergebnis)


(rest vom code)
 
{
mySQL eintrag
}
else
{
header(location="".....)  
}
Member: Arano
Arano Jun 13, 2012 updated at 11:26:52 (UTC)
Goto Top
Hi,

Lass dir msl deine Zahlenwerte zusätzlich ausgeben, dann sollte es klar werden
solange meine Vermutung stimmt - das anders hochgezählt wird als du das wolltest ;)

~Arano
Mitglied: 88871
88871 Jun 14, 2012 at 12:46:08 (UTC)
Goto Top
hoi

habs nun so gelöst, ohne GET POST

Schreibe auf der ersten Seite alles in die DB

Hole auf der zweiten Seite zu beginn diese zahlen mit einer query.
am ende der seite update ich das feld direkt mit +1 als query

thats it face-smile
Mitglied: 88871
88871 Jun 15, 2012 at 07:10:15 (UTC)
Goto Top
also so löse ich das nun:

SEITE1:

MAX = schreibe bei post submit die eingegebene zahl in die db. liefere mir mit "mysql_insert_id()" die ID in eine variable zurück.
TEIL = schreibe auch gleich in eine teil spalte eine "1"
die MAX variable gebe ich dann fuer seite2 in der URL mit.
code:
if(isset($_POST['submit'])) // abfangen vom submit button  
{   
    mysql_query("INSERT INTO  
                                                tabelle
                                            (
                                                MAX,                                           
                                            ) 
            
                            VALUES 
                                            (
                                                '" .  $_POST[MAX]. "'  
                                            )
                            ") or die(mysql_error());  
            $max = mysql_insert_id();             
        }    
}



SEITE2:

in der sich immer wiederholende seite hole und erhöhe ich per mySQL

also holt mir und erhöht mySQL mir (mit +1) meine zahl noch bevor ich die seite wieder abschicke face-smile
      <?php
      
        // erhöhen vom temporaeren teile feld
        mysql_query("UPDATE xxxxxxxx SET xxxxxx = $teil +1 WHERE xxxx = '$_GET[xxxID]'");  
            
      ?> 

so, in etwa. also nichts mehr mit get, post, ++ blabla....
Member: Arano
Arano Jun 15, 2012 at 15:57:34 (UTC)
Goto Top
Tagchen face-smile

Okay, nach den Privaten Nachrichten weiß ich ja jetzt was es werden soll:

"Es sollen Seminare geplant werden können.
Im erstem Schritt werden wird der Seminartitel und die Anzahl der Seminartage bestimmt.
Im zweitem schritt soll nun für jeden Seminartag eine separater Titel mit Beschreibung angegeben werden können, Tag für Tag in einer Schleife und
im Dritten Schritt dann zusätzliches zum Seminar"


Meine Idee ist nun folgende:
Ich muss darauf hinweisen, das ich das ein bisschen gemischt habe, Dark3zz wollte das ursprüngliche ja nur per "GET" und ohne Sessions lösen, in meinem Beispiel habe ich jetzt aber hauptsächlich die Session verwendet um es kurz halten zu können. Alternativ kann das natürlich auch direkt in die Datenbank gespeichert oder in einer Datei zwischengespeichert werden...

Folgenden Code habe ich nur im Editor getippt und niemals getestet

<?php session_start(); ?>
<html>

<form action="<?php /*echo $_SERVER['PHP_SELF'];*/ ?>" method="POST" name="createWorkshop">  

<?php

$action = isset($_POST['createWorkshop'])&&isset($_POST['step'])  
          ? $_POST['step']  
          : 'createTitle';  

case( $action )
{

    case 'createTitle':  
        echo '<label for="wsTitle">Titel: </label><input type="text" name="workshopTitle" id="wsTitle">'  
            .'<label for="wsDays" >Tage:  </label><input type="text" name="workshopDays"  id="wsDays">'  
            /* Verstckte Felder zum transport von Informationen */
            .'<input type="hidden" name="step" value="saveTitle">'  
        break;
        
        
    case 'saveTitle': // speichere grundinformationen  
        // prüfe den wert von "wsTitle" 
        // prüfe den wert von "wsDays" 
        $_SESSION['wsTitle']    = $_POST['workshopTitle']; // oder schon mal in die DB schieben  
        $_SESSION['wsDays']     = $_POST['workshopDays'];  // und die Workshop-ID auslesen  
        $_SESSION['wsDayTitle'] = array();   // lege leeres array für die Tagestitel an  
        
        // KEIN break ! - wir wollen mit den Tagen weiter machen
        
        
    case 'createDays':  
        $curDay       = isset($_POST['createDay']) ? $_POST['createDay'] : 0;  
        $workshopDays = $_POST['workshopDays']; // wer des hidden-fields, der Session oder aus der temp-DB-tabelle  
        
        // aktueller tag ist kleiner oder gleich maximul UND kleiner oder gleich 5
        if( $workshopDays>=$curDay AND 5>=$curDay)
        {
            // wenn eine titel angegeben wurde
            // beim ersten "betreten"/aufrufen von -case-createDays- gibt es noch keinen titel !! 
            if( 0<$curDay )
            {
                // prüfe den wert von "wsDayTitle" 
                $_SESSION['wsDayTitle'] = $_POST['workshopDayTitle']; // nicht vergessen, array beginnt bei null !  
            }
            
            echo '<label for="wsDayTitle">Tagestitel: </label><input type="text" name="workshopDayTitle" id="wsDayTitle">';  
                /* Verstckte Felder zum transport von Informationen */
                .'<input type="hidden" name="step"         value="createDays">'  
                .'<input type="hidden" name="createDay"    value="'.++$curDay.'">'  
                // createDays, einmal als wert von "step" und einmal 
                // als eigenes feld für die zahl des tages
                .'<input type="hidden" name="workshopDays" value="'.$workshopDays.'">'  
                // hier ggf. für jeden forhanene tag ein zusätzliches hidden-feld erstellen
                // lassen um die tagestitel transportieren zu können (Workshoptitel natürlich auch !)
                // <input name="dayTitels">     mit leere eckigen Klamern !! PHP macht daraus ein Array ;) 
                // gibt es viele tagesbezogene daten, macht das speichern in der session oder
                // der DB natürlich mehr sinn
            
            // daten zwischengespeichert, neues formular ausgegeben, beende switch-case
            break;
        }
        // leten workshoptag oder maximum erreicht
        else
        {
            // wir verlassen nun dieses case durch ein fehlendes "break" in diesem 
            // leeren else block und rutschen so ins nächste case -> zusatzdaten
        }
        
        
    case 'additional':   
        echo '<label for="wsHotel">Hotelname: </label><input type="text" name="workshopHotel" id="wsHotel">';  
            /* Verstckte Felder zum transport von Informationen */
            .'<input type="hidden" name="step"         value="saveWorkshop">'    //   <-- nächster schritt SPEICHERN  
            .'<input type="hidden" name="createDay"    value="'.++$curDay.'">'  
            .'<input type="hidden" name="workshopDays" value="'.$workshopDays.'">'  
            // hier müssten nun für jede information ein hiddenfield erstellt werden...
            // vom workshoptitel üder jeden einzelnen tag... viel zu viel.
            // die müssten ja dann auch immer wieder auf gültigkeit geprüft werden   oO
        
        break;
        
        
    case 'saveWorkshop':  
        // alle daten wurde gesammt, befinden sich in der Session und können nun
        // in der datenbank gespeichert werden - FERTIG
        echo '...geschafft !'  
        
        break;
        
        
    default: 
        // hm... unvorhergesehener fehler
        // schreibe info in logfile, sende mail an admin, 
        
} // end switch-createWorkshop

?>

<input type="submit" name="nextStep" value="...weiter &gt;">  
</form>

</html>

Und noch mal das Switch separat:
<?php

$action = isset($_POST['createWorkshop'])&&isset($_POST['step'])  
          ? $_POST['step']  
          : 'createTitle';  

case( $action )
{

    case 'createTitle': break;  
        
    case 'saveTitle': // speichere grundinformationen  
        
    case 'createDays':  
        if( $workshopDays>=$curDay AND 5>=$curDay)
        {
            break; // daten zwischengespeichert, neues formular ausgegeben, beende switch-case
        }
        else // leten workshoptag oder maximum erreicht
        {
            // wir verlassen nun dieses case durch ein fehlendes "break" in diesem 
            // leeren else block und rutschen so ins nächste case -> zusatzdaten
        }
        
    case 'additional': break;  
        
    case 'saveWorkshop':  
        echo '...geschafft !'  
        break;
        
    default: 
        // hm... unvorhergesehener fehler
        // schreibe info in logfile, sende mail an admin, 
        
} // end switch-createWorkshop

?>

Die einzelnen CASEs, kann man natürlich auch in Funktionen oder Dateien auslagern die dann aufgerufen bzw. inkludiert werden. Dann wird das SWITCH wieder übersichtlicher und alles wartbarer - ist ja nur ein Beispiel ;)

So, wenn du fragen hast nur zu ! face-smile


Schönes Wochenende
~Arano