MySQL + PHP

dg87

Erfahrenes Mitglied
Hallo, ich habe hier ne kleine Funktion geschrieben, die Werte eines Formulars bekommt. Diese Werte möchte ich dann mit Hilfe eines Querys an MySQL schicken. Jedoch meckert er mir hier die Syntax an. Ich weiß dass ich die Variablen so nicht verschicken kann, aber wie kann ich sie mit richtiger Syntax an die Datenbank schicken?

function pflicht_eing($eing_name,$eing_betreff,$eing_eintrag,$eing_aen)
{
if(!$eing_name || !$eing_betreff || !$eing_eintrag)
{
die ("Es wurden nicht alle Felder Pflichtgem&auml;&szlig; ausgef&uuml;llt<br>");
}
else
{
$eing_aen++;
$neu_datensatz = "INSERT INTO eintr
(betreff,nachricht,datum,name)
VALUES
($eing_betreff,$eing_eintrag,NOW();$eing_name);";
mysql_query($neu_datensatz) or die(mysql_error());
return $eing_aen;
}
}


Vielen Dank
 
PHP:
<?php

function pflicht_eing($eing_name,$eing_betreff,$eing_eintrag,$eing_aen)
{
  if(!empty($eing_name) || !empty($eing_betreff) || !empty($eing_eintrag))
  {
    die ("Es wurden nicht alle Felder Pflichtgem&auml;&szlig; ausgef&uuml;llt<br>");
  }
  else
  {
    $eing_aen++;
    $neu_datensatz = "INSERT INTO `eintr`
                        (`betreff`, `nachricht`, `datum`, `name`)
                      VALUES
                        ('".mysql_real_escape_string($eing_betreff)."', 
                         '".mysql_real_escape_string($eing_eintrag)."',
                         NOW();
                         '".mysql_real_escape_string($eing_name);."')";
    mysql_query($neu_datensatz) or die(mysql_error());
    return $eing_aen;
  }
}

?>

Versuch es mal so:
Alle Daten werden nun auch gegen SQL Injektionen geschützt und die Funktion ist etwas schöner formatiert.
Nutze bitte das nächste Mal PHP Tags um Quelltext zu zeigen.
Ansonsten wäre die Art des Fehlers auch gut zu wissen.
 
<?php
function pflicht_eing($eing_name,$eing_betreff,$eing_eintrag,$eing_aen)
{
if(!empty($eing_name) || !empty($eing_betreff) || !empty($eing_eintrag))
{
die ("Es wurden nicht alle Felder Pflichtgem&auml;&szlig; ausgef&uuml;llt<br>");
}
else
{
$eing_aen++;
$neu_datensatz = "INSERT INTO `eintr`
(`betreff`, `nachricht`, `datum`, `name`)
VALUES
('".mysql_real_escape_string($eing_betreff)."',
'".mysql_real_escape_string($eing_eintrag)."',
NOW();
'".mysql_real_escape_string($eing_name);."')";
mysql_query($neu_datensatz) or die(mysql_error());
return $eing_aen;
}
}
?>

Da is anscheinend immer noch ein Syntax fehler drinnen, finde ihn nicht.

Anmeckern tut er die Zeile vor dem mysql_query (Syntax error) oder davor halt.

wie mache ich dass das auch so gut ausschaut wie bei dir oben. bin neu hier. php tags hab ich ja jetzt drinnen
 
Sorry, hatte ein Semikolon reingeschmuggelt, dass da nicht hingehörte.

PHP:
<?php

function pflicht_eing($eing_name,$eing_betreff,$eing_eintrag,$eing_aen)
{
  if(empty($eing_name) || empty($eing_betreff) || empty($eing_eintrag))
  {
    die ("Es wurden nicht alle Felder Pflichtgem&auml;&szlig; ausgef&uuml;llt<br>");
  }
  else
  {
    $eing_aen++;
    $neu_datensatz = "INSERT INTO `eintr`
                        (`betreff`, `nachricht`, `datum`, `name`)
                      VALUES
                        ('".mysql_real_escape_string($eing_betreff)."', 
                         '".mysql_real_escape_string($eing_eintrag)."',
                         NOW();
                         '".mysql_real_escape_string($eing_name)."')";
    mysql_query($neu_datensatz) or die(mysql_error());
    return $eing_aen;
  }
}

?>

In dem du es in [php ][/ php] Tags setzt (ohne die Leerzeichen).
 
