Regisitrierungsform-Problem in $registerquery

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Regisitrierungsform-Problem in $registerquery

    Hi,

    nach langem Suchen und tüfteln bin ich selbst nicht auf den Fehler gekommen, der sich in den Code meiner Regisitrierungsform für Daten eingeschlichen hat.

    Ich bleibe immer dei dem zweitletzten else hängen, also bei dem, welches
    Code:
    echo "<h1>Error</h1>";
            	echo "<p>Ihr Rezepteintrag schlug fehl. Bitte versuchen Sie es erneut.</p>";
    ausspuckt.

    Der Fehler liegt, soweit ich das erkenne, an den 4 Variablen. Entweder den von mir definierten, oder an denen von der Datenbank. Und alles, obwohl diese Variablen in der Datenkabnk und PHP gleich heißen. Der Fehler loegt höchstwahrscheinlich bei der Definition von $registerquery.
    Vielleicht, aber nur vielleicht, liegt es auch am <select> tag, der eine Dropdown-Liste ermöglicht.

    Das ist die registry.php:
    Code:
    <?php include "base.php"; ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    
    <title>Rezepteingabe</title> <!-- Thank you NetTuts for this super smooth tutorial! -->
    
    </head>  
    <body>  
    <div id="main">
    <?php
    	
    	if(!empty($_POST['Name']))
    {
    	$Name = mysql_real_escape_string($_POST['Name']);
        $Kategorie = md5(mysql_real_escape_string($_POST['Kategorie']));
        $Kurzbeschreibung = mysql_real_escape_string($_POST['Kurzbeschreibung']);
    	$Beschreibung = mysql_real_escape_string($_POST['Beschreibung']);
        
    	 $checkusername = mysql_query("SELECT * FROM rezeptbeschreibung WHERE Name = '".$Name."'");
         
         if(mysql_num_rows($checkusername) == 1)
         {
         	echo "<h1>Error</h1>";
            echo "<p>Dieser Rezeptname wird bereits verwendet. Duplikate sind noch nicht möglich.</p>";
    		
         }
         else
         {
         	$registerquery = mysql_query("INSERT INTO rezeptbeschreibung (Name, Kategorie, Kurzbeschreibung, Beschreibung) VALUES('".$Name."', '".$Kategorie."', '".$Kurzbeschreibung."', '".$Beschreibung."')");
            
    		if($registerquery)
            {
            	echo "<h1>Success</h1>";
            	echo "<p>Ihr Zezept wurde erfolgreich erstellt und gespeichert.</p>";
            }
            else
            {
         		echo "<h1>Error</h1>";
            	echo "<p>Ihr Rezepteintrag schlug fehl. Bitte versuchen Sie es erneut.</p>";    
            }    	
         }
    }
    else
    {
    
    	?>
        
       <h1>Register</h1>
        
       <p>Bitte geben Sie folgende Daten ein, um mit der Eingabe Ihres Rezepts zu beginnen. Schritt 1/2</p>
        
    	<form method="post" action="register.php" name="registerform" id="registerform">
    	<fieldset>
    		 <label for="Name">Name:</label><input type="text" name="Name" id="Name" /><br />
             <label for="Kategorie">Kategorie:</label><select type="text" name="Kategorie" id="Kategorie" >
             <option value="volvo">Volvo</option>
      		 <option value="saab">Saab</option>
      		 <option value="mercedes">Mercedes</option>
      		 <option value="audi">Audi</option>
             </select><br/>
           
    		<label for="Kurzbeschreibung">Kurzbeschreibung:</label><input type="text" name="Kurzbeschreibung" id="Kurzbeschreibung" /><br />
           
            
            
            <label for="Beschreibung">Beschreibung:</label><input type="text" name="Beschreibung" id="Beschreibung" /><br />
    		<input type="submit" name="register" id="register" value="Register" />
    	</fieldset>
    	</form>
        
       <?php
    }
    ?> 
    
    </div>
    </body>
    </html>
    Und das die zugehörige Datenbank in phpMyAdmin:
    siehe Anhang

    Falls Ihr die kleine base.php sehen möchtet, meldet euch einfach. Dort habe ich aber nur grundlegendes wie den Zugang zur DB selbst definiert. Diese läuft auch einwandfrei, da ich sie bereits mit anderen PHPs verwende.

    Vielen vielen Dank schon im Vorraus an jeden der versucht zu helfen!

    Gruß,
    iSpectra
    Angehängte Dateien

  • #2
    Erstmal: Ich finde PHP-Quellcode mit eingestreutem HTML schrecklich.

    Dann solltest du dich mit den Grundlagen der Fehlersignalisierung (wenigstens error_reporting(E_ALL) und Benutzung von var_dump()) und -Lokalisierung vertraut machen.

    Und schließlich sind die mysql_...-Funktionen nicht mehr up-to-date. Benutze PDO oder die objekt-orientierte Abteilung der mysqli-Erweiterung. Dann kannst du auch gleich das Behandeln jedes POST-Feldes mit mysql_real_escape_string() automatisieren lassen.

    PHP-Code:
    // ...
    $registerquery mysql_query("INSERT INTO rezeptbeschreibung (Name, Kategorie, Kurzbeschreibung, Beschreibung) VALUES('".$Name."', '".$Kategorie."', '".$Kurzbeschreibung."', '".$Beschreibung."')");
            
            if(
    $registerquery)
            {
                echo 
    "<h1>Success</h1>";
                echo 
    "<p>Ihr Zezept wurde erfolgreich erstellt und gespeichert.</p>";
            }
            else
            {
                 echo 
    "<h1>Error</h1>";
                echo 
    "<p>Ihr Rezepteintrag schlug fehl. Bitte versuchen Sie es erneut.</p>";
    // ... 
    Da mysql_query() bei INSERT-Statements nur einen booleschen Wert zurückgibt, musst du erstmal herausbekommen, warum dein $registerquery den Wert FALSE hat. Dafür gibts die mysql_error()-Funktion. Erst wenn die dir sicher sagt, dass dein SQL keinen Syntax-Fehler hat und der entsprechende Datensatz nicht schon existiert oder ein anderes Hindernis das Einfügen eines neuen besteht, kannst du dich auf die weitere Suche nach einem Fehler machen, der anderswo in deinem Script steckt.

    ... und eventuell solltest du beim INSERT eine 'UserID' angeben. Die Übersichtsgrafik deiner Datenbankverwaltungssoftware sagt nicht, dass die Datenbank dafür automatisch einen Wert vergibt (was auch unsinnig wäre).
    Zuletzt geändert von fireweasel; 17.09.2013, 17:25.
    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

    Kommentar


    • #3
      @fireweasel; Herzlichen Dank für deine Antwort!

      Ich hab das Problem nun gelöst. Es lag tatsächlich an der UserID. Dabei habe ich ganz vergessen, den Code dafür einzuarbeiten, da diese schließlich, abhänhig vom eingeloggten Benutzer, automatisch eingetragen werden soll. RezeptID ist dabei der Primärschlüssel der auf AI gestellt ist.

      Weil also für UserID kein Wert eingetragen wurde, spuckte die query FALSE aus.

      Kommentar

      Lädt...
      X