Fehler in Linkliste-Script


kannaum

Mitglied
hi,

ich habe vor kurzem eine linkliste programmiert
das ganze seht ihr hier:
www.iso.bplaced.net
aber es sind noch ein paar fehler drin
zuerst mal was das script kann(können sollte)
es zeigt die links mit einer beschreibung an
wenn mehr als 10 links da sind wird oben ein weiter button erstellt
das geht alles
aber dann sollte wenn man auf linkeitnragen geht per jquery ein fenstern mit dem eintragen aufgehen
dort kann man dann link und beschreibung eingeben
die beschreibung darf nciht länger als 70 zeichen sind und die laufen obenbei per javascript mit
bei dem melden und dem scuhen sollte auch ein kästechen per jquery aufegehen
aber das ganze geht leider nciht

sorry für den langen code (ca. 700zeilen) aber ich kann php dateien leider nciht im anhang hochladen

zuerst die index.php die die linkliste anzeigt:

PHP:
<?
include ("einstellungen.php"); 
  $dz = mysql_connect($host, $user, $pass);
  mysql_select_db($database, $dz);
include ("class.AJAX.php");
$AJAX = new AJAX();
?>
<!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 content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
    <style type="text/css">
      #eintragen
        {
          padding-top: 10px;
          color: #FFFFFF;
          text-align: center;
          height: 200px;
          width: 500px;
          background-color: black;
		  display: none;
        }
	#melden
	    {
          color: #FFFFFF;
          text-align: center;
          height: 150px;
          width: 500px;
          background-color: black;
		  display: none;
        }
	#suchen
	    {
          color: #FFFFFF;
          text-align: center;
          height: 150px;
          width: 500px;
          background-color: black;
		  display: none;
        }
	#meldendiv
	    {
        }	
	#eintragendiv
	    {
        }
	#suchendiv
	    {
        }			
    </style>
	<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
  	<script language="JavaScript"><!--
    $("#eintragendiv").click(function()
    {
    if(this.id =='eintragenlink')
    {
    if ($("#eintragen").is(":hidden"))
    {
    $("#eintragen").slideDown(500);
    }
    else {
    $("#eintragen").slideUp(500);
    }
	}
  });
$("#meldendiv").click(function()  
	 {
	 if(this.id =='meldenlink')
	 {
	  if ($("#melden").is(":hidden"))
	  {
	     $("#melden").slideDown(500);
		 }
		 else {
		 $("#melden").slideUp(500);
		 }
		 } 
	 
     });
