Announcement

Collapse
No announcement yet.

Feldwert onclick von 0 auf 1 ändern und als Variable wiedergeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Feldwert onclick von 0 auf 1 ändern und als Variable wiedergeben

    Hallo Entwicklergemeinde,
    ich bin leider noch extrem frisch was den Umgang mit php und sql angeht, daher bitte ich um ein wenig Nachsicht.

    Zur Sache -
    Problemstellung:
    Es handelt sich lediglich um die Umstellung von dem wert 0(null) auf 1. Ich weiß jedoch nicht wie dies "onclick"(oder anderweitig) der Datenbank übergeben werden kann.
    Ebenfalls muss der Feldwert in den Dateien als Variable wiedergegeben werden können (also 0 oder 1), bzw. Standart ist 0.
    Mit der Erstellung eines "Subjects"(siehe "function MachMichEins()"), soll also 0 gültig sein.

    momentaner Lösungsversuch:
    Ich möchte den Wert des Feldeintrags "get" mittels
    HTML Code:
    <img src="bild" onclick="if(confirm('wirklich?')) window.open('{$object->link.done}','_parent');";>
    ändern.

    PHP Code:
    function MachMichEins(){
         
    $m mosSubjects($this->_data);
         
    $m->id_subject $this->subject;
         
    $m->get $get;
         
    $one "select one from #__subjects where id_subject=$r->id";
         
    $q "select id, id_subject, one, from #__subjects where id_subject=$r->id";

         
    $this->_data->setQuery($q);
         
    $rs $this->_data->loadObjectList();
         for(
    $i=0;$i<count($rs);$i++){
             
    $r $rs[$i];
             
    $q "update #__subjects set get='1'";
             
    $this->_data->setQuery($q);
             
    $this->_data->query();
             
    $sql "select get from #__subjects where id=$r->id";
             
    $this->_data->setQuery($sql);
         }

    ->Auf diesem Lösungsweg sind ähnliche Operationen vorprogrammiert
    (Vielleicht gibt es ja einen einfacheren oder schöneren Lösungsvorschlag, mir scheint dieser recht kompliziert - es wird um Lösungsansätze jeder Art gebeten)
    Schaute vorhin mal nach, dachte da an etwas mit: mysql_db_query() / mysql_result()

    Mir ist klar das diese "Funktion"(wenn man das so nennen kann)
    fehlerbelastet, bzw. nicht vollständig ist. Es wurde eine Variable var $get = null; für die entsprechende Tabelle festgelegt - Aber so wie ich will, geht´s wohl einfach nicht. Bin auf dem gebiet ein Laihe und brauche hierbei dringend Hilfe.
    Nochmal das Ziel: Wert von null auf eins mittels onclick(oder anders) eines Datenbank-Feldwertes ändern und den Wert als Variable wiedergeben(eigentlich egal mit welchem Lösungsansatz...)

    Wäre schön hier einige Vorschläge zu erhalten - Am liebsten in Codeform, göttlich wäre eine Erläuterung dazu.


    MfG
    noobgod
    Zuletzt editiert von noobieman; 14.02.2011, 16:54.

  • #2
    Wenn du wirklich immer nur zwischen 0 und 1 wechseln willst, dann am Einfachsten:
    Code:
    $wert ^= 1;
    Wenn Du den aktuellen Wert an deine Funktion übergibst und dort verarbeitest, kannst Du sowohl deine DB anpassen als auch deinem Skript den neuen Wert für die Variable zurück geben.

    Comment


    • #3
      Boah, unschlagbar flott. Danke.
      Der Wert soll nicht mal mehr auf null verändert werden wenn dieser auf 1 gestellt wurde-> Vielleicht vereinfacht das noch weiter.
      Hätte ich noch oben in den Post gesetzt - warst aber zu schnell.

      Entschuldige, meinst du so
      PHP Code:
               $q "update #__subjects set get ^='1'"
      besten gruß
      noob
      Zuletzt editiert von noobieman; 14.02.2011, 16:51.

      Comment


      • #4
        Ja, dann probier's doch mal einfach mit:

        Code:
        $wert |= 1;
        Der macht aus 0 eine 1 und 1 bleibt eins.

        und dann hätte ich noch einen Link für dich: boolesche Operatoren
        ich vermute, das wird dir weiter helfen

        Comment


        • #5
          Schonmal vielen Dank. Hab jetzt ein bisschen was zu tun.

          Comment


          • #6
            Das was ich scheine zu benötigen fand ich auf dem empfohlenen Link(nomma schonma danke), trifft es jedoch nicht so 100%ig. Puh, mehr als ich dachte... Tschuldigung, hab leider Verständnisprobleme.

            Was noch stört:
            Es soll vermieden werden die Verbindungsdaten zu der Datenbank in die Datei einzutragen über welche die Änderung statt findet. Zudem existiert bereits eine Form in der betroffenen Datei, hat aber eigentlich nichts mit der folgenden Form gemein (kommts da nicht trotzdem zu Problemen?).
            Die "Schaltung" soll in der Browseransicht ein "Subject" verstecken. (ohne "mysql_db_connect" wenn irgend möglich, d.h. es besteht bereits ein connect)
            Gibt es statt der Folgenden noch eine andere Lösung? Eine ohne Form?
            Und, funktioniert das überhaupt so bzw. wo sind Fehler? In den Codes befinden sich noch weitere Fragen und Erläuterungen...

            Konkretes B.s. ([Quelle] http://www.teialehrbuch.de/Kostenlos...formulars.html):

            aenderungsformular.php (1. Teil)
            HTML Code:
            <?php
            $connect = mysql_db_connect("localhost", "db", "pw");
            $forchange = mysql_query("SELECT * FROM subjects WHERE id = " . $HTTP_GET_VARS["id"]" AND get = " . $HTTP_GET_VARS["zeroone"]" AND id1 = " . $HTTP_GET_VARS["id"]", $connect);
            $forchange = mysql_query("SELECT * FROM subjects WHERE id = " . $HTTP_GET_VARS["id"]" AND got = " . $HTTP_GET_VARS["zeroone"]" AND id1 = " . $HTTP_GET_VARS["id"]", $connect);
            $forchange = mysql_query("SELECT * FROM subjects WHERE id = " . $HTTP_GET_VARS["id"]" AND get = " . $HTTP_GET_VARS["zeroone"]" AND id2 = " . $HTTP_GET_VARS["id"]", $connect);
            $forchange = mysql_query("SELECT * FROM subjects WHERE id = " . $HTTP_GET_VARS["id"]" AND got = " . $HTTP_GET_VARS["zeroone"]" AND id2 = " . $HTTP_GET_VARS["id"]", $connect);
            $check = mysql_query("SELECT * FROM subjects WHERE id = " . $HTTP_GET_VARS["id"]" AND got = "1" AND get = "1", $connect);
            $line = mysql_fetch_array($forchange);
            $del_line = mysql_fetch_array($check);
            ?>
            
            <form name="changing" method="post" action="aendern.php">
            <input type="hidden" name="id" value="<?php echo $line["id"] ?>">
            Invisible: <input type="reset" title="VERSTECKEN" name="clicktochange" value="<?php echo $line["clicktochange"] ?>">
            Alternativ_a: <input type="button" title="VERSTECKEN" name="clicktochange" value="<?php echo $line["clicktochange"] ?>">
            Alternativ_b: <img src="bild" onClick="[b]Was muss in diesem fall hierhin???[/b]">
            <input type="submit" name="change" value="ändern">
            </form>
            Alternativ_c (glaube aber das es mit "href" nicht funktioniert bzw. so auf keinen Fall richtig ist - Rat bitte):
             <?php
              echo "<table><tr><td>Guckst du:<br />";
              echo "<a href='aenderungsformular.php?id=" . $line["id"] . "'>";
              echo $line["id"] . "</a>";
              echo "</td></tr></table>";
             ?>
            
            <?php
            mysql_close($connect);
            ?>
            aendern.php
            PHP Code:
            <?php
            $connect 
            mysql_db_connect("localhost""db""pw");
             if (
            id1=true && get=0){
              
            mysql_query("UPDATE subjects ""SET get |= '1', "." WHERE id = ".$HTTP_POST_VARS["id"] AND id1 ".$HTTP_POST_VARS["id"]$connect); //--Feldwert soll onclick/submit/button(oder sonst wie - [b]Vorschlag bitte[/b]) in Abhängigkeit diverser Kriterien geändert werden
             }
             if (id1=true && got=0){
              mysql_query("
            UPDATE subjects ". "SET got |= '1'"." WHERE id ".$HTTP_POST_VARS["id"] AND id1 = ".$HTTP_POST_VARS["id"], $connect); //--Feldwert ...(siehe Zeile drüber)
             
            }
             if (
            id2=true && get=0){
              
            mysql_query("UPDATE subjects ""SET get |= '1', "." WHERE id = ".$HTTP_POST_VARS["id"] AND id2 ".$HTTP_POST_VARS["id"]$connect); //--Feldwert ...(siehe 2Zeilen drüber)
             }
             if (id2=true && got=0){
              mysql_query("
            UPDATE subjects ". "SET got |= '1'"." WHERE id ".$HTTP_POST_VARS["id"] AND id2 = ".$HTTP_POST_VARS["id"], $connect); //--Feldwert ...(siehe 3Zeilen drüber)
             
            }
             if (
            $del_line=true){
              
            mysql_query("DELETE subjects WHERE id = ".$HTTP_POST_VARS["id"]" AND got = '1' AND got = '1', $connect); //--Zeile soll automatisch gelöscht werden wenn got und get 1
             }
              mysql_close(
            $connect);
            ?>
            aenderungsformular.php (Wegen Übersichtlichkeit, hier der 2. Teil)
            PHP Code:
            <?php
            $connect 
            mysql_db_connect("localhost""db""pw");
            $print mysql_query("SELECT * FROM subjects WHERE id = " $HTTP_GET_VARS["id"]", $connect); //--Feld in der Tabelle lokalisieren
            $info = mysql_fetch_array($print); //--einzelnen Feldwert auslesen
             if (id1=true && got=0){
              echo 
            $info; //--einzelnen Feldwert ausgeben
             }
             if (id1=true && got=0){ //--wie lässt sich in diesem Fall der einzelne Feldwert "
            id1" als Variable wiedergeben?
              echo 
            $info;
             }
             if (id2=true && get=0){
              echo 
            $info;
             }
             if (id2=true && get=0){
              echo 
            $info;
             }
             if (id2=true || id1=true) && (get=1 || got=1)){
               if (
            $i_am=id1){
               }
               if (
            $i_am=id2){
               }
             }
            ?>
            Da ich leider nur bedingt weiss was ich hier mache bitte ich nochmals eingehend um Hilfe.
            Nach wie vor - Ziel: Feldwert 0 auf 1, wenn 1 dann nicht mehr 0.
            Beschreibung:Es soll ein "Subject" in Abhängigkeit von id1 und id2 "versteckt"(mittels "if" in der betroffenen Datei) werden wenn get=1 oder got=1, bzw. gelöscht werden wenn get und got 1 ist.

            Besten Gruß
            nooobie
            Zuletzt editiert von noobieman; 16.02.2011, 21:56.

            Comment


            • #7
              Ich verstehe das Problen nicht, und mir ist der Aufwand unklar.

              Jedoch scheint diese Aussage
              Es soll vermieden werden die Verbindungsdaten zu der Datenbank in die Datei einzutragen über welche die Änderung statt findet.
              zumindestens dahingehend zu klären sein, dass das was auf dem Server mit der PHP-Datei passiert (das interpretieren des PHP-Codes) nicht an den Client gesandt wird. Insofern stehen auch die Verbindungsdaten dann nicht dem Client zur Verfügung. Du kannst natürlich die Daten in eine extra PHP-Datei auslagern und includen.
              Christian

              Comment


              • #8
                Ich verstehe das Problen nicht, und mir ist der Aufwand unklar.
                Da ich nicht sonderlich versiert im Umgang mit php und sql bin, weiß ich nicht wie ich das "Problem" am einfachsten oder hübschesten lösen kann. Ich bin sozusagen Analphabet und steh momentan ein bisschen auf dem Schlauch...
                Zuviele Bäume im Wald.

                (...) Insofern stehen auch die Verbindungsdaten dann nicht dem Client zur Verfügung. Du kannst natürlich die Daten in eine extra PHP-Datei auslagern und includen.
                Danke der Info, bin ich beruhigt.

                Comment


                • #9
                  Hallo,
                  Originally posted by noobieman View Post
                  ...Da ich leider nur bedingt weiss was ich hier mache ...
                  Ja das sehe ich auch so . Deshalb würde ich vorschlagen ein wenig strukturierter Vorzugehen. Wenn du hier alles postest was du irgendwie irgendwo zusammengetragen hast, dann bringt das überhaupt nichts! Ich weiß überhaupt nicht wo ich anfangen soll zu beschreiben was alles falsch ist .
                  Also zuerstmal EVA-Prinzip beachten. Dann in kleinen Schritten vorgehen und testen. Abfrage der Daten, Ausgabe, Änderung von Daten. Bei konkreten Problemen hier nachfragen.

                  Auch solltest du mal versuchen, deine Aufgabenstellung so zu formulieren das sie auch ein aussenstehender versteht und ggfs. ein passendes Beispiel bringen.

                  Gruß Falk
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    Hallo ich nochmal,
                    Wenn du hier alles postest was du irgendwie irgendwo zusammengetragen hast, dann bringt das überhaupt nichts! Ich weiß überhaupt nicht wo ich anfangen soll zu beschreiben was alles falsch ist .
                    Ja ich weiß, ist immer n bischen mein Problem - ich hoffe diesmal wird die Sache ein bisschen übersichtlicher, tschuldigung. Weiteres Problem, ich weiß garnicht ob ich sämtliche Funktionsfragmente zusammen tragen kann, weil vorprogrammiert und meine Intuition zu wünschen übrig lässt um wirklich alles raus zu ziehen was damit zusammen hängt.

                    Also, bin ein bisschen schlauer geworden, bringt mich an der Stelle aber leider immer nicht weiter... es handelt sich bei dem obigen Beispiel um eine Funktionsweise mit smarty.

                    Folgendes:
                    Ich habe in einer angelegten Testumgebung den Ablauf rudimentär mit ausschließlich php und sql gemalt. In dem B.s. wird von "update.php"zu "change.php" verwiesen um -set doit = 1 und refresh page "update.php"- auszuführen. Das funktioniert soweit auch alles in der Testumgebung, jedoch arbeitet die extension des CMS mit smarty und da funktioniert die sache scheinbar nicht so einfach... Das folgende B.s. lässt sich so leider nicht anwenden.

                    Es existiert bereits eine"<form>" in betroffenen "tpl"-Datei. Dies bedeutet es müsse eine "<form>" in eine "<form>" geschrieben werden, sodass der reine php-sql Lösungsansatz nicht funktioniert.

                    Die einzige Möglichkeit die ich hier sehe ist "<a href="change.php" onclick="if (confirm('doit?')) //dosomthing; return false;">"

                    Beschreibung des folgenden codes:
                    Die Datei "change.php" soll den sql-Feldwert 'doit' von 0(Standart beim insert: null) zu 1 setzen, dies soll wohl vorzugsweise per button/link-Click geschehen.

                    Erste Schritte zur Lösung (Bitte keine Frage warum zuerst das update und danach erst löschen - Im weiteren Verlauf des Threats wird dies noch deutlich):
                    Dies ist ein Versuch das Problem mit php-sql zu lösen(ohne smarty). Also der Test funktioniert so weit (mit "<form>").

                    Es wird jedoch eine Lösung mit smarty(oder auch nicht, wenn man das umgehen kann) und ohne "<form>"(oder das Einbinden eines inputs in die existierende "<form>" - ich weiß jedoch nicht wie) gesucht.


                    Dies ist der Testcode falls es jemanden interessiert (3 referierende Dateien):

                    update.php
                    Code:
                    <?php
                     session_start();
                     $token = $_SESSION['tok'];
                     session_register('tok');
                     unset( $_SESSION['tok'] );
                    ?>
                    <!--<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">-->
                    
                    <html>
                     <head>
                      <?php
                       // Create a $string
                       $_SESSION['tok'] = $string;
                    
                         require_once('config.php'); // Connection
                         $select_hid = "select * from persons where id = '100' and doit='1'";
                         // Es wird eine variable $id statt der Konstanten '100' benötigt
                         // id ist auto_increment und primary key - Wie kann man eine gültige Zeilenabfrage "select * from persons where id = '$id'" ist erzeugen? Es handelt sich um die Referenz zum angemeldeten Nutzer der mit Cookies und Sessions "bombadiert" wird
                         $meg_hid = mysql_query($select_hid) or die(mysql_error());
                         $line_meg_hid = mysql_fetch_assoc($meg_hid);
                         $this_line_meg_a = mysql_num_rows($meg_hid);
                         mysql_free_result($meg_hid);
                         $werdtfgj='0'; if ($select_hid==true) $werdtfgj='1'; // Tch kann nicht mehr genau sagen warum ich die Zeile hier eingefügt habe. glaube hat erst dann funktioniert
                         mysql_close($con);
                         if ($this_line_meg_a=='1'){
                           echo "<title>Updated</title>";
                         }else{
                           echo "<title>Update this</title>";
                         }
                      ?>
                      <meta name="author" content="Dennis H.">
                    
                     </head>
                     <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
                    
                      <form id="doit" name="doit" method="post" action="change.php?str=<?php echo $string;?>">
                       <?php
                       if ($this_line_meg_a=='1'){
                        echo "It works!!!";
                       }else{
                        include('action.php');
                       }
                      ?>
                      <br />
                      <?php echo $_POST['doit']; ?>
                      <input type="hidden" name="token" id="token" value="<?php $string; ?>" />
                      </form>
                    
                     </body>
                    </html>
                    action.php
                    Code:
                    // Leichter wenn man included
                       <a href="<?php echo $line_meg_a['megLink'];?>" onclick="if(confirm('Do it?')) javascript:document.doit.submit(); return false;"; />
                        <input type="image" src="pic.png" alt="<?php echo $line_meg_a['megAlt'];?>" />
                       </a>
                    change.php
                    Code:
                    <?php
                      session_start();
                    ?>
                    <html>
                     <head>
                      <?php
                    
                      // function get page
                      require_once('config.php'); // Connection
                      $tag = substr(Page(),-16, 16) ;
                       if ($_SESSION['tok']==$tag){
                         $inv_a = "update persons set doit = '1' where id ='100'";
                         $del = "delete persons where id ='100' and doit = '1'";
                    
                         $doit_a = mysql_query($inv_a);
                         $doit_c = mysql_query($del); //Die betroffene Zeile wird nicht gelöscht - was ist falsch?
                    
                         $select_a = "SELECT * FROM persons where id = '100' AND doit='0'";
                         $meg_a = mysql_query($select_a) or die(mysql_error());
                    
                         $line_meg_a = mysql_fetch_assoc($meg_a);
                         $this_line_meg_a = mysql_num_rows($meg_a);
                    
                         mysql_free_result($meg_a);
                         mysql_close($con);
                    
                         echo '<table width="100%" height="100%"><tr valign="middle" align="center"><td valign="middle" align="center">';
                         echo '<img width="17px" height="17px" src="fahrstuhlmusikbild.gif">';
                         echo "The process will accept.<br />- Please wait a moment -";
                         echo '</td></tr></table>';
                       }else{
                         echo '<table width="100%" height="100%"><tr valign="middle" align="center"><td valign="middle" align="center">';
                         echo '<img width="17px" height="17px" src="fahrstuhlmusikbild.gif">';
                         echo '<br />';
                         echo "Please do not enter another URL - Has not worked, try again!";
                         echo '</td></tr></table>';
                       }
                      ?>
                     <meta http-equiv="refresh" content="2 URL=update.php" >
                     </head>
                     <body bgcolor="gray">
                    
                     </body>
                    </html>
                    Der Content arbeitet mit der 'tpl'-smarty-engine und ich habe keine Ahnung wo ich anfangen soll diesen Vorgang so umzubauen dass es mit dem bestehenden Content ohne Beeinträchtigung funktioniert.
                    Ebenfalls wurde ich noch immer nicht gewahr wie ein sql-selected Zeile über den primär schlüssel automatisch ausgelesen werden kann - Könnte mir das jemand erklären oder einen B.s. code posten? -Shame on me, I know.-
                    Nu gut, das war es erst einmal... Freue mich auf Feedback, vielleicht findet ja jemand einen völlig anderen Lösungsansatz.

                    Im nächsten Schritt gibt´s dann das echte Problem. Das hier ist nur ein warm up, ich hoffe es ist nicht zu viel...

                    GLÜCKWUNSCH ZUM 7JÄHRIGEN

                    Besten Gruß,
                    DH
                    Zuletzt editiert von noobieman; 26.02.2011, 02:08.

                    Comment

                    Working...
                    X