Daten werden nicht in DB geschrieben

counteract

Erfahrenes Mitglied
Hallo!

Ich habe folgendes Problem:

Mit diesem Script sollen Daten in eine Datenbank geschrieben werden und die UserID soll beim senden des Formulars auch in die DB geschrieben werden, jodoch kommt nichts in der DB an und die UserId wird wahrscheinlich auch nicht mit reingeschrieben.

Kann mir jemand bei diesem Problem helfen? Bitte!

PHP:
<?php 
session_start ();
// Datenbankverbindung aufbauen  
$connectionid = mysql_connect ("localhost", "", "");  
if (!mysql_select_db ("", $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}  

$sql = "SELECT * FROM `benutzerdaten` WHERE `Id` = '".$_SESSION['session_user_id']."'"; 
$result = mysql_query($sql);  
$row = mysql_fetch_array($result);

echo '<input type="hidden" name="user_id" value="'.$row['Id'].'"><br />';  

if (isset($_POST['schreiben']))
{
	$pname=$_POST['pname'];
	$pbeschreibung=$_POST['pbeschreibung'];
	$pbeginn=$_POST['pbeginn'];
	$pende=$_POST['pende'];
	$pstunden=$_POST['pstunden'];
	$stundensatz=$_POST['stundensatz'];
        $user_id=$_POST['user_id'];
	$projekt_id=$_POST['projekt_id'];
	$berufsform=$_POST['berufsform'];
	$branche=$_POST['branche'];
	$standorte=$_POST['standorte'];
	$vertragsart=$_POST['vertragsart'];
	$weitere_informationen=$_POST['weitere_informationen'];
	
	$query = "INSERT into projekt_gep ( pname, pbeschreibung, pbeginn, pende, pstunden, stundensatz, user_id, projekt_id, berufsform, branche, standorte, vertragsart, weitere_informationen ) 
	VALUES ('" . $pname . "','" . $pbeschreibung . "','" . $pbeginn . "','" . $pende . "','" . $pstunden . "','" . $stundensatz . "','" . $user_id . "','" . $projekt_id . "','" . $berufsform . "','" . $branche . "','" . $standorte . "','" . $vertragsart . "','" . $weitere_informationen . "')"; 
	
 	mysql_query($query, $db);
 	mysql_close();
 	echo '<script language="JavaScript">window.location=("kunden_portfolio.htm");</script>';
}

?>

MfG

Counteract
 
PHP:
<?php
# [...]
$connectionid = mysql_connect ("localhost", "", "");
# [...]
mysql_query($query, $db);
?>
Da stimmt doch was nicht?

Weiterhin wäre ein mysql_error wahrscheinlich hilfreich.
 
Das problem ist das kein Fehler ausgegeben wird!

Was meinst du damit das da was nich stimmt? Ich habe nur die Datenbankdaten herausgenommen.

Bitte helft mir! :(
 
Du verwendest im mysql_query $db als Verbindungskennzeichnung.

Die Verbindungskennung in deinem Script ist aber $connectionid.
 
Jap jetz funktioniert der Teil! Danke schonmal!

Kannst du mir vielleicht noch sagen warum das mit der User Id nicht funktioniert?

Diese soll ja mit in das Formular geschrieben werden und dann in die Tabelle mit eingetragen werden, joch klappt dies überhaupt nicht...

Wäre echt toll wenn du mir dabei helfen würdest, denn ich bin nicht so der php Spezi!
 
Also so wie es in deinem Script steht, kann es nicht funktionieren, da es nicht Teil eines Formulars ist und $_POST kann ja nur übermittelt werden, wenn es auch durch ein Formular abgeschickt wurde.

Pack die Abfrage der ID doch einfach VOR dein Insert.

PHP:
<?php 
session_start ();
// Datenbankverbindung aufbauen  
$connectionid = mysql_connect ("localhost", "", "");  
if (!mysql_select_db ("", $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}  

if (isset($_POST['schreiben']))
{
    $pname=$_POST['pname'];
    $pbeschreibung=$_POST['pbeschreibung'];
    $pbeginn=$_POST['pbeginn'];
    $pende=$_POST['pende'];
    $pstunden=$_POST['pstunden'];
    $stundensatz=$_POST['stundensatz'];
    $projekt_id=$_POST['projekt_id'];
    $berufsform=$_POST['berufsform'];
    $branche=$_POST['branche'];
    $standorte=$_POST['standorte'];
    $vertragsart=$_POST['vertragsart'];
    $weitere_informationen=$_POST['weitere_informationen'];
    
    $sql = "SELECT * FROM `benutzerdaten` WHERE `Id` = '".$_SESSION['session_user_id']."'"; 
$result = mysql_query($sql);  
$row = mysql_fetch_array($result);

    $query = "INSERT into projekt_gep ( pname, pbeschreibung, pbeginn, pende, pstunden, stundensatz, user_id, projekt_id, berufsform, branche, standorte, vertragsart, weitere_informationen ) 
    VALUES ('" . $pname . "','" . $pbeschreibung . "','" . $pbeginn . "','" . $pende . "','" . $pstunden . "','" . $stundensatz . "','" . $row['Id'] . "','" . $projekt_id . "','" . $berufsform . "','" . $branche . "','" . $standorte . "','" . $vertragsart . "','" . $weitere_informationen . "')"; 
    
     mysql_query($query, $connectionid);
     mysql_close();
     echo '<script language="JavaScript">window.location=("kunden_portfolio.htm");</script>';
}

?>

Weiterhin solltest du dich über SQL Injektionen informieren und die Daten dementsprechend validieren.
http://de.wikipedia.org/wiki/SQL_Injektion
http://de3.php.net/mysql_real_escape_string

Außerdem würde ich statt dieser JavaScript Weiterleitung auf die PHP Variante setzen:
PHP:
header("Location: file.html");
http://de3.php.net/header
 
"Weiterhin solltest du dich über SQL Injektionen informieren und die Daten dementsprechend validieren."

Sorry aber das verstehe ich irgendwie nich so richtig! Hab mir grad die 2 Seiten angeschaut aber so richtig steige ich da leider nich durch!

Was meinst du denn damit genau? Was sollte ich genau ändern?
 
Sämtliche Variablen die du aus dem Formular bekommst, könnten deine SQL Befehle abändern bzw. PHP Code einfügen. Dadurch könnten Angreifer beliebige Daten aus deiner Datenbank rausholen oder andere Befehle einfügen.
Deshalb solltest du sämtliche Eingaben mit mysql_real_escape_string maskieren (in deinem Fall also sämtliche $_POST Variablen, die in deiner Insert Anweisung auftauchen).
 
Danke für den Tipp! Ich werde mich mit dem Thema mal ausgiebtig beschäftigen!


Kannst du mir vielleicht noch bei diesem Problem helfen, denn bei dem Problem weis ich auch nich so genau wie ich es lösen soll.

Ich will das man sich ein User die Daten ausgeben lassen kann. Dabei soll erst eine Liste erzeugt werden und dann soll er per link auf seine Daten kommen und sie bearbeiten können.

In einem TestScript bin ich bisher soweit gekommen:

PHP:
<?
$dbhost="localhost"; 
$mydb=""; 
$dbuser=""; 
$dbpasswd="";

$db=mysql_connect($dbhost, $dbuser, $dbpasswd); 
mysql_select_db($mydb, $db);

 if ($result = mysql_query ("SELECT id, pname FROM projekt_gep"))
 {
    while ($line = mysql_fetch_array ($result, MYSQL_ASSOC))
    {
    echo "<a href=test.php?Id=" . $line["Id"] . ">" . $line["pname"] . "</a>","<br>";
    }
 }
?>

Aber wie kann ich es machen, das man die Liste mithilfe der UserID erzeugt?
 
Ich komme nicht wirklich mit worauf du hinauswillst?

Die UserID solltest du am besten in einer WHERE Bedingung in der SQL Abfrage verwenden, aber mehr als diese Antwort kann ich dir mit dieser Fragestellung auch nicht geben...
 
Zurück