$("#suchendiv").click(function()  
	 {
	 if(this.id =='suchenlink')
	 {
	  if ($("#suchen").is(":hidden"))
	  {
	     $("#suchen").slideDown(500);
		 }
		 else {
		 $("#suchen").slideUp(500);
		 }
		 } 
	 
     });
	function zaehlen () {
	var laenge = document.formular.beschreibung.value.length;
	if (laenge > 70) {
	document.formular.beschreibung.value = document.formular.beschreibung.value.substring(0,160);
	document.formular.feld.value = 0;
	}
	else {
	document.formular.feld.value = 70 - laenge;
	}
	}
	//--></script>
	<?
	$AJAX->addJavaScript();
	?>
  <head>
  <body>
    <table border="1" style="width: 500px;">
      <?
        $gesamt = mysql_num_rows(mysql_query("SELECT * FROM linkliste"));
        if(isset($_GET['s']))
          {
            $start = $_GET['s'];
          }
        else
          {
            $start = 0;
          }
        if(($start+$intervall) > $gesamt)
          {
            $intervall = $gesamt - $start;
            $mehr = 0;
          }
        else
          {
            $mehr = $start + $intervall;
          }
       $query = "SELECT * FROM linkliste LIMIT $start, $intervall";
       $sql = mysql_query($query);
      ?>
      <tr>
        <td colspan="2">
          <b>Die Linkliste enth&auml;lt <?= $gesamt ?> Link(s), dies sind die Links Nummer <?= $start + 1?> bis <?= $start + $intervall?><br />
          <? if($mehr>0){ ?><a href="index.php?s=<?= $mehr ?>">Weiter</a></b><? } ?>
        </td>
      </tr>
      <?
        while($ds = mysql_fetch_array($sql))
          {
            $link = $ds['link'];
            $beschreibung = $ds['beschreibung'];
			$id = $ds['id'];
            echo "<tr>
			        <td style:'width: 20px;' align='center'>$id</td>
                    <td><a href=\"$link\"  target='_blank'>$link</a></td>
                  </tr>
				  <tr>
				    <td colspan='2'>$beschreibung</td>
				  </tr>";
          }
      ?>
    </table>
	<div id="eintragendiv">
	<p id="eintragenlink">Eintragen</p>
	</div>
    <div id="eintragen">
	<p>Ihren Link eintragen:</p>
      <form action="auswertung.php" method="post" enctype="text/plain" name="formular">
        Ihr Link:
        <input name="link" value="http://" style="width: 480px;"/>
        Ihre Beschreibung (Noch <input name="feld" value="70" size="2" maxlength="2" /> Zeichen!):
        <textarea name="beschreibung"  style="width: 435px;" onchange="javascript:zaehlen()" onkeydown="javascript:zaehlen()" onkeyup="javascript:zaehlen()"></textarea>
        <input type="submit" value="OK" />
      </form>
    </div>
	<div id="meldendiv">
	<p id="meldenlink">Melden</p>
	</div>
	<div id="melden">
	<?=$meldentext ?>
	   <form action="melden.php" method="post">
        Die id des toten Links:
        <input name="id" style="width: 40px;"/>
        <input type="submit" value="Melden!" />
      </form>
	</div>
	<div id="suchendiv">
	<p id="suchenlink">Suchen</p>
	</div>
	<div id="suchen">
	<?
    $AJAX->displaySearchForm();
    echo '<br />';
    $AJAX->displayResultIframe();
    ?>
	</div>
  </body>
</html>





dann die auswertung.php die den link und die beschreibung in die db schreibt
PHP:
<?
include ("einstellungen.php"); 
  $dz = mysql_connect($host, $user, $pass);
  mysql_select_db($database, $dz);
?>
<!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 content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
  </head>
  <body>
    <?
      $link = trim($_POST['link']);
	  $linkaufteilung = parse_url($link);
	  $titel = $linkaufteilung['host'];
      $beschreibung = substr(trim($_POST['beschreibung']), 1, 70);
      if($link == ''||$beschreibung == '')
        {
          echo 'Sie müssen alle Felder ausfüllen!<br />';
          echo '<a href="index.php">Zurück....</a></body></html>';
          die();
        }
      $query = "SELECT * FROM linkliste WHERE link LIKE '$link'";
      $sql = mysql_query($query);
      if(mysql_fetch_array($sql))
        {
          echo 'Ihr Link ist schon vorhanden!<br />';
          echo '<a href="index.php">Zurück....</a></body></html>';

          die();
        }
      $query = "INSERT INTO linkliste (titel, link, beschreibung) VALUES ('$titel', '$link', '$beschreibung')";
      mysql_query($query);
      echo 'Ihr Link wurde erfolgreich eingertragen!<br />';
      echo '<a href="index.php">Zurück....</a>';
    ?>
  </body>
</html>



dann die einstellung.php wo ich wichtige daten ausgelagert habe um den umgang mit dem script zu vereinfachen
PHP:
<?
//Mysql-Angaben
//Host
 $host = "";
 //Benutzer
  $user = "";
  //Passwort
  $pass = "";
  //Datenbank
  $database = "";
  
 //Melden Angaben
 //Dort wird die E-Mail hingeschickt:
 $to = '[email protected]';
 //Der Betreff der E-Mail:
 $subject = "";
 //Die Nachricht der E-Mail:
 $message = "";
 
 //Wie viele Links sollen auf einer Seite angezeigt werden?
 $intervall = 10;
 
 //Text der vor dem "Melden-Formular" steht
 $meldentext = "<p>Sie haben einen toten Link gefunden, oder einen der rasistische Inhalte enthält?<br />Dann melden sie diesen bitte mit diesem Formular:</p>";
 ?>



