Problem mit links.php

A

Augustiner

Aktives Mitglied
Thread Starter
Dabei seit
25.10.2004
Beiträge
143
Reaktionspunkte
0
Hallo zusammen,
bin absoluter PHP-Anfänger und bräuchte mal eure Hilfe.
Bei dem Script handelt es sich um eine einfach Linkliste.
D.h. einfach URL und Titel eines Links in ein Script eingeben, das es dann in meine MySQL-Datenbank schreibt.
Dabei hab ich nun folgenden Code geschrieben. Das Problem ist nur, dass nichts (bzw. nur leere Felder) in die Db eingetragen wird / werden.
Hier der Code:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<?php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<?php
  /* Verbindungsaufbau */
  $verbindung = mysql_connect("xxx","xxx","xxx");
 
  /* Auswahl der Db */
  mysql_select_db("datenbank");
 
  /* Daten schreiben in Tabelle links */
  mysql_query("INSERT INTO links (url,beschreibung) VALUES ('$link','$descr')");
 
  /* Verbindungsende */
  mysql_close($verbindung);
?>

<form action="write.php" method="post" name="eingabe">
  <table border="0">
    <tr>
      <th colspan="3" class="headline"> Post a new Link!
    </tr>
    <tr>
      <th class="linie" colspan="3"></th>
    </tr>
    <tr>
      <td class="Header">URL: </td>
      <td rowspan="2" class="linehh"></td>
      <td><input name="link>" type="text" value="<?php $link ?>" size="50" />
      </td>
    </tr>
    <tr>
      <td class="Header">Beschreibung:</td>
      <td><input name="descr" type="text" value="<?php $descr ?>" size="50" /></td>
    </tr>
    <tr>
      <td><input name="senden" type="submit" value="add" /></td>
    </tr>
  </table>
</form>

</body>
</html>

Für ein wenig Hilfe wäre ich euch sehr dankbar!

Gruß
Augustiner
 
Das kann so nicht funktionieren. Dein Scriptablauf ist so:

1. DB Verbindung öffnen
2. In die Datenbank Variablen schreiben, die keinen Inhalt haben
3. Formular darstellen
4. Nach Abschicken das Script write.php aufrufen und alles wieder von vorne

Du musst:

1.) die Daten aus dem Post Array des Formulars übernehmen
2.) nur in die DB schreiben, wenn auch Daten vorliegen

Beispielhaft für eine Variable:

HTML:
if (isset($_POST['link'])) {
   $link = $_POST['link'];
   mysql_query("INSERT INTO links (url,beschreibung) VALUES('$link','$descr')");
}


So fkt. es prinzipiell erstmal. Ich möchte aber noch anmerken, dass:

• man Formulardaten nicht ungeprüft in eine Datenbank schreiben sollte (Sicherheit, Validität)
• Du 2 Doctypes/HEADS in Deinem Dokument hast
• der Verbindungsaufbau zur DB in eine externe PHP Datei ausgelagert werden sollte, die per INCLUDE eingebunden wird

Ich tu übrigens die PHP Teile immer (sofern es geht) an den Anfang der Datei. Die Variablen stehen Dir im HTML Bereich per <?=$varName?> zur Verfügung. Sonst wird es sehr unübersichtlich ;)

2nd
 
Ich nochmal, ich habe Deine Seite gerade mal umgebaut. Irgendwas stimmt mit Deiner Tabelle nicht, der hat die Variablen aus dem Post Array nicht übernommen, keine Ahnung warum. Ich habe die Tabelle rausgenommen, das musst Du selber nochmal umbauen und im Netz nachlesen, ich habe leider keine Zeit mehr.

Jedenfalls funktioniert es jetzt erstmal:

PHP:
<?php
    if (isset($_POST["link"]) && $_POST["link"] != '') {
       
        /* Verbindungsaufbau */
        $verbindung = mysql_connect("xxx","xxx","xxx");
     
        /* Auswahl der Db */
        mysql_select_db("datenbank");
      
        $link_tmp = $_POST["link"];
        $desc_tmp = $_POST["descr"];
        echo "Link = ".$link_tmp;
        echo "Desc = ".$desc_tmp;
   
        mysql_query("INSERT INTO links (url,beschreibung) VALUES('$link_tmp','$desc_tmp')");
    } else echo "Bitte einen Link eingeben";

   /* Verbindungsende */
  ##mysql_close($verbindung);
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Untitled Document</title>
</head>

<body>
    <form action = "formular-db.php" method = "post">
          Link: <input name="link" type="text" value="<?=$link_tmp?>" size="50" /><br />
          Description:<input name="descr" type="text" value="<?=$desc_tmp?>" size="50" />
        <input type="submit" value="add" />
    </form>
</body>

