Mit PHP scirpt in MySql DB schreiben

AcidR4in

Ensign
Registriert
Juli 2005
Beiträge
175
hi,

hab volgendes problem. hab ein script mit welchen man etwas in eine db. schreiben sollte nur funktioniet das aus mir nicht ersichtlichen gründen nicht

send.php
PHP:
<HTML>
<HEAD>
<TITLE>titel</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">


<FORM METHOD=POST ACTION="add.php">
<input type="hidden" name="id" value="NULL">
<TABLE>
<TR height="20">


<td><SELECT NAME="npc">
<option value="Medusa">Medusa</option>
<option value="Swarmlings">Swarmlings</option>
<option value="Bees">Bees</option>
</SELECT></td>
<td><SELECT NAME="sector">
<option value="Lasolia">Lasolia</option>
<option value="Endeve">Endeve</option>
<option value="Faafra">Faafra</option>
</SELECT></td>
<td><input name="pos" type="text" maxlength="5"></td>
<td><input name="cloaked" type="checkbox" value=""></td>
<td><INPUT TYPE="text" NAME="comment"></td>
<td><INPUT TYPE="submit" value="Report NPC"></td>
</tr>
</TABLE>
<label></label>
</FORM>

</BODY>
</HTML>

add.php
PHP:
<?
$DBhost = "xxx";
$DBuser = "xxx";
$DBpass = "xxx";
$DBName = "xxx";
$table = "npc_w";
mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");

mysql_select_db("$DBName") or die("Unable to select
database $DBName");

$sqlquery = "INSERT INTO $table
VALUES('$npc','$sector','$pos', '$cloaked', '$date', '$comment')";

$results = mysql_query($sqlquery);

mysql_close();

?>

meine tabelle
Code:
CREATE TABLE `npc_w` (
  `id` int(5) NOT NULL auto_increment,
  `npc` varchar(20) NOT NULL,
  `sector` varchar(20) NOT NULL,
  `pos` varchar(8) NOT NULL,
  `cloaked` binary(1) NOT NULL,
  `date` datetime default NULL,
  `comment` varchar(120) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

-- 
-- Daten für Tabelle `npc_w`
-- 

INSERT INTO `npc_w` VALUES (1, 'Medusa', 'Lasolia', '[5,5]', 0x30, '2007-03-08 01:21:09', 'asdsad
INSERT INTO `npc_w` VALUES (2, 'Swarmlings', 'Endeve', '[5,2]', 0x31, '2007-03-08 01:22:12', 'afsdfsdfsdf');

Weiters habe ich noch ein paar fragen wie kann ich machen dass ich in date die momentaqne serverzeit reinschreibe?

und gibt es eine möglichkeit rows in der datenbank via script zu löschen wenn ja wie?
 
Für Serverzeit machste ein feld DATE oder TIMESTAMPoder DATETIME und der Wert der aktuellen Zeit ist NOW().

Ansonsten sehe ich, dass die Feldnamen fehlen:

PHP:
$sqlquery = "INSERT INTO $table
VALUES('$npc','$sector','$pos', '$cloaked', '$date', '$comment')";

sollte dann eher heissen

PHP:
$sqlquery = "INSERT INTO $table (feld1,feld2,feld3,feld4....,aktuellezeit)
VALUES('$npc','$sector','$pos', '$cloaked', '$date', '$comment','NOW()')";

falls irgendwas mal nicht funktioniert kannst Du auch

PHP:
echo mysql_error();

nutzen.

mysql_error - Liefert den Fehlertext der zuvor ausgeführten MySQL Operation
 
Was auch immer mal hilft ist sich das SQL Statement ausgegeben zu lassen um zu sehen ob alles richtig gefüllt ist.
PHP:
echo $sqlquery

BTW: ist bei dir eventuell register_globals = off in der php.ini eingeschalten?

Wenn dem so wäre müstest du das SQL Statement so zusammenbauen:
PHP:
$sqlquery = "INSERT INTO $table (feld1,feld2,feld3,feld4....,aktuellezeit) 
VALUES('$_POST['npc']','$_POST['sector']','$_POST['pos']', '$_POST['cloaked']', '$_POST['date']', '$_POST['comment']','NOW()')";

Es empfiehlt sich übrigends die übergebenen Paramter immer so abzufragen (sicherheitstechnisch)


Edit: Natürlich gibt es eine Möglichkeit Zeilen aus der Datenbanktabelle zu zu löschen, dafür reicht ein einfaches Delete Statement:

PHP:
$sqlQuery = "Delete from $table where id = '3';";
$result = mysql_query($sqlQuery);
Damit löscht du den Datensatz mit der ID 3 aus der Datenbank. Du darfst nur nie vergessen die where Bedingung anzugeben, sonst löscht du die gesamte Tabelle.
 
Zuletzt bearbeitet: (Hatte die 3. Frage übersehen)
danke euere hilfe hat mich weiter gebracht nur habe ich trotzdem folgendes problem :

er will einfach nicht in die datenbank schreiben, das mysql statement sieht so aus

Code:
INSERT INTO npc_w (npc,sector,pos,cloaked,date,comment) VALUES('Medusa','Lasolia','sadas', '', 'NOW()', 'adsasdsdsad')

nach der ausführung des scripts ist aber die zeile nciht in der datenbank, ich hab auch versucht das statment auch mit phpmyadmin einzufügen und das hat aber funktioniert

woran kann das liegen, mysql errors gibts auch keine
 
So hab das Formular mal eben lokal nachgebaut, bei mir funktioniert es, wenn ich folgendem Quellcode zugrunde lege:

PHP:
<HTML>
<HEAD>
<TITLE>titel</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">


<FORM METHOD="POST" ACTION="add.php">
<input type="hidden" name="id" value="NULL">
<TABLE>
<TR height="20">


<td><SELECT NAME="npc">
<option value="Medusa">Medusa</option>
<option value="Swarmlings">Swarmlings</option>
<option value="Bees">Bees</option>
</SELECT></td>
<td><SELECT NAME="sector">
<option value="Lasolia">Lasolia</option>
<option value="Endeve">Endeve</option>
<option value="Faafra">Faafra</option>
</SELECT></td>
<td><input name="pos" type="text" maxlength="5"></td>
<td><input name="cloaked" type="checkbox" value=""></td>
<td><INPUT TYPE="text" NAME="comment"></td>
<td><INPUT TYPE="submit" value="Report NPC"></td>
</tr>
</TABLE>
<label></label>
</FORM>

</BODY>
</HTML>
hier haben bei der Method Angabe die "" gefehlt.
Du solltest noch bei der Checkbox einen Wert für value setzen, da sonst bei der Auswahl des Feldes genau das selbe in die DB geschrieben wird wie wenn es nicht ausgewählt wird.

PHP:
<?
$DBhost = "xxx";
$DBuser = "xxx";
$DBpass = "xxx";
$DBName = "xxx";
$table = "npc_w";
mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");

mysql_select_db("$DBName") or die("Unable to select database $DBName");

$sqlquery = "INSERT INTO ". $table ." (npc,sector,pos,cloaked,date,comment) ";
$sqlquery .= " VALUES('". $_POST['npc'] ."','".$_POST['sector']."','".$_POST['pos']."', '".$_POST['cloaked']."', NOW(), '".$_POST['comment']."')"; 


echo $sqlquery;
$results = mysql_query($sqlquery);

mysql_close();

?>
Habe bei mir register_globals = Off, daher mit $_POST gelöst, sollte aber auch mit register_globals = On problemlos funktionieren.
 
Zuletzt bearbeitet:
Zurück
Oben