Zuletzt bearbeitet:
Es gibt noch einen bedeutenden Logikfehler. Zudem sollte die Funktion im Fehlfall besser einen Wert zurückgeben als die Laufzeit des Skripts abzubrechen:
PHP:
function pflicht_eing( $eing_name, $eing_betreff, $eing_eintrag, $eing_aen)
{
	if( empty($eing_name) || empty($eing_betreff) || empty($eing_eintrag) ) {
		return false;
	}
	$neu_datensatz = "INSERT INTO `eintr` (`betreff`, `nachricht`, `datum`, `name`) VALUES ('".mysql_real_escape_string($eing_betreff)."', '".mysql_real_escape_string($eing_eintrag)."', NOW(), '".mysql_real_escape_string($eing_name)."')";
	mysql_query($neu_datensatz) or die(mysql_error());
	return ++$eing_aen;
}

if( !pflicht_eing(/* … */) {
	echo 'Es wurden nicht alle Felder pflichtgemäß ausgefüllt<br>';
}
 
PHP:
  function pflicht_eing($eing_name,$eing_betreff,$eing_eintrag,$eing_aen)
       {
          if(!empty($eing_name) || !empty($eing_betreff) || !empty($eing_eintrag))
          {
            die ("Es wurden nicht alle Felder Pflichtgem&auml;&szlig; ausgef&uuml;llt<br>");
          }
          else
          {
            $eing_aen++;
            $neu_datensatz = "INSERT INTO `eintr`
                                (`betreff`, `nachricht`, `datum`, `name`)
                              VALUES
                                ('".mysql_real_escape_string($eing_betreff)."', 
                                 '".mysql_real_escape_string($eing_eintrag)."',
                                 NOW();
                                 '".mysql_real_escape_string($eing_name)."')";
            mysql_query($neu_datensatz) or die(mysql_error());
            return $eing_aen;
          }
       }

Funktioniert immer noch nicht, der meckert immer die SQL Syntax an.

und noch ne frage (sorry dass ich nerv), warum heißt es eigentlich !empty() und nicht nur empty(), weil die meldung soll rauskommen, wenn eine der Variablen nichts drinnen steht.

Und noch was, wenn ich aufs formular abschicken klicke und trotz dass alle werte ausgefüllt sind, kommt die meldung da oben, dass nicht alles ausgefüllt sei. bin am verzweifeln ;-)
 
Zuletzt bearbeitet:
War mein Fehler.

Gumbos Version ist allerdings schöner und funktioneller.

Welcher MySQL Fehler wird denn gemeldet?
 
Zuletzt bearbeitet:
naja jetzt kommt auf einmal keine mehr, jedoch werden die daten nicht in die datenbank eingetragen. musst dir nicht durchlesen, aber ich zeig dir mal den gesamten code. muss den leider in eine datei schreiben, weil mein chef das so will (bin azubi ;-) )

und bei empty also doch die ! weg oder?

PHP:
<html>
<head><title>Gaestebuch</title>
<?php
 //Funktionen
        function con_sel()
        {
            // Diese Funktion verbindet zu MYSQL Server und wählt anschließend die Datenbank aus
            
            $dbconnection = @mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASSWORD) or die("Verbindung konnte leider nicht aufgebaut werden <br>");
            if($dbconnection)
            {
                echo " Die Verbindung wurde aufgebaut <br>";
                $erfolg = mysql_select_db(MYSQL_DATABASE);
                if($erfolg)
                {  echo "Datenbank ". MYSQL_DATABASE . " wurde ausgew&auml;hlt <br>";
                   return 1;
                }
            }
        }
          /////////////////////////////////////////////////////////////////
        function formular_eing($eingeloggt) // Eingabe Formular
        {
                     
          echo "<form action=\"gb.php\" method=\"post\">"; 
          echo "Betreff*:". "<input type=\"text\" name=\"betreff\">";
          echo "Name*:" . "<input type=\"text\" name=\"name\">";
          echo "<input type=\"submit\" name=\"eintragen\" value=\"Eintragen\"><br>";
          echo "Eintrag*:". "<textarea name=\"eintrag\" rows=\"10\" cols=\"50\"></textarea><br>";
      
             
                  if($eingeloggt==1) // Nur wenn er eingeloggt ist, sollen die Buttons zur Verfügung stehen
                  {
                    echo "<input type=\"submit\" name=\"aen\" value=\"&Auml;ndern\">";
                    echo "<input type=\"submit\" name=\"loesch\" value=\"L&ouml;schen\"><br>";
                    echo "<br>";
                    echo "GB-Eintrags nummer*: <input type=\"text\" name=\"zahl\"><br>";
                  }
                  echo "<br>";
                  echo "<br>";
                  echo "<br>"; 
                  echo("Felder mit * sind Eingabepflicht, durch Login stehen Ihnen weitere Funktionen zur Verf&uuml;gung<br>");                  
          echo "</form>";
        }
        /////////////////////////////////////////////////////////////////////////////////
       function pflicht_eing($eing_name,$eing_betreff,$eing_eintrag,$eing_aen)
       {
          if(!empty($eing_name) || !empty($eing_betreff) || !empty($eing_eintrag))
          {
            die ("Es wurden nicht alle Felder Pflichtgem&auml;&szlig; ausgef&uuml;llt<br>");
          }
          else
          {
            $eing_aen++;
            $neu_datensatz = "INSERT INTO `eintr`
                                (`betreff`, `nachricht`, `datum`, `name`)
                              VALUES
                                ('".mysql_real_escape_string($eing_betreff)."', 
                                 '".mysql_real_escape_string($eing_eintrag)."',
                                 NOW();
                                 '".mysql_real_escape_string($eing_name)."')";
            mysql_query($neu_datensatz) or die(mysql_error());
            return $eing_aen;
          }
       }


        
        