die melden.php die zuständig ist dass man beim melden eine e-mail bekommt
PHP:
<?
include ("einstellungen.php"); 
$dz = mysql_connect($host, $user, $pass);
mysql_select_db($database, $dz);
$id = $_POST['id'];
if ($id == "") {
die('Sie müssen einen Link angeben!<br /><a href="index.php">Zurück....</a>');
}
if (!is_numeric($id)) {
die('Die Id muss eine Nummer sein!<br /><a href="index.php">Zurück....</a>');
}
$gesamt = mysql_num_rows(mysql_query("SELECT * FROM linkliste"));
if ($id <= $gesamt) {
die('Sie müssen einen korrekten Link angegeben!<br /><a href="index.php">Zurück....</a>');
}
mail ($to, $subject, $message);
?>



die class.AJAX.php für die suchmaschine (mit oop):
PHP:
<?

class AJAX
{
	private $DB;

	public function __construct()
	{
		//Globales Datenbankobjekt holen
		$this->DB = $GLOBALS['DB'];

	}
		public function addJavaScript()
	{
		//Einbinden der externen JavaScript-Datei
		echo "<script src='AJAXJavaScript.js' type='text/javascript'>";
		echo "</script>";
		//Sollte der Benutzer Javascript abgeschaltet haben, erscheint folgende Fehlermeldung
		echo "<noscript>";
		echo "<div style='border:1px solid red; background-color:white;color:red;font-weight:bold;'>";
		echo "Ohne aktiviertes Javascript lässt sich die Suchfunktion nicht benutzen!";
		echo "</div>";
		echo "</noscript>";

	}
		public function displaySearchForm()
	{

		echo "<fieldset style='margin:2px;padding:5px;width:400px;background-color:white;border:1px solid gray;'>";
		//Ergebnisauswahlliste
		echo "Ergebnisse:<br />";
		echo "<select onClick='loadEntry();' id='results' style='border:1px solid gray;width:250px;background-color:white;' size=6>";
		echo "</select><br />";
		//Textfeld für den Suchbegriff
		echo "Suchbegriff:<br />";
		echo "<input id='name' onKeyup='actualize();' type='text' value=''><br />";

		echo "</fieldset>";

	}
		public function displayResultIframe()
	{
		//Hinzufügen des IFrames
		echo "<iframe id='entryContent' src='entryContent.php' style='padding:5px;margin:2px;width:400px;border:1px solid gray;' frameborder=0></iframe>";
	}
		public function getSearchResult()
	{

		//Suchparameter aus der GET-Variablen holen
		if ((isset ($_GET['name'])) && ($_GET['name'] != ""))
		{
			$searchString = $_GET['name'];
		}
		else
		{
			//Kein Suchbegriff gesetzt -> Skript beenden.
			return false;
		}
		//Tabelle durchsuchen
		$sql = "SELECT DISTINCT id, titel, link, beschreibung FROM iso_linkliste WHERE "."titel LIKE '%".$this->DB->escapeString($searchString)."%' OR "."link LIKE '%".$this->DB->escapeString($searchString)."%' OR "."beschreibung LIKE '%".$this->DB->escapeString($searchString)."%';";
		
		//Suche ausführen
		$data = $this->DB->query($sql);
				//Wenn Datensätze gefunden wurden...
		if (count($data) == 0)
		{
			return false;
		}
		
		//Als JSON-codiertes Array zurückgeben
		echo json_encode($data);
		
	}
		public function displayEntry()
	{

		//Überprüfen, ob die Nummer des Eintrags angegeben wurde. 
		if (isset ($_GET['id']) && ($_GET['id'] != ""))
		{
			//Nummer und Suchbegriff holen
			$id = $_GET['id'];
			$search = $_GET['search'];
		}
		else
		{
			//Kein EIntrag gewählt
			echo "Kein Eintrag ausgewählt.";
			return false;
		}

		$sql = "SELECT * FROM iso_linkliste WHERE id = '".$this->DB->escapeString($id)."'";

		$result = $this->DB->query($sql);

		//Falls eine nicht vorhandene Nummer übergeben wurde.
		if (count($result) != 1)
		{
			echo "Eintrag mit der Nummer ".$id." nicht vorhanden.";
			return false;
		}

		//Überschrift ausgeben:
		echo "<div style='border-bottom:1px solid gray;'>";
		echo "<span style='color:steelblue;font-weight:bold;'>Link: ";
		$this->colorizeString($result[0]['headline'], $search);
		echo "</span>";
		echo "<br />";
		//Autorname ausgeben:
		echo "<span style='color:steelblue;'>Vollständiger Link: ";
		$this->colorizeString($result[0]['name'], $search);
		echo "</span>";
		echo "</div>";
		//HTML-Zeilenumbrüche hinzufügen
		$text = nl2br($result[0]['beschreibung']);
		//Text ausgeben
		$this->colorizeString($text, $search);

	}
		private function colorizeString($text, $searchterm)
	{

		//Stelle finden!
		$pos = stripos($text, $searchterm);

		//Wurde nichts gefunden
		if ($pos === false)
		{
			//Suchbegriff nicht gefunden: Text ausgeben
			echo $text;
		}
		else
		{
			//Text vor der gesuchten Stelle des Suchbegriffs
			echo substr($text, 0, $pos);
			echo "<span style='background-color:orange'>";
			//Suchbegriff:
			echo substr($text, $pos, strlen($searchterm));
			echo "</span>";

			//Position direkt hinter dem Suchbegriff
			$behindSearchterm = $pos +strlen($searchterm);
			//Erneut mit Reststring rekursiv aufrufen
			$this->colorizeString(substr($text, $behindSearchterm, strlen($text) - $behindSearchterm), $searchterm);
		}
	}

}
?>