Unten ist die Datei angehängt. Ich habe es übrigens umbenannt in "formular-db.php" und Deine Datenbank Verbindung muss eingetragen werden.


2nd
 
Zuletzt bearbeitet:
Hey vielen Dank schonmal. :)
Jedoch bekomme ich leider einen Parser-Error:
Parse error: parse error, unexpected T_STRING in /var/www/web53/html/bassment/write.php on line 2

Weiterhin hab ich das mit den Links schonmal geschafft; also das Script war so ähnlich wie das von mir gepostete (s.o.). Gibts also noch ne Möglichkeit?
 
Hmm, wo kriegst Du den PARSE ERROR? Mit meinem oder Deinem Dokument? Ich habe keinen, bei mir sind nur die DB Zugriffe auskommentiert... Nimm das File, dass ich angehängt habe.

Und was für eine Möglichkeit brauchst Du noch?

2nd
 
ich bekomme den Fehler in meinem File. Deines kann ich nicht runterladen. Zugriff verwehrt :rolleyes: .. Keine Ahnung woran das liegt. Es kommt das Logi-Fenster, ich logge mich ein und dann kommt es wieder.

Das Orginalscript von mir (das mal funktioniert hat), habe ich von einer Shoutbox abgeleitet. Stör dich nicht an der fehlenden Ausgabe; die hab ich zur Vereinfachung mal rausgemacht.
Auf jeden Fall funktionierte das Script einwandfrei. Jedoch ist das Folgende eine bearbeitet Version, die eben (auch) nicht mehr funktioniert. Ich weiß aber, als ich das Orginal vor rund 2 Monaten geschrieben hab, dass das eigentlich auch so ausgesehen hat.

Der Code:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php 
	/* Verbindungsaufbau (= $link) mit PHP MyAdmin */
	$link = mysql_connect("xxx","xxx","xxx");
	
	/* Auswahl der Datenbank */
	 mysql_select_db("db");
	 
	/* Anfrage definieren */
	$anfrage = mysql_query("SELECT * FROM links");
	
	if($linkbeschreibung!="" && $linkurl!=""){
	mysql_query("INSERT INTO links (beschreibung, url) VALUES('$linkbeschreibung', '$linkurl')");
	}
	
	/* VerbindungsENDE (= $link) */
	mysql_close($link);
?>
</head>

<body>
	<table border="0">
	<form action="<?=$PHP_SELF?>" method="post" name="eingabe">
	<tr>
	 <td><table border="0" height="1" width="100%" bgcolor="#000000"></table></td>
	 <td>Post new Link:</td>
	</tr>
	 <tr>
	  <th><td>Link Titel:</td></th>
	  <th><td><input name="linkbeschreibung" type="text" value="<?php $linkbeschreibung ?>" size="20"></td></th>
	 </tr>
	 <tr>
	  <th><td>Link URL:</td></th>
	  <th><td><input name="linkurl" type="text" value="http://<?php $linkurl ?>" size="20"></td>
	      <td><input type="submit" name="senden" value="go for it!"></td></th>
	 </tr>
	 <tr>
	 asda
	 </tr>
	 </table>
	 </form>
	
	<br>
	<br>
	Hier fängt die Ausgabe der Datenbank an:
	<br>
	<br>
	
	

</body>
</html>
 
Augustiner, ich habe oben schon geschrieben, dass Du Deine Werte aus dem Formular aus dem superglobalen Array $_POST auslesen musst. Du kannst nicht direkt auf diese zugreifen, wenn Du das Formular mit action="POST" abschickst.

$_POST["varName"]

ist Dein Freund. Du kannst auch aus meinem Script oben das Zeug rauskopieren (APFEL-V -> APFEL-C).

Unter Umständen fkt. das Auslesen direkt per $varName, wenn die Formularvariablenname dieselben Namen haben, dafür muss aber REGISTER_GLOBALS auf ON stehen. Das ist aber schon länger aus Sicherheitsgründen obsolet und meiner Meinung nach auch tierisches Gehacke/Fehlerquelle. Wenn man Variablen mit action = "post" in das Array $_POST übergibt, sollte man dieses prüfen, die Variablen von dort dann übernehmen und dann in die Datenbank tun. Wahrscheinlich funktioniert es wegen den REGISTER_GLOBALS bei Dir nicht (mittlerweile aus)...

2nd
 
Zuletzt bearbeitet:
Ja ok, der Code funktioniert nun.
So wie du's grad beschrieben hast, hab ich's auch gemacht.
Aber nun funktioniert die Ausgabe auch nicht mehr.
Wie müsste ich das machen?
 
hat sich erledigt.
Vielen Dank nochmal!
 
