Mysql fetch assoc problem
SajuOne
- php
hi Leute!!
ich hab ein problem mit fetch assoc scheinbar:
<?php
$link = mysql_connect('localhost',BLABLA);
if (!$link){
die('Verbindung nicht möglich'. mysql_error());
}
mysql_select_db('sayjay');
$edit= "SELECT * FROM buch
WHERE id
=".$_GET['edit'];
$del= "DELETE FROM buch
WHERE id
=".$_GET['del'];
if($_GET['del']){
$query2 = mysql_query($del);
}
$query3 = mysql_query($edit);
while ($query1 = mysql_fetch_assoc($query3)){
echo "<form action="eddel.php" method="POST">
<table border="0" align="center">
<tr>
<td>Titel:</td><td><input type="name" name="titel" value="". $query1['titel'] ."" /></td>
</tr>
<tr>
<td>ISB-N(ummer):</td><td><input type="name" name="isbn" value="". $query1['isbn'] ."" /> (bitte ohne Bindestriche)</td>
</tr>
<tr>
<td>Neupreis:</td><td><input type="name" name="neupreis" value="". $query1['neupreis'] ."" /></td>
</tr>
<tr>
<td>Preisvorstellung:</td><td><input type="name" name="preisvorstellung" value="". $query1['preisvorstellung'] ."" /></td>
</tr>
<tr>
<td>Telefonnummer:</td><td><input type="name" name="telefonnummer" value="". $query1['telefonnummer'] .""/></td>
</tr>
<tr>
<td><input type="submit" name="send" /><input type="reset" name="reset" />
</tr>
</table></form>";
}
if ($_POST['send']){
if ($_POST['titel']){
if ($_POST['isbn']){
if ($_POST['neupreis']){
if ($_POST['preisvorstellung']){
if ($_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>";}
} 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>";}
}
?>
Fehlermeldung:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/sayjay/Buch/eddel.php on line 21
Könnt ihr mir sagen was ich da falsch mache?
Ich bin neu beim PHP.
Wäre nett wenn ihr mir paar tipps geben würdet wie ich den code verkürze usw..
Danke im Voraus!!!
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
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.
Ich hab probiert das zu verstehen, aber naja hat nicht so doll geklappt.
Wäre nett wenn du mir das an meinem Beispiel zeigen könnntest damit ich besser durchblicke.
danke im Voraus!
hi,
Könnt ihr mir sagen was ich da falsch mache?
Du hast mysql_error() nicht befragt, was du bitte _immer_* machst, nachdem du _irgendwas_ mit deiner MySQL-DB gemacht hast.
* während der Entwicklung wenigstens
gruß,
wahsaga