Die AJAX.JavaScript.js in der wichtige javascript funktionen drin sind
Code:
function actualize() { 
   
   try { 
   // Gecko-Engines unterstuetzen XMLHttpRequest. 
   // IE benutzt ActiveX.  
 
   xmlhttp = window.XMLHttpRequest?
             new XMLHttpRequest(): 
             new ActiveXObject("Microsoft.XMLHTTP"); 
             } catch (e) { 
             
             // Fehler: der Browser kommt mit AJAX nicht klar
             alert('AJAX wird von diesem Browser nicht unterstuetzt!'); 
             return false;
            } 
  
    
  //Das xmlhttp-Objekt soll bei jeder Statusaenderung eine Funktion auslesen
  //dies ist hier die Funktion triggered()  
  xmlhttp.onreadystatechange = triggered; 
  
  //Parameter steht im Textfeld:
  var name = document.getElementById('name').value;
  
  
  //open() ruft das angegebene Skript auf und sendet per GET die Parameter
  //Vorsicht mit 127.0.0.1 oder LAN-Adresse
  //xmlhttp.open('GET','http://192.168.1.6/BUCH/scripts/AJAX/searchBlog.php?name=' + escape(name));
  xmlhttp.open('GET','http://iso.bplaced.net/searchlinkliste?name=' + escape(name));
    
  //Die Anfrage senden:
  xmlhttp.send(null);  
  
 }
 
 
 function triggered(){ 
  
   if ((xmlhttp.readyState != 4) || (xmlhttp.status != 200)) {
    return false;
    } 
   
      
     //in xmlhttp.responseText steht die Antwort des aufgerufenen Skriptes
     //als JSON Objekt
     var results = eval(xmlhttp.responseText);
        
     //Die Select Liste an eine Variabel binden
     var resultField = document.getElementById('results');
     //SelectListe leeren
     var optionCount = resultField.options.length;
    
     for (var i = 0; i < optionCount; i++){
        
        resultField.options[0] = null;
        
     }
     
     if(results.length == 0){
      return false;
      }
      
     
     //Alle gefundenen Einträge einfügen
     for (var i = 0; i < results.length; i++){
       
    	 //Neuen Eintrag erstellen
         resultField.options[i] = new Option(unescape(results[i].headline),results[i].id);
         
        }
   }
  
  
  function loadEntry(){
  
     //Ausgew?hlter Eintrag....
     var id = document.getElementById('results').value;
     var search = document.getElementById('name').value;
     //Seite in den iframe laden
     document.getElementById('entryContent').src = 'entryContent.php?id=' + id + '&search=' + search;
     
  }