?>
</head>
 
  <?php
  
         
        //Deklarationen
        define('MYSQL_HOST',     'localhost');  // Konstanten zum Verbinden mit MySQL
        define('MYSQL_USER',     'root');
        define('MYSQL_PASSWORD', 'start');
        define('MYSQL_DATABASE', 'gb');
        
            //Variablen
        $holdat1 = "SELECT * from eintr ORDER BY datum DESC;";
        $eing_aen = 1; // Wert der den GB eintrag herholt, fürs ändern
        /************************ Testdaten in Tabellle einfügen ****************************************************/
        $gibdat = "INSERT INTO eintr
                   (betreff,nachricht,datum,name)
                   VALUES
                   ('Solala','Das ist eine Nachricht von einem Spaceshuttle zur Erde',NOW(),'Hans');";
        $gibuser = "INSERT INTO usr
                   (username,password)
                   VALUES
                   ('dg87','test');";
                   
                   con_sel(); //Funktion zum Verbinden und auswählen der Datenbank
                   
                   

         
 ?>
 <table border="1">
    <tr>
        <td bgcolor="orange">
           <?php // Hier kommt das Login hin   
              echo "Login: <br>";
              echo "<br>";
              echo "<form action=\"gb.php\" method=\"post\">";
              echo "<table border=\"1\">";
              echo "<tr>";
                echo "<td>";
                               echo "Member: ";
                               echo "<input type=\"text\" name=\"member\">";
                echo "</td>";
                echo "</tr>";
                echo "<tr>";
                echo "<td>";
                               echo "Passwort: ";
                               echo "<input type=\"password\" name=\"passwort\">";
                echo "</td>";
                echo "</tr>";
                echo "</table>";
                echo "<br>";
                echo "<input type=\"submit\" name=\"einloggen\" value=\"Login\">";
              echo "</form>";
              
                          
           
           ?>
           
             
        </td>
        <td width="200%" bgcolor="yellow">
           <?php // Hier kommt das Gästebuch ////////////////////////////////////////////////////////
                  echo "<div align=\"center\">";
                  echo "<h1>G&auml;stebuch</h1> <br>";
             
               
               
        
       
          //mysql_query($gibdat) or die(mysql_error()); // Daten werden an die Tabelle geschickt
         // $user_result=mysql_query($gibuser) or die (mysql_error()); // Login Daten werden an die Datenbank geschickt
          $result=mysql_query($holdat1) or die (mysql_error()); // Daten werden geholt
          echo "Anzahl der GB Eintr&auml;ge: ".mysql_num_rows($result). "<br>"; // Gibt die Anzahl der Einträge aus
         
          echo "-----------------------------------------------------------------";
          while($row = mysql_fetch_assoc($result)) // In $row werden die Inhalte geholt und gesichert
          {
           echo "<br>";
           echo " ". $row['name'] . " schrieb um ".$row['datum'] . " folgendes: <br>";
           echo "<br>";
           echo "<br>";
           echo " ". $row['nachricht']. "<br>";
           echo "----------------------------------------------------------------- <br>";
          }
          formular_eing(1);
          if($_POST['eintragen'])
            $eing_aen=pflicht_eing($_POST['name'],$_POST['betreff'],$_POST['eintrag'],$eing_aen);
          
           
           
           echo "</div>";
           ?>         
        </td>
    </tr>
 </table>
</body>
</html>

Ist natürlich noch nicht fertig. aber dass zumindest schon mal die daten an die datenbank gehen
 
Hi,

bin noch relativ PHP Anfänger also sorry falls ich mist verzapfe aber muss man nicht, wenn man Variablen an eine Funktion übergibt, das so schreiben:

function meine_funktion(&$wert1, &$wert2,....)

Also bei mir war das jedenfalls so....
 
Zurück