Falscher Wert aus Abfrage

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

  • Falscher Wert aus Abfrage

    Hallo,

    über 2 Abfragen hole ich mir aus verschiedenen Tabellen die ID's. Diese möchte ich dann in eine neue Tabelle schreiben. Dies mache ich mit folgenden Code:

    PHP-Code:
    $sqlidort "SELECT `ort_nr` FROM `tbl_ort` WHERE  `ort` = '".$_POST['user1']."'";
    $sqlidzuordnung "Select `zuordnung_nr` FROM `tbl_zuordnung` WHERE  `zuordnung_beschreibung` = '".$_POST['zuordnung']."'";


    $erg mysql_db_query("db26",$sqlidort,$con);
    $erg2 mysql_db_query("db26",$sqlidzuordnung,$con);

    while (
    $id mysql_fetch_array($erg))
    {
        while (
    $id2 mysql_fetch_array($erg2))
            {
                
    $id2 $id2['0'];
                
    $result2 mysql_query($erg2);
                
    $id $id['0'];
                
    $result mysql_query($erg);
    /*echo mysql_error();*/
    $_POST['strasse'] = mysql_real_escape_string($_POST['strasse']); 


    $sql "INSERT INTO `tbl_objekt` (`strasse`,`ort_nr`,`zuordnung_nr`)
                        VALUES ('"
    .$_POST['strasse']."', '".$id."', '".$id2."')";
            }

    Das funktioniert auch fast. Nur bei der Variabel $id2 passiert ein Fehler. In die Datenbank wird da der Wert von $id eingetragen.

    Woran kann das liegen?

    Danke

    Edit:

    Fehler selbst gefunden. Eine Variable war nicht richtig geschrieben. Dumm dumm.

    Zuletzt geändert von mitch26; 04.12.2008, 14:35.

  • #2
    Du hast noch ein ganz anderes Problem! Nach $erg=mysql_db_query() ist $erg bereits eine Result-Resource, mysql_query($erg) funktioniert also nicht.
    Dein ganzer Code ist Unsinn.

    Kommentar


    • #3
      Guten Morgen onemorenerd,

      danke für deinen Hinweis.

      Was bewirkt denn diese Result-Resource?

      Denn der Code funktioniert bei mir so wie er soll.

      gruß mitch

      Kommentar


      • #4
        Mit error_reporting(E_ALL) wirst du sehen, dass der Code voller Fehler ist. mysql_query() erwartet einen String, keine Resource.
        Warum machst du eigentlich diese mysql_query(), verwendest deren Ergebnisse aber gar nicht?

        Setze mal bitte echo $sql; in die letzte Zeile der inneren Schleife, also nach dem $sql = "Insert ...";
        Fällt dir was auf? Deine while-Schleifen sind total sinnlos! Dein ganzer Code ist absoluter Käse!

        Kommentar


        • #5
          Also mit error_reporting(E_All) hatte ich keine Fehler. Die Zeile hatte ich schon im Code.

          Mit deinem echo $sql; kommt folgende Fehlermeldung:

          Notice: Undefined variable: sql in /homepages/23/d259660641/htdocs/eingetragen.php on line 33
          Klingt ja nicht so gut wenn das alles sinnlos ist.

          Vielleicht kannst du mir ja sagen wie ich das besser umsetzen kann.

          Ziel soll es sein aus 2 Abfragen die Werte zu übernehmen und diese dann in einer neuen Abfrage in die Datenbank zu schreiben.

          Danke

          Edit: achso das kommt bei Echo $sql; raus

          INSERT INTO `tbl_objekt` (`strasse`,`ort_nr`,`zuordnung_nr`) VALUES ('Bremerstraße 45', '5', '1')
          Zuletzt geändert von mitch26; 05.12.2008, 10:19.

          Kommentar


          • #6
            Wenn du das echo $sql; an der richtigen Stelle hattest, kann diese Fehlermeldung gar nicht entstehen. Ich nehme aber an, du hattest das echo in der äußeren Schleife. Das heißt, die innere wird überhaupt nicht betreten, was nur sein kann, wenn $erg2 keine Ergebnisse enthält.

            Jetzt wirf mal den ganzen Code weg; wir fangen nochmal ganz von vorn an.

            Was wollen wir? Wir wollen aus einer Tabelle A einen Wert x ziehen und aus Tabelle B einen Wert y.
            Dafür ist also jeweils ein mysql_query() nötig, aber keine Schleife, denn wir wollen jeweils nur einen Wert.
            PHP-Code:
            $sql_select_x_from_a 'SELECT ...';
            $result mysql_query($sql_select_x_from_a);
            $x mysql_result($result00);

            $sql_select_y_from_b 'SELECT ...';
            $result mysql_query($sql_select_y_from_b);
            $y mysql_result($result00); 
            Die Werte in x und y sollen jetzt wieder in der DB gespeichert werden. Also wieder ein mysql_query().
            PHP-Code:
            $sql_insert_x_and_y 'INSERT ...';
            mysql_query($sql_insert_x_and_y); 
            Jetzt setzen wir das alles zusammen und ergänzen es mit dem obligatorischen or die(mysql_query()).
            PHP-Code:
            $sql_select_x_from_a 'SELECT ...';
            $result mysql_query($sql_select_x_from_a) or die(mysql_query());
            $x mysql_result($result00);

            $sql_select_y_from_b 'SELECT ...';
            $result mysql_query($sql_select_y_from_b) or die(mysql_query());
            $y mysql_result($result00);

            $sql_insert_x_and_y 'INSERT ...';
            mysql_query($sql_insert_x_and_y) or die(mysql_query()); 
            Nun müssen nur noch die $sql_*-Variablen richtiig erzeugt werden. Das überlasse ich dir.
            Zuletzt geändert von onemorenerd; 05.12.2008, 10:22.

            Kommentar


            • #7
              Danke onemorenerd,

              habe alles geändert und die Abfragen richtig erstellt. Funktioniert super und sieht auch soviel aufgeräumter aus der Code.

              Wie ist es denn mit der Sicherheit bei diesem Code zwecks "Injection" aus?

              Kommentar


              • #8
                Der Code den ich zuletzt gepostet habe, der ist sicher. Aber du setzt ja Daten aus $_POST ein. Die mußt du entschärfen mit mysql_real_escape_string() und intval().

                Es fehlt dann aber auch noch eine Fehlerbehandlung. Was passiert zum Beispiel, wenn es gar kein x in Tabelle A gibt? Oder kein y in Tabelle B?
                Die Frage ob oder ob nicht, kannst du mit mysql_num_rows() beantworten. Was du iim Fehlerfall machst, mußt du selbst entscheiden.


                ... und dann ist der Code u.U. schon nicht mehr so übersichtlich.

                Kommentar


                • #9
                  Ok das mit mysql_real_escape_string() und intval() schaue ich mir mal an.

                  Und das die Werte für X und Y aus eine Dropdownfeld kommen sind immer Werte vorhanden.

                  Danke nochmals für deine Hilfe.

                  Kommentar


                  • #10
                    Mööp, alsche Antwort!

                    Du glaubst, der Browser kann dir nur die Daten zurückschicken, die du ihm vorher ins Select reingeschrieben hast. Dem ist aber nicht so. Ich kann mir ein ganz anderes Formular selber bauen und als action deine URL angeben. Oder ich manipuliere das Select in deiner Form mit Firebug ...

                    Merke: Vertraue niemals Daten, die vom User kommen. Niemals! Auch nicht, wenn du sie ihm vorher gegeben hast. Der User könnte sie verändert haben.

                    Kommentar


                    • #11
                      Ok auch wieder wahr.

                      Habe wieder mal viel gelernt.

                      Danke

                      Kommentar

                      Lädt...
                      X