eingabe kombiniert mit abfrage

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

  • #16
    hi tobi,

    danke für deine erklärungen.
    leider fehlt mir trotzdem noch irgendein verständnis-bauklotz.

    auch eine frage : die eingaben, die für den (rechnerischen) buchungsvorgang nicht nötig sind (also zb ort, datum, leistung) muß ich doch nicht übergeben - die werden einfach so in die buchungstagelle eingetragen ?
    Wenn du diese Daten in der DB haben willst, dann musst du sie irgendwie übergeben. Wenn der Kunde diese Werte im Formular ändern kann, dann müssen diese Werte ja vom Form an das verarbeitende PHP-Script gegeben werden.
    ein paar punkte :
    einfache formulare, mit denen ich datensätze in der tabelle speichern kann habe ich.
    die kunden werden die buchungen nicht eintippen, das werden wohl nur 1,2 freiwillige personen machen.
    auf dem formular zu der buchung gibt es felder, die einfach nur als buchungsdatensatz in der tabelle gespeichert werden müssen - das bekäme ich hin (ob ich dabei etwas übergebe oder nicht, keine ahnung, aber es klappt )
    das problem ist also nur das zusätzliche rechnen mit dem betrag.

    im zusammenhang mit mysql_real_escape_string() brauche ich wohl auch sprintf ? verstehe den sinn des befehls in dem zusammenhang allerdings nicht.

    wenn ich mich an deinem beispiel orientiere :

    PHP-Code:
    $sql "INSERT INTO table (row,tow) 
    VALUES('"
    .mysql_real_escape_string($_POST['wert'])."',
    '"
    .mysql_real_escape_string($_POST['wert1'])."')"
    wäre das dann so korrekt ? :

    PHP-Code:
    $sql "INSERT INTO table (vonkto, ankto, betrag) 
    VALUES('"
    .mysql_real_escape_string($_POST['$vonkto'])."',
    '"
    .mysql_real_escape_string($_POST['$ankto'])."',
    '"
    .mysql_real_escape_string($_POST['$betrag'])."')"
    und nochmals die frage :
    mysql_real_escape_string müßte doch nur für die werte relevant sein, mit denen ich rechnen will ?
    alle anderen würden ja nur wie gehabt in die db eingetragen werden ?
    das rechnen ist doch quasi nur etwas zusätzliches, was ich gleich ausführen will, zusätzlich zu dem normalen werte eintragen in die db.

    oder ist mysql_real_escape_string generell einfach wegen der sicherheit sinnvoller (las etwas wegen sql injection angriff) und du meinst eigentlich nichts anderes als den folgenden code, nur eben, daß ich dabei mysql_real_escape_string verwenden soll ? :

    PHP-Code:
    mysql_query("insert into tabelle (`buchid` ,
     `vonkto`, `ankto` , `datum` , `ort` , `leistung` ,
     `punktebetrag` , `kennwort` , `zeit`) 
    values ('', '" 
    .  $_POST['vonkto'] . "', '" .  $_POST['ankto'] . "', 
    '" 
    .  $_POST['datum'] . "', '" .  $_POST['ort'] . "',
     '" 
    .  $_POST['leistung'] . "', '" .  $_POST['punktebetrag'] . "',
     '" 
    .  $_POST['kennwort'] . "', '" time() . "')"); 
    sorry und bitte nicht über die fragen wundern, aber ich merke, daß ich mich da im moment ziemlich schwer tue und leider gar nicht viel weiterkomme. fehlt mir irgendwie gerade der aha-effekt oder ich stelle mir zuviel darunter vor...

    viele grüße, skys

    Kommentar


    • #17
      Original geschrieben von skys
      hallo reallife,

      vielen dank für deine mühe und die zip-datei.
      ich nummeriere die fragen schon mal durch ;-)
      dir ein schönes wochenende.
      Moin,

      also ich bin wieder da, ich werde den Kram später mal kommentieren und dann erneut zur Verfügung stellen. Hast Du es Dir denn zwischenzeitlich schon mal angesehen bzw. Dir schon mal ein paar Fragen notiert?

      greatz
      rl

      Kommentar


      • #18
        hallo reallife,

        habe dich gerade entdeckt, dabei ist noch nicht mal montag
        war inzwischen aber auch (mit jahlives hilfe) etwas fleißig
        im moment aber an diversen punkten feststecke g

        zu deinem zip, ich muß gestehen, ich war etwas *huch* daß es so viele dateien sind.
        zend ist mir ein begriff - soweit ich weiß, müßte ich zend aber auf dem webspace dann erst installieren, um es nutzen zu können ?
        sorry, aber bis jetzt habe ich mich noch nicht getraut es hochzuladen, wollte dich erst nochmal kurz 'hören'.
        von daher also erstmal folgende frage :
        a) welche dateien haben (nur?) mit zend zu tun, daß das zend-script funktioniert - falls man das so sagen kann ?
        ist der ganze Json-ordner mit den dateien decoder.php, encoder.php und exception.php für die zendfunktion verantwortlich ?
        b) mit dem inhalt der todo.txt konnte ich nicht viel anfangen : * Unit tests
        was bedeutet das ?
        c) js kann ich leider auch nicht.
        wofür ist die datei autoupdater.js und die autoupdate.php ?
        d) wofür ist die prototype.js ?
        hängt die evtl nur mit dem/den browsern zusammen ?
        e) noch fragen zum code hätte, aber mal noch warte

        du siehst, keine ahnung aber viele fragen... *poinlich*
        bin also gespannt, was du noch zu dem zip sagen kannst.

        viele grüße, skys

        Kommentar


        • #19
          Moin,

          also Du brauchst nichts zusätzlich installieren. Zend_Json ist lediglich ein Auszug aus dem Zend Framework.

          zu a.) Alle Dateien, außer jetzt die TODO.txt im Zend/Json Verzeichnis können auf deinen Webspace hochgeladen werden.

          zu b.) Die Datei kannst du getrost löschen, ist unwichtig.

          zu c.) Die "autoupdater.js" ist ein JavaScript, welches auf die Benutzereingaben im Eingabefeld "Kontonummer" horcht. Jede Änderung in dem Eingabefeld löst einen Ajax-Request aus, dieser Request wird an die "autoupdater.php" gesendet. Innerhalb dieser Datei werden die Kontoinhaber gemäß der Eingabe des Benutzers gefiltert und zurückgegeben. Da das ganze auf seitens JavaScript wieder interpretiert werden muss, müssen die Daten in einem gewissen Format übergeben werden, das JSON-Format.

          zu d.) Prototype ist ein JavaScript Framework, wenn du mehr über das Framework lesen willst, dann besuch mal deren Homepage. Innerhalb der "autoupdater.js" wird auf das Prototype-Framework zugegriffen.

          Ich hoffe, ich habe dir ein wenig weiter helfen können.

          greatz,
          rl

          Kommentar


          • #20
            hallo reallife,

            entschuldige, daß ich mich länger nicht gemeldet habe.
            ich muß gestehen, es dauerte etwas, bis ich die dateien überhaupt hochlud, da ich mich idr ziemlich scheue so viel fremden code, von dem ich keine ahnung habe, hochzuladen.
            im endeffekt habe ich es dann doch gemacht, aber es hat zum einen nicht funktioniert und zum anderen blicke ich im code leider immer noch nicht durch, so daß auch die dann nötigen anpassungen vermutlich ziemlich stressig wären.
            muß das zumindest mal eine weile etwas auf eis legen, weil ich im moment keinen nerv dafür habe und zwar meine weniger schöne notlösung hätte, aber zb immer noch keine lösung für das buchungsproblem ua habe, was ich aber bräuchte, daß es wenigstens mal funktioniert.
            es geht einfach verdammt viel zeit auf dieses ewige hin und her drauf.
            tut mir leid, aber trotzdem dir nochmals herzlichen dank. kann gut sein, daß ich in ein paar wochen hier nochmal anknüpfe.

            jetzt muß ich erst nochmal versuchen wenigstens bei den anderen (kleineren, wie ich dachte) code-baustellen endlich mal noch fertig zu werden. das geht leider auch fast null voran

            viele grüße, skys

            Kommentar


            • #21
              um wieder kraft für das buchungsproblem zu tanken, erstmal etwas leichteres versuche :

              es soll ein formular werden, mit dessen hilfe man
              - zum einen einen datensatz in tabelle A löschen kann, und
              - zum zweiten in eine tabelle B eingetragen wird, welcher datensatz, wann und aus welchem grund gelöscht wurde.

              in tabelle A ist also ist anzid der primärschlüssel
              in tabelle B ist xid der primärschlüssel, plus zb die felder datum und grund.

              $wegid soll das eingabefeld sein, in das man die zu löschende id (= anzid) einträgt.

              ist folgendes nun richtig ? :

              PHP-Code:
              $eintrag "insert into tabelleB (`xid` , `wegid`, `grund`, `name`, `zeit`) 
              values ('', '" 
              .  $_POST['wegid'] . "', '" .  $_POST['grund'] . "',
               '" 
              .  $_POST['name'] . "', '" time() . "')"// werte einfügen

              $sollweg "DELETE FROM tabelleA WHERE anzid = '$wegid'";

              $ausfuehren mysql_query($eintrag$sollweg); 
              da ein neuer datensatz in tabelleA immer auch eine neue und eindeutig anzid bekommt, dürfte es sich ja auch nie überschneiden.

              hoffe, daß es stimmt *gespannt bin*

              viele grüße, skys

              edit: hm, funktioniert nicht
              habs riskiert, aber es löscht nicht aus tabelleA

              You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

              keine ahnung, was das soll - in eine tabelle eintragen geht.

              wie mache ich in einer abfrage den unterschied der zugehörigkeit zu verschiedenen tabellen der 2 felder klar ?

              $sollweg = "DELETE FROM atesta WHERE anzid = $wegid"; klappt nicht, denke es liegt an dieser zeile.
              Zuletzt geändert von skys; 20.02.2008, 08:51.

              Kommentar


              • #22
                mysql_query führt nur eine Query zur Zeit aus, du musst also beide Anfragen einzeln absetzen.
                In der Delete-Query musst du statt $wegid auch $_POST['wegid'] verwenden!
                Informiere dich über SQL-Injektions.

                Kommentar


                • #23
                  Original geschrieben von skys
                  PHP-Code:
                  $eintrag "insert into tabelleB (`xid` , `wegid`, `grund`, `name`, `zeit`) 
                  values ('', '" 
                  .  $_POST['wegid'] . "', '" .  $_POST['grund'] . "',
                   '" 
                  .  $_POST['name'] . "', '" time() . "')"// werte einfügen

                  $sollweg "DELETE FROM tabelleA WHERE anzid = '$wegid'";

                  $ausfuehren mysql_query($eintrag$sollweg); 
                  mysql_query erwartet als ersten Parameter die Query, die ausgeführt werden soll und als zweiten, optionalen Parameter die Verbindungskennung.

                  Kleine Anregung: Wenn Du schon ein Eingabefeld für die zu löschende ID in deinem Formular hast, dann solltest Du vor dem Löschen auch prüfen, ob der Datensatz mit der angegeben ID existiert. Ich vermute, dass dein ID ein auto_increment Wert in der DB ist, demnach solltest Du auch prüfen, ob es sich bei der Eingabe um eine Zahl handelt.
                  PHP-Code:
                  if( preg_match("~^\\d+$~"$wegid) )
                  {
                    [...]

                  Außerdem verwendest Du zum einen $_POST['wegid'] und dann mal wieder $wegid. Sofern du register_globals nicht an hast - empfehle ich übrigens dringend auszuschalten - solltest Du die Variablen, die per POST od. GET übermittelt werden, vor der Verwendung in deinem PHP Skript zu validieren und ggf. in einer Variablen zwischen zu speichern, wie z.B. $wegid erhält nach der Validierung den Wert von $_POST['wegid'].
                  Zuletzt geändert von reallife; 20.02.2008, 09:42.

                  Kommentar


                  • #24
                    @ php-desaster

                    die zwei einzeln gesetzt hatte ich sicherheitshalber auch schon.

                    $ausfuehreneintrag = mysql_query($eintrag);
                    $ausfuehrensollweg = mysql_query($sollweg);

                    und nun wollte ich schon heureka über dein $_POST['wegid'] schreien - aber leider erhielt ich damit wieder eine weiße seite.

                    dh so kann ich die seite aufrufen und in die tabelle eintragen (nicht löschen)
                    $sollweg = "DELETE FROM atesta WHERE anzid = $wegid";

                    und ändere ich nur dies, bekomme ich wieder nur eine weiße seite :
                    $sollweg = "DELETE FROM atesta WHERE anzid = $_POST['wegid']";

                    über sql-injection hatte ich schon ein paarmal versucht, das zu kapieren, aber es ist noch zu hoch für mich. ich weiß nur, daß unsicher gemachter code die möglichkeit bietet, weiteren code einzuschleusen.

                    @ reallife

                    und als zweiten, optionalen Parameter die Verbindungskennung
                    sorry, aber verstehe nicht, was damit gemeint ist, auch nicht im zusammenhang zu meinem code.

                    die id ist auto_increment, ja.
                    die zahlenprüfung baue ich gerne ein, vielen dank.
                    im moment lasse ich sie aber mal noch weg, weil ich eh nur eine weiße seite habe und keine ahnung habe, woran es nun wieder liegt.

                    200 zeilen code ist zu viel um hier reinzukopieren, oder ? weiß im moment aber auch nicht, welche zeilen euch helfen könnten.
                    ich probiers mal :

                    PHP-Code:
                    codemasse mal gelöscht 
                    sorry, aber weiß im moment nicht, an welcher stelle ich suchen soll.
                    Zuletzt geändert von skys; 20.02.2008, 22:23.

                    Kommentar


                    • #25
                      Wo ist dein mysql_error hin? Das muss natürlich bleiben.
                      Von den 200 Zeilen kennen wir die Interessanten ja bereits.
                      Kommentiere deine Weiterleitung mal aus und gib stattdessen etwas zu Testzwecken aus.
                      Funktioniert die Anzeige des Formulars überhaupt?
                      Hast du mal ein wenig Debugging betrieben, wie ich dir das Vorgeschlagen habe?

                      Kommentar


                      • #26
                        Ich hoffe Du nimmst Dir auch ab und zu mal das Manual zur Hand und schaust Dir die Parameter und dessen mögliche Typen die die Funktionen entgegen nehmen können mal an.

                        Manual: mysql_query

                        Du erhälst eine weiße Seite? Dann bau doch einfach mal Debug-Ausgaben ein. Überprüf die Rückgabewerte von mysql_query, bau hinter den mysql_query-Aufrufen ein or die(__LINE__ .':
                        '. mysql_error()); ein, hier ein Beispiel.

                        PHP-Code:
                        $intResult mysql_query($strSql) or die(__LINE__ .': 
                        '
                        mysql_error()); 
                        __LINE__ sagt dir die Zeile in der die Ausgabe stattgefunden hat und somit welche Query einen Fehler produziert hat.

                        Kommentar


                        • #27
                          habe nun diese zeilen geändert :

                          $ausfuehreneintrag = mysql_query($eintrag)or die(__LINE__ .':
                          '. mysql_error());

                          $ausfuehrensollweg = mysql_query($sollweg)or die(__LINE__ .':
                          '. mysql_error());

                          aber ich erhalte immer nur eine weiße seite - auch mit einem anderen browser.

                          kurz zu dem php-manual : natürlich sehe ich dort immer mal wieder etwas nach, aber ich verstehe sehr vieles ganz einfach nicht (oder hinterfrage zuviel), jedenfalls ist es mir leider nicht immer so eine große hilfe wie ich das ganz an meinem php-anfang gehofft hatte.

                          auskommentieren um den fehler irgendwo zu lokalisieren werde ich wohl als nächstes versuchen.
                          die formulare werden alle gut angezeigt und funktionieren auch, solange es nur um das eintragen in eine tabelle geht. hm...

                          danke euch erst mal - zwar stecke ich wieder etwas fest, aber glaube, daß ich trotzdem ein stückchen weiterkam *hoffnungsschimmer*

                          jetzt leider erstmal schluß machen muß. euch noch einen schönen tag und viele grüße, skys

                          Kommentar


                          • #28
                            hallo,

                            ziel : eine seite nur mit einem eingabefeld und dieser wert ist die id des datensatzes, der in einer anderen tabelle gelöscht werden soll.

                            werte eintragen in eine tabelle klappt prima, löschen nicht.

                            (eine andere lösung für ein formular um datensätze zu löschen fiel mir bis jetzt auch noch nicht ein - hatte gedacht, es wäre einfacher als daten ändern)

                            derzeitiger code :

                            PHP-Code:
                            <?php
                            error_reporting
                            E_ALL );
                            include(
                            "incl.php");

                            if (
                            $_POST['hiddenstring'] != '')
                            // wenn die post-variable nicht leer ist

                            $eintrag "insert into tabx (`xid` , `wegid` , `zeit`) 
                            values ('', '" 
                            .  $_POST['wegid'] . "', '" time() . "')"// werte einfügen

                            $sollweg "DELETE FROM taba WHERE anzid = $_POST['wegid']";

                            $ausfuehreneintrag mysql_query($eintrag)or die(__LINE__ .':
                            '
                            mysql_error());

                            $ausfuehrensollweg mysql_query($sollweg)or die(__LINE__ .':
                            '
                            mysql_error());

                                    
                            mysql_close($connect);  // datenbank schliessen
                                    
                            header("Location: loeschen.php"); // zur seite umleiten
                            } else
                            // die post-variable ist leer - also formular ausgeben !
                            ?>

                            <body bgcolor=#BFC1D0>
                            <br><br>
                            <form method="post" name="bla" action="">
                            <input type="hidden" name="hiddenstring" value="on" />

                              <table width="100%" border="0" cellpadding="0" cellspacing="4">
                                <tr>
                                  <td align="center">ID:
                            <input name="wegid" type="text" size="3" maxlength="3">
                                  </td>
                                </tr>
                              </table>
                            <p style="margin-top: 10; margin-bottom: 10">
                            <br>

                            <div align="center"><input type="submit" 
                            value="Absenden" name="Absenden"></div>

                            </form>
                            </body>

                            <?php
                            // ende von else

                            @mysql_close($connect);
                            ?>
                            ergebnis : weiße seite, keine einzige fehlermeldung.
                            erkennt ihr irgendeinen fehler ?

                            viele grüße, skys

                            Kommentar


                            • #29
                              hm... *grmlknurrrrrrrr*

                              es klappt nur, wenn ich in der php-datei die direkte id eingebe, also zb
                              $sollweg = "DELETE FROM atesta WHERE anzid = '4'";

                              aber sowie ich ein formularfeld habe und das benutzen will, geht es nicht.
                              kann es sein, daß man nicht gleichzeitig eine in ein feld eingetragene zahl einmal in tabelle A als zahl eintragen und dann auch noch in tabelle B als ganzen Datensatz löschen kann ?

                              viele grüße, skys

                              Kommentar

                              Lädt...
                              X