php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Falscher Wert aus Abfrage


 
mitch26
04-12-2008, 15:31 
 
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:

$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.

 
onemorenerd
04-12-2008, 18:10 
 
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. :dontknow:

 
mitch26
05-12-2008, 10:23 
 
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

 
onemorenerd
05-12-2008, 10:47 
 
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!

 
mitch26
05-12-2008, 11:00 
 
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')

 
onemorenerd
05-12-2008, 11:20 
 
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.
$sql_select_x_from_a = 'SELECT ...';
$result = mysql_query($sql_select_x_from_a);
$x = mysql_result($result, 0, 0);

$sql_select_y_from_b = 'SELECT ...';
$result = mysql_query($sql_select_y_from_b);
$y = mysql_result($result, 0, 0);
Die Werte in x und y sollen jetzt wieder in der DB gespeichert werden. Also wieder ein mysql_query().
$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()).
$sql_select_x_from_a = 'SELECT ...';
$result = mysql_query($sql_select_x_from_a) or die(mysql_query());
$x = mysql_result($result, 0, 0);

$sql_select_y_from_b = 'SELECT ...';
$result = mysql_query($sql_select_y_from_b) or die(mysql_query());
$y = mysql_result($result, 0, 0);

$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.

 
mitch26
05-12-2008, 11:32 
 
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?

 
onemorenerd
05-12-2008, 11:49 
 
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. ;)

 
mitch26
05-12-2008, 11:56 
 
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.

 
onemorenerd
05-12-2008, 12:00 
 
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.

 
mitch26
05-12-2008, 12:05 
 
Ok auch wieder wahr.

Habe wieder mal viel gelernt.

Danke


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:27 Uhr.