Hi,
hi Leute!!
ich hab ein problem mit fetch assoc scheinbar:$edit= "SELECT * FROM
buch
WHEREid
=".$_GET['edit'];
$del= "DELETE FROMbuch
WHEREid
=".$_GET['del'];$query3 = mysql_query($edit);
while ($query1 = mysql_fetch_assoc($query3)){
Fehlermeldung:
Warning: mysql_fetch_assoc(): supplied argument is not a valid
MySQL result resource in ...
Ich vermute in $_GET['edit'] steht nichts vernünftiges, so dass entweder schon der SQL-String nicht korrekt ist, oder eine leere Datenmenge zurückgegeben wird.
Das was Du da machst, ist eine direkte Aufforderung zum Hacken (Stichwort SQL-Injection). Du solltest die vom User übergebenen Parameter $_GET['edit'] und $_GET['del'] ein wenig auf valide Eingaben überprüfen. Siehe z.B. unter mysql_real_escape_string.
Wäre nett wenn ihr mir paar tipps geben würdet wie ich den code verkürze usw..
Ich benutze grundsätzlich so oft wie möglich einfache Anführungszeichen, weil sie im Gegensatz zu doppelten nicht auf enthaltene Variablen und Sonderzeichen (\n etc.) abgesucht werden. Dadurch sind sie einen Tick schneller und teilweise auch besser lesbar, wenn man HTML ausgibt. Also statt:
echo "<form action="eddel.php" method="POST">
<table border="0" align="center">";
einfacher:
echo '<form action="eddel.php" method="POST">
<table border="0" align="center">';
Wenns ums Kürzen geht ist folgendes grauslig:
if ($_POST['send']){
if ($_POST['titel']){
if ($_POST['isbn']){
if ($_POST['neupreis']){
if ($_POST['preisvorstellung']){
if ($_POST['telefonnummer']){
$change = "UPDATEbuch
SETtitel
='". $_POST['titel'] ."' ,isbn
='". $_POST['isbn'] ."' ,neupreis
='". $_POST['neupreis'] ."' ,preisvorstellung
='". $_POST['preisvorstellung'] ."' ,telefonnummer
='". $_POST['telefonnummer'] ."' WHEREid
=".$_GET['edit'];
mysql_query($change);
} else {echo "<font color="red" size="19">Bitte alle Felder ausfüllen!</font>";}
} else {echo "<font color="red" size="19">Bitte alle Felder ausfüllen!</font>";}
} else {echo "<font color="red" size="19">Bitte alle Felder ausfüllen!</font>";}
} else {echo "<font color="red" size="19">Bitte alle Felder ausfüllen!</font>";}
} else {echo "<font color="red" size="19">Bitte alle Felder ausfüllen!</font>";}
Stattdessen lieber:
if (($_POST['send']) and
($_POST['titel']) and
($_POST['isbn']) and
($_POST['neupreis']) and
($_POST['preisvorstellung']) and
($_POST['telefonnummer']) {
$change = "UPDATE buch
SET titel
='". $_POST['titel'] ."' , isbn
='". $_POST['isbn'] ."' ,neupreis
='". $_POST['neupreis'] ."' , preisvorstellung
='". $_POST['preisvorstellung'] ."' , telefonnummer
='". $_POST['telefonnummer'] ."' WHERE id
=".$_GET['edit'];
mysql_query($change);
}
else {
echo '<font color="red" size="19">Bitte alle Felder ausfüllen!</font>';
}
Auch hier gilt: Vorsicht bei der ungefilterten Übernahme von
Benutzereingaben.
Außerdem würde ich von der Verwendung des FONT-Tags grundsätzlich
abraten. In den heutigen Zeiten von CSS ist das einfach obsolet.
Stattdessen: <p class="alert">Bitte alle Felder ausfüllen!</p>
Grüße,
Aranxo