die searchlinkliste.php für das durchsuchen
PHP:
<?php
require_once "class.AJAX.php";

$AJAX = new AJAX();


$AJAX->getSearchResult();

?>





und zum schluss noch die entryContent.php die die ergebnisse anzeigt
PHP:
<?php
require_once "class.AJAX.php";

$AJAX = new AJAX();
?>
<!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 content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
<head>
<body>
<?
$AJAX->displayEntry();
?>
  </body>
</html


und ncoh eine frage
wenn man einen link herauslöscht dann werden ja die id´s nciht neu vergeben
dh. es gibt dann zb. 1,2,4...
wie kann ich das ändern?

mfg
 

matze93

Gesperrt
zum herauslöschen:
du gibt es eine function, dass beim reinschreiben, die nächste noch nicht vergebene beschrieben wird und beim herauslöschen, dass sich das um eines verschiebt.

Aber ich kenn die Codes grad nicht. Ich würde aber an deiner Stelle eher überprüfen, ob etwas drin steht und wenn nicht, link nicht anzeigen und dann in der Ausgabe auch die id nicht abgeben. Dann stehen nur die Links da (eventuell kannst du noch eine Beschreibung hinzufügen).

Ich schick dir dann mal den Code meiner Linkliste...
 

saftmeister

Nutze den Saft!
Hallo,

ich nehme an, hier werden sich viele verweigern zu helfen, da du mehrere Dinge der Netiquette missachtest. Bitte bemühe dich, korrekte Rechtschreibung zu verwenden und die Satzzeichen richtig zu setzen. So genug belehrt.

Erste (Frage):

aber dann sollte wenn man auf linkeitnragen geht per jquery ein fenstern mit dem eintragen aufgehen
dort kann man dann link und beschreibung eingeben
die beschreibung darf nciht länger als 70 zeichen sind und die laufen obenbei per javascript mit
bei dem melden und dem scuhen sollte auch ein kästechen per jquery aufegehen
aber das ganze geht leider nciht

"Geht leider nicht" ist keine Fehlerbeschreibung oder eine Frage. Bitte zeige nur den Sourcecode auf den sich deine Frage bezieht. Hier hat keiner Lust, sich durch hunderte von Code-Zeilen zu wuseln, um heraus zu finden, wo dein Problem denn genau liegt.

Zweite Frage:

und ncoh eine frage
wenn man einen link herauslöscht dann werden ja die id´s nciht neu vergeben
dh. es gibt dann zb. 1,2,4...
wie kann ich das ändern?

Gar nicht. ID hat die Eigenschaft <eindeutig> sein zu müssen. Daher sollte man eine ID auch nicht mehr anpassen, nachdem sie festgelegt wurde. In MySQL wird keine Funktion angeboten, die das könnte, was du machen möchtest. Du müsstest, wenn du das wirklich brauchst, selbst implementieren. Wobei sich mir der Sinn dafür nicht erschließt.

PS: Bitte packe das nächste mal, wenn es wirklich notwendig ist, so viel Code zu posten, alles in ein ZIP und hänge das an.
 

matze93

Gesperrt
Nun ja meine Codes:
1. links.php
PHP:
<div align="center">
<?php

$benutzer="web2s6027server";
$pwd="XxX";
$database="xxxx";

mysql_connect("localhost","$benutzer","$pwd");
mysql_select_db ("$database");

$link_select_sql="SELECT * FROM MatzeCMS_links ORDER BY name";
$link_select_result=mysql_query($link_select_sql);

mysql_close(); 
//Jetzt folgt die Ausgabe
?>

<table border="1" bordercolor="#000000" cellpadding="10" cellspacing="0" width="70%">
  <tr>
    <td width="100%" bgcolor="#b8d4ef">
      <table width="100%">
        <tr>
          <td width="33%">
          <div align="left"><a href="add_link.php">Link hinzufügen</a></div><? //Hier der Link um neue Links einzutargen *g* ?>
          </td>
          <td width="34%">
          <div align="center"><u><h2>Links</h2></u> </div>
          </td>
          <td width="33%">
          <div align="right"><a href="add_link.php">Link hinzufügen</a></div> <? //Nochmals ?>
          </td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <td width="100%"> 
	<?php

    while($links=mysql_fetch_array($link_select_result)){ //Eine while Schleife um alle EInträge auszugeben
    ?>


    Linkname: <a href="<? echo $links['url']; ?>" target="new"><? echo $links['name']; ?> </a><br>
    Von: <a href="mailto:<? echo $links['mail']; ?>"><? echo $links['autor']; ?> </a><p>

    <?php
    echo $links['beschr']
    ?>
    <br>
    <hr width="100%" noshade color="#000000" size="1">
    <p>


    <?php
    }
    ?>
</td>
  </tr>
</table>

</div>
2. add_link.php
PHP:
<div align="center">
<?php
$benutzer="web2s6027server";
$pwd="XxX";
$database="xxx";

mysql_connect("localhost","$benutzer","$pwd");//Verbindung Zur Datenbank aufnehemen
mysql_select_db ("$database"); 

if($action=="link"){//Wenn das Formular abgeschickt wurde



  //Neuen Link in die Datenbank eintragen
  $link_SQL_insert="INSERT INTO MatzeCMS_links (url,name,beschr,autor,mail) VALUES ('$url','$name','$beschr','$autor','$mail')";
  $bool=mysql_query($link_SQL_insert);
  if($bool==1) echo "Link wurde aufgenommen<br>";
  if($bool<>1) echo "Beim Aufnehmen des Links ist ein Fehler aufgetreten<br>"; 
  
  //Mail an Webmaster senden um über neuen Link zu verständigen
$recipient="Hier deine e-Mailadresse";
$subject="Neuer Link wurde in die Linkliste eingetragen";
$header="Von: " . $mail . "n";
$mail_body= "Jemand hat einen neuen Link eingetragen:";
$mail_body.=$url;

mail($recipient,$subject,$mail_body,$header);


mysql_close(); 

?>
<a href="links.php">Zurück</a> zur Linkliste!
<?php

}else{

//Keinen Kommentar, einfach ein Formular

?>

<form action=add_link.php method=post>
  <table width="400" border="0" cellspacing="2" cellpadding="2">
    <tr valign="middle">
      <td>Linkname:</td>
      <td>
        <input type="text" name="name" size="25" maxlength="100">
    </td>
  </tr>
    <tr valign="middle">
      <td>Adresse(mit http://):</td>
      <td>
        <input type="text" name="url" size="25" value="http://www" maxlength="100">
    </td>
   <tr valign="middle">
      <td>Beschreibung(höchstens 255 Zeichen):</td>
      <td>
        <textarea name="beschr" rows="5" cols="40"></textarea>
    </td>
  </tr>
    <tr valign="middle">
      <td>Verfasser:</td>
      <td>
      <input type="text" name="autor" size="25" maxlength="30">
    </td>
  </tr>
    <tr valign="middle">
      <td>E-Mail:</td>
      <td>
      <input type="text" name="mail" size="25" maxlength="30">
    </td>
  </tr>
    <tr>
      <td>
        <div align="center">
        <input type="hidden" name="action" value="link">
        <input type="submit" name="Submit" value="Eintragen">
      </div>
    </td>
  </tr>
</table>
</form>

<?php
}
?>
</div>
Allerdings funktioniert zwar die Ausgabe richtig, aber nicht das hinzufügen!
 

Forum-Statistiken

Themen
272.355
Beiträge
1.558.612
Mitglieder
187.829
Neuestes Mitglied
AlDi31