SajuOne: Mysql fetch assoc problem

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!!!

  1. Hi,

    hi Leute!!
    ich hab ein problem mit fetch assoc scheinbar:

    $edit= "SELECT * FROM buch WHERE id =".$_GET['edit'];
    $del= "DELETE FROM buch WHERE id =".$_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 = "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>";}

    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

    1. 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!

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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }