• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Einfaches Syntaxproblem

GerStriker

Neues Mitglied
Hallo,
ich habe folgenden Code geschrieben der ein paar Daten in eine Tabelle aufnehmen soll. Leider funktioniert es nicht und ich habe mich vollkommen verlaufen.
Der Kram kommt natürlich über ein Formular rein.
PHP:
<tr><td><input type="" name="name" size"50" width="100" /></td><td><input type="" name="beschreibung" size"50" /></td><td><input type="" name="URL" size"50" /></td><td><input type="" name="typ" size"50" /></td><td><input type="submit" name="ok" value="OK" /></td></tr>

$sql = mysql_query("INSERT INTO links (id, name, beschreibung, link, type)"."VALUES ('$_POST[ident]', '$_POST[name]', '$_POST[beschreibung]', '$_POST[URL]', '$_POST[typ]')");
 
Werbung:
Nein. Der vollständige Quellcode ist deutlich länger. Ich kenne mich mit den Fehlerabfragen nicht aus, daher weiß ich nicht, was nicht funktioniert. Das Problem äußert sich so das das Script ohne Mucken durch läuft, aber keinen Eintrag in der Tabelle "Links" macht.

Mein Hauptproblem ist ob der MYSQL_QUERY richtig ist.
 
Werbung:
Bei den wenigen Infos kann man nur raten. Was auffällt, eine Spalte id wird normalerweise als Typ int mit auto_increment angelegt und man gibt bei einem Insert die ID nicht an, sondern lässt MySQL das selber machen. Außerdem sehe ich das Formularfeld ident nicht. Ich schlage mal wie so oft vor:

Richtig debuggen

  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 
Danke für die Anleitung. Ich werd sie mir mal speichern. Ich bin allerdings ein wenig weiter gekommen. Es geht immernoch um folgenden Codeschnipsel der nicht das tut was er soll:
$sql = mysql_query("INSERT INTO links (id, name, beschreibung, link, type) VALUES (NULL, $_POST[name], $_POST[beschreibung], $_POST, $_POST[typ])"); Das ganze habe ic...enthält das Array auch alle eingebenen Daten.
 
Okay, das hier -->Use of undefined constant name - assumed 'name' in Datei<-- lag an fehlenden Gänsefüßchen...
 
Werbung:
PHP:
$query = "INSERT 
            INTO 
              `links` 
                (`name`, `beschreibung`, `link`, `type`) 
              VALUES 
                (" . mysql_real_escape_string($_POST['name']) . ","
                   . mysql_real_escape_string($_POST['beschreibung']) . ","
                   . mysql_real_escape_string($_POST['URL']) . ","
                   . mysql_real_escape_string($_POST['typ']) . ")";
                   
mysql_query($query)
   or die ("MySQL-Fehler: " . mysql_error());
 
Vielen Dank.
Ich musste deinen Code ein wenig modifizieren und jetzt geht es.
PHP:
$query = "INSERT INTO links (name, beschreibung, link, type) VALUES ('$_POST[name1]','$_POST[beschreibung1]','$_POST[URL1]','$_POST[typ1]')";
    mysql_query($query) or die ("MySQL-Fehler: " . mysql_error());
Dabei habe ich gleich drei Fragen:
1. Gibt es irgendwo mal eine genaue Richtlinie wann man welche Anführungszeichen zu verwenden sind?
2. Kann mir mal einer den Punkt erklären, denn damit habe ich immer noch Probleme.
3. Muss mysql_query nicht üblicherweise in eine Variable geschrieben werden (
PHP:
 $sql=mysql_query("");
)?
 
Wieso hast du mysql_real_escape_string rausgenommen??? :neutral:

Zu 1. Ja, steht in der Doku von PHP und MySQL
Zu 2. Auch das steht in der Doku!!! PHP: Zeichenketten-Operatoren - Manual
Zu 3. Bei einem Insert oder Delete muss das nicht sein

PHP:
$query = "INSERT 
            INTO 
              `links` 
                (`name`, `beschreibung`, `link`, `type`) 
              VALUES 
                ('" . mysql_real_escape_string($_POST['name']) . "','"
                    . mysql_real_escape_string($_POST['beschreibung']) . "','"
                    . mysql_real_escape_string($_POST['URL']) . "','"
                    . mysql_real_escape_string($_POST['typ']) . "')";
                   
mysql_query($query)
   or die ("MySQL-Fehler: " . mysql_error());
 
Werbung:
1. Klar einfach mal googlen nach "PHP Tutorial" denn das sind die Grundlagen
2. Im Grunde kann man in doublequotes direkt auf PHP Variablen zugreifen. (Bsp. echo "Name: $foo";)
Die ist in Singelquotes nicht möglich außer man escape't.

Der Unterschied, die Geschwindigkeit da der PHP Interpreter die eingebauten Variablen finden und durch Werte ersetzen muss.
 
Die Grundlagen habe ich schon mehrfach gelernt, nur sind meine Projekte meistens so klein das ich auf die Verknüpfung über den Punktoperator verzichten kann. Noch dazu habe ich ein Gedächtnis wie ein Sieb.
Die Modifikationen waren nötig, weil es sonst zu Fehlern kam. Die mysql_real_escape_string packe ich wieder rein. Jetzt gerade wollte ich nur etwas ausprobieren.
 
Werbung:
Warum auch immer, aber der Code den du mir gegeben hast funktioniert bei mir nicht. Und zwar sobald ich mysql_real_escape_string ​einfüge. Dann werden keine Daten übertragen
 
Werbung:
Sorry, das es bei mir mit den Antworten immer so lange dauert.
Hier ist der relevante Code.
PHP:
require 'dbquery.inc.php';
if (!(isset($_POST["ok"])))	{$sql = mysql_query("SELECT * FROM links");echo '<div id="linktable"><form action="links.php" method="post"><table id="links" bgcolor="#DBDBDB" border="1" width="600px" align="left"><tr><td>Name</td><td>Beschreibung</td><td>Link</td><td>Typ</td><td>Speichern</td><td bgcolor="red">Löschen</td></tr>';	echo'<tr><td><input type="" name="name1" size"50" width="100" /></td><td><input type="" name="beschreibung1" size"50" /></td><td><input type="" name="URL1" size"50" /></td><td><input type="" name="typ1" size"50" /></td><td><input type="submit" name="ok1" value="OK" /></td><td bgcolor="red"><input type="reset" name="del" value="DEL" /></td></tr><input type="hidden" name="ident1" value ="NEW"/>';while($sql1 = mysql_fetch_array( $sql))	{	echo '<tr><td>';	echo '<input type="" name="name" size="50" value="';	echo $sql1[1];	echo '"/>';	echo '</td><td>';	echo '<input type="" name="beschreibung" size="50" value="';	echo $sql1[2];	echo '"/>';	echo '</td><td>';	echo '<input type="" name="URL" size="50" value="';	echo $sql1[3];	echo '"/>';	echo '</td><td>';	echo '<input type="" name="typ" size="50" value="';	echo $sql1[4];	echo '"/>';	echo '</td><td>';	echo '<input type="submit" name="ok" value="OK" />';	echo '</td><td bgcolor="red">';	echo '<input type="submit" name="del" value="DEL" />';	echo '</td></tr>';	echo '<input type="hidden" name="ident" value ="';	echo $sql1[0];	echo ' "/>';	}echo '</table></form></div>';	} else {	if (isset($_POST["ok"]))	{	$query = "UPDATE link' SET name='$_POST[name]',beschreibung='$_POST[beschreibung]',link='$_POST[URL]',type='$_POST[typ]' WHERE id='$_POST[ident]'";	$sql = mysql_query($query);	echo "update";//	header("location:links.php");	} elseif (isset($_POST["ok1"])) {	$query = "INSERT INTO links (name, beschreibung, link, type) VALUES ('$_POST[name1]','$_POST[beschreibung1]','$_POST[URL1]','$_POST[typ1]')";	$sql = mysql_query($query);  	echo "Insert";//	header("location:links.php");	} else {	header("location:links.php");		}}}

Ich weiß das manches nicht der Norm entspricht, aber ich bin noch am Experimentieren.
 
Warum soll ich nicht SELECT * schreiben?
Datenbanken - Warum soll ich nicht SELECT * schreiben?

Du solltest dich mal entscheiden, ob deine Tabelle links oder link heißt. Außerdem solltest du mal auf deine Anführungszeichen achten und die nicht wahllos verteilen. Weiterhin gehören Tabellen- und Spaltennamen zwischen Backticks. Und dann sehe ich nicht eine Überprüfung nach mysql_query mit mysql_error

Und eine Frage habe ich: bekommst du für jedes geschriebene echo Geld?

Für alle, die sich den Quellcode in lesbarer For, ansehen wollen (ist aber nicht korrigiert):
PHP:
require 'dbquery.inc.php';

if (!(isset($_POST["ok"])))    
{
   $sql = mysql_query("SELECT * FROM links");
   
   echo '<div id="linktable">
          <form action="links.php" method="post">
          <table id="links" bgcolor="#DBDBDB" border="1" width="600px" align="left">
            <tr>
              <td>Name</td>
              <td>Beschreibung</td>
              <td>Link</td>
              <td>Typ</td>
              <td>Speichern</td>
              <td bgcolor="red">Löschen</td>
            </tr>';    
            
   echo'<tr>
          <td><input type="" name="name1" size"50" width="100" /></td>
          <td><input type="" name="beschreibung1" size"50" /></td>
          <td><input type="" name="URL1" size"50" /></td>
          <td><input type="" name="typ1" size"50" /></td>
          <td><input type="submit" name="ok1" value="OK" /></td>
          <td bgcolor="red"><input type="reset" name="del" value="DEL" /></td>
        </tr>
        
        <input type="hidden" name="ident1" value ="NEW"/>';
        
   while($sql1 = mysql_fetch_array( $sql))    
   {    
      echo '<tr><td>';    
      echo '<input type="" name="name" size="50" value="';    
      echo $sql1[1];    
      echo '"/>';    
      echo '</td><td>';    
      echo '<input type="" name="beschreibung" size="50" value="';    
      echo $sql1[2];    
      echo '"/>';    
      echo '</td><td>';    
      echo '<input type="" name="URL" size="50" value="';    
      echo $sql1[3];    
      echo '"/>';    
      echo '</td><td>';    
      echo '<input type="" name="typ" size="50" value="';    
      echo $sql1[4];    
      echo '"/>';    
      echo '</td><td>';    
      echo '<input type="submit" name="ok" value="OK" />';    
      echo '</td><td bgcolor="red">';    
      echo '<input type="submit" name="del" value="DEL" />';    
      echo '</td></tr>';    
      echo '<input type="hidden" name="ident" value ="';    
      echo $sql1[0];    
      echo ' "/>';    
   }
  
   echo '</table></form></div>';    
} 
else 
{
   if (isset($_POST["ok"]))    
   {    
       $query = "UPDATE link' SET name='$_POST[name]',beschreibung='$_POST[beschreibung]',link='$_POST[URL]',type='$_POST[typ]' WHERE id='$_POST[ident]'";    
       
       $sql = mysql_query($query);    
       
       echo "update";
       //    header("location:links.php");    
    } 
    elseif (isset($_POST["ok1"])) 
    {    
        $query = "INSERT INTO links (name, beschreibung, link, type) VALUES ('$_POST[name1]','$_POST[beschreibung1]','$_POST[URL1]','$_POST[typ1]')";    
        
        $sql = mysql_query($query);      
        
        echo "Insert";
        
        //    header("location:links.php");    
    } 
    else 
    {    
        header("location:links.php");        
    }
}
 
Werbung:
Jetzt bleib doch mal ruhig. Ja, ich habe noch nicht die mega Ahnung davon, deshalb frage ich nach. Die Select-Abfrage mache ich deshalb, weil es in dem Buch das ich zum lernen benutze so drin steht, oder ich es so verstanden habe.
Die Zahlreichen echos habe ich benutzt damit ich den Code besser lesen kann. Auch hier ist mir noch keine bessere Lösung eingefallen.
Das mit der schlechten Formatierung tut mir leid, mir war nicht bewusst das beim Kopieren alle Returns verloren gegangen sind.
Anbei vielen Dank für den Tip mit dem Tabellennamen. Das könnte ein Problem sein.
 
Jetzt bleib doch mal ruhig.
Ich bin die Ruhe selbst

Die Select-Abfrage mache ich deshalb, weil es in dem Buch das ich zum lernen benutze so drin steht
Das steht leider auch in vielen Tutorials so, aber woher soll ein Buch oder ein Tutorial auch deine Tabellen kennen?

Die Zahlreichen echos habe ich benutzt damit ich den Code besser lesen kann
So kann man das noch besser lesen:
PHP:
   while($sql1 = mysql_fetch_array( $sql))
   {
      echo '<tr>
             <td>
               <input type="" name="name" size="50" value="' . sql1[1] . '"/>
             </td>
             <td>
               <input type="" name="beschreibung" size="50" value="' . sql1[2] . '"/>
             </td>
             <td>
               <input type="" name="URL" size="50" value="' . sql1[3] . '"/>
             </td>
             <td>
               <input type="" name="typ" size="50" value="' . sql1[4] . '"/>
             </td>
             <td>
               <input type="submit" name="ok" value="OK" />
             </td>
             <td bgcolor="red">
               <input type="submit" name="del" value="DEL" />
               <input type="hidden" name="ident" value ="' . sql1[0] . '" />
             </td>
            </tr>';
   }
Anbei vielen Dank für den Tip mit dem Tabellennamen.
Nicht alleine, ich sehe auf jeden Fall ein ' zuviel
 
Zurück
Oben