Zuletzt bearbeitet:
Ich nochmal :(
Hab nun ein neues Problem.
Ich möchte nun noch zwei href-Links hinzufügen mit den Titeln "edit" und "delete". Diese beiden Links sollen jeweils neben einem Eintrag stehen stehen.
* Edit soll den Datensatz an edit.php schicken und die einzelnen Spalten dann dort als values in ein Formular schreiben.
* Delete soll einfach den ganzen Datensatz löschen
Nun weiß ich aber absolut gar nicht wie ich an diese Aufgabe herangehen muss, bzw. wie ich es mit einem href-Tag überhaupt schaffe eine bestimmte php-Funktion ausführen zu lassen.

Und hier der Code von write.php:
PHP:
<?php /* Verbindungsaufbau */
    
    /* Variable für Benutzerdaten */
    mysql_connect("xxx","xxx","xxx");
	
	
  /* Auswahl der Datenbank */
  
    /* Db-Name */	
	$db = "dbname";
	/* Db-select */
	mysql_select_db($db);
  
  function eintragen() {

	
	
  /* Kriterien für Eintrag in die Datenbank */	
    
	
	$url = $_POST["link"];
	$titel = $_POST["descr"];
	mysql_query("INSERT INTO links (url,beschreibung) VALUES ('$url','$titel')");
	echo "Der Link (<a href='$url' target='_blank'>$titel</a>) wurde erfolgreich hinzugefügt!";
	}
	
	    if (isset($_POST["link"]) && $_POST["link"] && isset($_POST["descr"]) && $_POST["descr"] != '')
	  { eintragen(); }
	  
	if (isset($_POST["link"]) && $_POST["link"] == '' && isset($_POST["descr"]) && $_POST["descr"] == '')
	  { echo "Du hast weder eine <b>URL</b> noch einen <b>Titel</b> eingegeben!<br>Bitte fülle beide Felder aus!
	         <br /><br /><a href='index.php'><< back</a>"; }
	  
	if (isset($_POST["link"]) && $_POST["link"] == '' && isset($_POST["descr"]) && $_POST["descr"] != '')
	  { echo "Es wurde keine <b>URL</b> angegeben!<br>Zum Abschicken des Formulars musst du beide Felder ausfüllen
	         <br /><br /><a href='index.php'><< back</a>"; }
	  
	if (isset($_POST["link"]) && $_POST["link"] != '' && isset($_POST["descr"]) && $_POST["descr"] == '')
	  { echo "Es wurde kein <b>Titel</b> angegeben!<br>Zum Abschicken des Formulars musst du beide Felder ausfüllen
	         <br /><br /><a href='index.php'><< back</a>"; }
 
 $abfrage = "SELECT * FROM links ORDER BY beschreibung";
 $ergebnis = mysql_query($abfrage);
  $anzahl = mysql_num_rows($ergebnis);
  
  
  
 
 
  
  /* Verbindungsende */	  
  ##mysql_close($connect);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>(( SHOW LINKS ))</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	color: #000000;
	font-size: 11px;
	padding-left: 10px;
}
.tisch {
	font-weight: bold;
}
.trtr {
	padding-left: 100px;
}
a {
	font-size: 10px;
	color: #FF0CC;
	font-weight: bold;
}
a:link {
	text-decoration: none;
	color: #FF00CC;
}
a:visited {
	text-decoration: none;
	color: #FF00CC;
}
a:hover {
	text-decoration: underline;
}
a:active {
	text-decoration: none;
}
-->
</style>
</head>

<body>
<br />
<br />
<br />
<?php echo "In der Datenbank befinden sich bereits <b>$anzahl</b> Links."?>
<br />
<br />
<br />
<table border="0">

  <tr>
    <td></td>
	<td class="tisch">TITEL</td>
	<td width="50px"></td>
	<td class="tisch">URL</td>
	<td width="50px"></td>
	<td class="tisch">VISIT</td>
  </tr>
  
  <tr>
    <td height="5px"></td>
  </tr>
  
<?php 
  while($row = mysql_fetch_object($ergebnis))
  { 
?> 
  <tr>
    <td>>></td>
	<td><?php echo $row->beschreibung;?></td>
	<td width="50px"></td>
	<td><font color="#666666"><?php echo $row->url;?></font></td>
	<td width="50px"></td>
	<td><a href='http://<?php echo $row->url;?>' target='_blank'>click</a></td>
	<td width="50px"></td>
	<td><a href="edit.php?edit <font color="#666666">|</font> delete</td>
<?php 
  }
?>
  <tr>
    <td><br /><a href="index.php">>> add new link</a></td>
  </tr>
  
</table> 
<br />
<br />

</body>
</html>

Für euren Rat wär ich echt dankbar! :)

P.S:
Tschuldigung für den chaotischen Code; den wollte ich erst am Schluss ordnen =)
 
Zuletzt bearbeitet:
Zurück
Oben Unten