frage:



  • ich lasse auf eine abfrage basierend eine tabelle erstellen. diese hat in jeder zeile eine checkbox:

    <input type='checkbox' name='löschen[$i]' value=''>

    wobei $i bei 0 beginnt, und bis $i<anzahl der reihen geht.

    dann mach ich einen submit-button und rufe eine php seite auf.

    wie kann ich jetzt auf die checkboxen zugreifen?
    löschen[i] klappt nicht. weiss jemand einen rat?



  • Hi,

    versuch mal einfach

    <input type='checkbox' name='loeschen[]' value=''>
    

    Danach solltest Du mit loeschen[i] auf die einzelnen Elemente zugreifen können

    [ Dieser Beitrag wurde am 24.06.2003 um 23:19 Uhr von Locke editiert. ]



  • merci



  • hä, wieso ist die variable leer, wenn ich print $loeschen[0]; auch wenn ich die checkbox angeklickt habe?

    Das würde mir ja dann ar nix bringen, ich will ja nen vergleich mit dem wert der checkbox machen...

    Ne, passd scho, ich war nur weich, und hadde das value feld leer gelassen.
    Aber ne andre Frage, wieso kann ich eine SQL-Abfrage-ergebnis nicht in eine Session variable speichern?

    [ Dieser Beitrag wurde am 24.06.2003 um 23:40 Uhr von StudentJojo editiert. ]



  • Das Problem ist folgendes: ich habe in einer php datei mehrere funktionen. um aus einer funktion die datnbankabfrage zu bekommen, die ich dort gemacht habe, will ich diese in eine sessionvariable speichern. in der selben funktion, kann ich diese auch benutzen, in der nächsten ist sie leer, wieso das??



  • Meinen Beitrag bitte löschen, hat sich ja schon erledigt

    [ Dieser Beitrag wurde am 25.06.2003 um 00:40 Uhr von CarstenJ editiert. ]



  • Hi StudentJojo,

    hast Du die Variable als mit

    global $Variablenname;
    

    in der Funktion bekannt gemacht? Ansonsten wird sie lokal in der Funktion neu deklariert.

    Alternativ kannst Du auch

    $_SESSION["Variablenname"]
    

    verwenden (PHP-Version>=4.1.0)

    [ Dieser Beitrag wurde am 25.06.2003 um 07:14 Uhr von Locke editiert. ]



  • ich wollte es ja mit $_SESSION MACHEN, ging nicht. die 1. funktion baut mir das formular, die zweite soll auf basis der vom formular übergebenen daten was rechnen, dazu braucht sie aber ein abfrageergebnis der 1. funktion. dieses hatte ich eben in ne session variable gemacht, aber die war dann in der 2. funktion leer. in der 1. funktion war sie komischerweise korekt...



  • Etwas Code waehre sicherlich ganz hilfreich um das Prob loesen zu koennen 😉



  • btw. auf die Daten aus dem Formular solltest du über $_GET, $_POST oder $_REQUEST zugreifen



  • hat sich alles geklärt. hätte da aber noch eine performance frage:

    Stimmt es, das mysql_num_rows() eine Serverkiller werden könnte, damit meine ich, dass er total überlastet werden könnte?
    Als ich das gehört habe, konnte ich es nicht so recht glauben, denn was soll daran so aufwendig sein, von nem Array die reihen zu zählen?!
    Für ne kleine Erklärung wäre ich sehr dankbar...



  • Nochwas, was ist schlauer:

    datum einmal creieren, und in session variable speichern, oder auf jeder seite neu creieren?

    $datum=getdate();
    $_SESSION['date']=$datum[year]."-".$datum[mon]."-".$datum[mday];
    


  • Ich denke das spielt von der Perforance her keine allzugroße Rolle. Aber einfacher geht's z.B. mit date('Y-m-d'); 😉



  • Ok, danke, aber weisst du auch was über das mysql_num_rows() ?
    Achso, das Datum kann ich doch nicht so machen, da ich es in der Form 2003-06-29 brauche...

    [ Dieser Beitrag wurde am 27.06.2003 um 10:23 Uhr von StudentJojo editiert. ]


  • Mod

    Original erstellt von StudentJojo:
    Ok, danke, aber weisst du auch was über das mysql_num_rows() ?
    Achso, das Datum kann ich doch nicht so machen, da ich es in der Form 2003-06-29 brauche...

    ich weiss nichts darueber das mysql_num_rows() lahm sein soll, man ruft es sowieso nur einmal pro result auf, insofern kann es nicht so viel kosten...

    mittels date() kannst du jedes format bekommen das du willst!



  • stimmt!!

    warum kann ich ne datenbankabfrage nicht in ner session variable speichern:

    result=mysqlquery(result=mysql_query(query);
    _SESSION['result']=result;

    und wenw ichs wieder aufrufen will:

    result=result=_SESSION['result'];
    print mysql_result($result, 0, "name");

    Warning: mysql_result(): supplied argument is not a valid MySQL result resource

    Ich kann keine neue Abfrage machen, da zwischenzeitlich meine Datenbank verändert sein könnte, und dann hab ich nicht mehr genau die selbe abfrage...



  • Ich denke mal, dass das DB_Result-Handle keine Scriptübergreifende Gültigkeit hat -> wenn du genau die selbe Abfrage brauchst (warum überhaupt?) musst du wohl alles einlesen und das dann abspeichern. Wird aber wohl bei größeren Datenmengen sehr, sehr lahm werden und ist daher nicht zu empfehlen.



  • Wenn ich z.B. die user Verwalte, mache ich das, indem ich alle in eine Tabelle auslese, und daneben eine checkbox zum freischalten und löschen mache.

    wenn ich jetzt nun auf ausführen klicke, dann wird eine funktion aufgerufen, die ersteinmal die datenbank abfrage noch einmal macht, und dann wird der jeweilige datensatz i gelöscht.
    wenn nun jemand zwischenzeitlich sich anmeldet, dann passt das jeweilige i in der checkbox nicht mehr mit dem dazugehörigen datensatz überein, und es wird jemand falsche gelöscht...



  • Original erstellt von StudentJojo:
    wenn ich jetzt nun auf ausführen klicke, dann wird eine funktion aufgerufen, die ersteinmal die datenbank abfrage noch einmal macht, und dann wird der jeweilige datensatz i gelöscht.

    Wozu machst du vor dem Löschen eine DB-Abfrage 😕

    Original erstellt von StudentJojo:
    wenn nun jemand zwischenzeitlich sich anmeldet, dann passt das jeweilige i in der checkbox nicht mehr mit dem dazugehörigen datensatz überein, und es wird jemand falsche gelöscht.

    Durch das anmelden eines neuen Users ändern sich doch nicht User-IDs der bisherigen. Oder ist i deine Position des Datensatzes im Ergebnis-Array? Damit solltest du eh nicht arbeiten 😉



  • if ($_GET['funktion']==1)
        {
            $forum=mysql_connect($_SESSION['server'], $_SESSION['dbname'], $_SESSION['dbpasswort']) or die ("Leider konnte keine Verbindung zum Datenserver hergestellt werden.");
            mysql_select_db("forum");
            $query="select login, vorname, nachname, wohnort from user where freigeschaltet=0 order by 'login'";
            $result=mysql_query($query);
            $rows=mysql_num_rows($result);
            $_SESSION['rows']=$rows;
            mysql_close();
            print   "<form action='sql.php?funktion=4' method='post'>".
                    "<div align='center'<br><br><br><table border='1' width='80%' bordercolor='#000000'summary='' align='center'>".
                    "<tr>".
                    "<td align='center'><font color='#0033ff'><b>Login-Name</b></font></td>".
                    "<td width='16%' align='center'><font color='#0033ff'><b>Vorname</b></font></td>".
                    "<td width='16%' align='center'><font color='#0033ff'><b>Nachname</b></font></td>".
                    "<td width='16%' align='center'><font color='#0033ff'><b>Wohnort</b></font></td>".
                    "<td width='16%' align='center'><font color='#0033ff'><b>Freischalten</b></font></td>".
                    "<td width='16%' align='center'><font color='#0033ff'><b>Löschen</b></font></td>".
                    "</tr>";
            for ($i=0; $i<$rows; $i++)
            {
                print   "<tr>".
                            "<td align='center'>".mysql_result($result, $i,"login")."</a>"."</td>".
                            "<td align='center'>".mysql_result($result, $i,"vorname")."</td>".
                            "<td align='center'>".mysql_result($result, $i,"nachname")."</td>".
                            "<td align='center'>".mysql_result($result, $i,"wohnort")."</td>".
                            "<td align='center'><input type='checkbox' name='freischalten[$i]' value='1'></td>".
                            "<td align='center'><input type='checkbox' name='loeschen[$i]' value='1'></td>".
                        "</tr>";
            }
            print   "</table>".
                    "<br><br><br><input type='submit' value='ausführen'>".
                    "</div>".
                    "</form><br><br>".
                    "<div align='center'><a href='sql.php?funktion=0'>zurück</a></div>";
        }
    
    if ($_GET['funktion']==4)
        {
            $forum=mysql_connect($_SESSION['server'], $_SESSION['dbname'], $_SESSION['dbpasswort']) or die ("Leider konnte keine Verbindung zum Datenserver hergestellt werden.");
            mysql_select_db("forum");
            $query="select login, vorname, nachname, wohnort from user where freigeschaltet=0 order by 'login'";
            $result=mysql_query($query);
            for ($i=0; $i<$_SESSION['rows']; $i++)
            {
                if ($freischalten[$i]==1)
                {
                    $login=mysql_result($result, $i, "login");
                    mysql_query("update user set freigeschaltet=1 where login='$login'");
                    print "<br><br><div align='center'>".$login." wurde freigeschaltet!</div>";
                }
                if ($loeschen[$i]==1)
                {
                    $login=mysql_result($result, $i, "login");
                    mysql_query("delete from user where login='$login'");
                    print "<br><br><div align='center'>".$login." wurde gelöscht!</div>";
                }
            }
            mysql_close();
            print "<br><br><div align='center'><a href='sql.php?funktion=1'>zurück</a></div>";
        }
    

    So schauts aus, deswegen brauch ich auch erst eine db-abfrage



  • Ich würde dir das anders empfehlen:

    login=mysqlresult(login = mysql_result(result, i,"login"); <input type='checkbox' name='loeschen[]' value='$login'>

    Und dann machst du einfach für die beiden Arrays ein foreach und löscht bzw. aktualisierst entsprechend. Deine Methode wird wohl nicht immer berechenbar arbeiten, wenn überhaupt.


Anmelden zum Antworten