PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP, SQL: Zeile wird nicht gelöscht ...


ooAlbert
2006-08-24, 09:32:47
Ich hab etwas geschreibend as eine zeile aus einer Datenbank löscht und mir danach die gesamte datenbank ausließt und anzeigt. Komischerweise wird der datensatz nicht gelöscht und es gibt auch keine fehlermeldung...

hat da wer eine idee zu? Die SQL anweisung ist korrekt da manuell über diese anweisung löschungen funktionieren.



$sql = "DELETE
FROM t_lehrgaenge_termine
WHERE Position = $_POST[Position];";

$result = mysql_query($sql) OR die(mysql_error());

$sql = "SELECT t_lehrgaenge.lehrgang_id, lehrgang_titel, ort,
termin_id, datum1, datum2
FROM t_lehrgaenge JOIN t_lehrgaenge_termine
ON ( t_lehrgaenge.lehrgang_id = t_lehrgaenge_termine.lehrgang_id )
ORDER BY t_lehrgaenge.lehrgang_id;";


$result = mysql_query($sql) OR die(mysql_error());

if(mysql_num_rows($result)) {

while($row = mysql_fetch_assoc($result)) {

echo"<table border>";
echo"
<tr>

<td>
<input type=submit name=Bearbeiten value=".$row['Position'].">
</td>

<td>
Ja<input type=checkbox name=Löschen value=".$row['Position']."><br>
<input type=submit value=Senden>
</td>

<td>".$ID."</td>
<td>".$row['lehrgang_id'].$row['termin_id']."</td>
<td>".$row['ort']."</td>
<td>".$row['datum1']." - ".$row['datum2']."</td>

</tr>";

}
echo"</table>";
$ergebnis = mysql_num_rows($result);
} else {
echo "Es ist nichts neues in der Datenbank vorhanden<br />\n";
}
}
} echo"Anzahl: ".$ergebnis;

darph
2006-08-24, 10:37:38
$sql = "DELETE
FROM t_lehrgaenge_termine
WHERE Position = $_POST[Position];";


Funktioniert das "Variableninstringsreinschreiben" mit Arrays? Ich muß zugeben, ich weiß es nicht, würde mich aber nicht verwundern, wenn das Programm davon verwirrt wird.

$sql = 'DELETE
FROM t_lehrgaenge_termine
WHERE Position = '.$_POST["Position"].';';

Versuch das mal.

Abgesehen davon:

$_POST[Position]Kann es sein, daß du die Warnungen in der PHP.ini ausgeschaltet hast? Der sollte dir dann nämlich vorwerfen, daß Position eine Konstante ist, und er dann $Position vermutet, was es natürlich nicht gibt.



Außerdem: Post-Variablen direkt in einen SQL-String zu quetschen lädt SQL-Injections geradeheraus ein. Was passiert, wenn ich in dem Formularfeld * eintrage? ;)


$sql = sprintf('DELETE
FROM t_lehrgaenge_termine
WHERE Position = %d;',
mysql_real_escape_string($_POST["Position"]));

%d oder %s, jenachdem, was es denn sein soll. Mußt die die Bedeutung in der PHP Doku zur Funktion mysql_real_escape_string erlesen. Eventuell dann noch nacht (int) casten.



Und zu guterletzt:
input type=checkbox name=Löschen Wo sind da die Anführungszeichen?

ooAlbert
2006-08-24, 11:07:30
da werd ich mal anchsehen, weil normalerweise gibts fehlermeldungen aber bei den sql anweisungen nicht...

also normal geht das das man direkt aus einem POST was reingeben kann, es ist ja im endeffekt auch nur eine variable.

darph
2006-08-24, 11:25:11
da werd ich mal anchsehen, weil normalerweise gibts fehlermeldungen aber bei den sql anweisungen nicht...Es ist ja auch kein Fehler in der SQL-Anweisung, sondern, wenn ich Recht habe, in deiner PHP-Syntax.

also normal geht das das man direkt aus einem POST was reingeben kann, es ist ja im endeffekt auch nur eine variable.Sicher, aber es ist ein Assiziatives Array. Und wer weiß, wie der Parser diese Menge von Anführungszeichen interpretiert. Geht er von innen nach außen? Von links nach Rechts? Die Tatsache, daß bei dir sogar welche fehlen, machen die Sache nicht einfacher. ;)

ooAlbert
2006-08-24, 15:01:02
ich habd en ganzen code umstruckturiert und dann gings scheinbar hab ich irgendwo eine klammer einer If-Anweisung verschoben was vieles ausgebelndet hat ...

Das andere problem ist jetzt, es wird zwar gelöscht aber nicht das was ich gern hätte und das hängt mit der schleife zusammen:


if(mysql_num_rows($result))
{
echo"<table border>";
echo "<tr><th>Bearbeiten</th> <th>Löschen</th> <th>Position</th><th>KursNR</th> <th>Ort</th> <th>Datum</th></tr>";

while($row = mysql_fetch_assoc($result))
{
echo"
<tr>

<td>
<input type=submit value=Bearbeiten>
<input type=hidden name=Position value=".$row['Position'].">
<input type=hidden name=Status value=bearbeiten>
</td>

<td>
<input type=hidden name=Position value=".$row['Position'].">
<input type=hidden name=Status value=löschen>
<input type=submit value=Löschen>
</td>

<td>".$row['Position']."</td>
<td>".$row['lehrgang_id'].$row['termin_id']."</td>
<td>".$row['ort']."</td>
<td>".$row['datum1']." - ".$row['datum2']."</td>

</tr>";
}
echo"</table>";
$ergebnis = mysql_num_rows($result);
}
else
{
echo "Es ist nichts neues in der Datenbank vorhanden<br />\n";
}
echo"</form>";
echo"Anzahl: ".$ergebnis;


Mir geht es um $row['Position'] dieser wert wird pro durchlauf überschreiben, so daß ich zum schluß immer den aller letzen wert drin habe und es eghal ist welche zeile ich auswähle immer dieser wert drin steht.
Jetzt war meine überlöegung da irgendwie einen arry draus zu machen oder so.

Hat da wer noch ne idee dazu ?:)

darph
2006-08-24, 15:37:43
Bitte bitte schau dir nochmal an, wie man in HTML Attribute deklariert. ;(

Bist du sicher, daß Position in der Tabelle mit großen P geschrieben wird?

ooAlbert
2006-08-24, 15:41:00
in der datenbank ist die spalte so benannt also ja :) Ich hat das vorher alles mit den anführungszeichen aber dann gabs immer probleme warum auch immer also hab ich die weggelassen und es lief prima.

mit dem array hab ich probiert aber so richtig bringt es nichts.

darph
2006-08-24, 15:51:13
in der datenbank ist die spalte so benannt also ja :) Ich hat das vorher alles mit den anführungszeichen aber dann gabs immer probleme warum auch immer also hab ich die weggelassen und es lief prima.Sei mir nicht bös, aber wenn du dir so wenig Mühe gibst, ordentlichen und validen Code zu schreiben, ist es kein Wunder, wenn dir früher oder später dein Script um die Ohren fliegt. Die Menge Art von Fragen, die du stellst, bezeugt das irgendwie. ;(

ooAlbert
2006-08-24, 15:56:22
mag sein wie es ist... hier gehts weniger um syntax als um funktionalität. in dem falle gehts mal nur um diese schleife wie man da eine bestimmte zeile anspringen kann, bzw. sich die zeilen so ablegt das man sie danach gezielt weitergeben kann.

nochwas, ich such mir das nicht aus wie ichs schreibe, mal abgesehen davon das wenn es alles durchgenormt wäre es keine syntax unterschiede gäbe, denn was soll ich machen wenn mir der interpreter eine fehlermeldung rausgibt und beim vermeintlich flaschen nicht?

echo "$_POST['abc']"; geht beispielsweise nicht aber echo "$_POST[abc]"; was aber falsch wäre.

genauso der html text: ""<-- wird als PHP interpretiert also laß ichs halt weg denn selbst ''<-- führt zu problemen.

Aber was solls die browser meckern ja nicht rum und zeigen alles so an wies sein soll :)

Gast
2006-08-24, 19:32:30
OMG, du hast das mit den Quotes und Anführungszeichen nicht geschnallt. Zurück an den PHP-Start, bitte.

ooAlbert
2006-08-25, 10:38:20
ich hab grad überlegt wenn ich vom absendeknopf den namen als Array definiere hab ich die aktuelle position.

<input type=submit name=Position[".$row['Position']."] value=Bearbeiten>

das sieht dann so aus:

Position ( [72] => Bearbeiten)

Das Problem ist, das ich so keinen vegleich anstellen kann, da ich nämlich nur den index brauche also die 72. Wenn ich das "Bearbeiten" aber lösche via array_pop() verschwindet ja auch der index.

Jetzt weiß ich nicht genau wie man da sonst vorgehen könnte das man halt diesen index rauslöst oder wie eine abfrage aussehen könnte das nur dieser index verglichen wird im array und nicht der wert darunter.

Gast
2006-08-25, 16:57:32
Tut mir ja leid, aber du bist absolut lernresistent, weißt du das eigentlich?

Ich finde es ziemlich Frech hier Fragen zu stellen Leuten wirklich gut gemeinte und souveräne Antworten schreiben zu lassen und sie dann schlicht zu ignorieren.