Textverlinkung mit der ID klappt nicht

  • Themenstarter Themenstarter Frustierter
  • Beginndatum Beginndatum
F

Frustierter

Ich habe ein Problem mit meinem Script.
Wenn ich es ausführe zeigt es mir zwar den Text mit 50 Wörtern (so wie eingestellt) an, doch die Übernahme der ID als Link [weiter] ,wird auch angezeigt, in der Ausgabezeile des Textes funktioniert nicht um den Text voll anzuzeigen.
Hat jemand da eine Lösung um die ID in den Link einzulesen?

PHP:
<?php
error_reporting(E_ALL);
mysql_connect("localhost","xxx","xxx") or die("Fehler beim Verbinden");
mysql_select_db("xxx");


$sql = "SELECT
	      *,
	      DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum
	   FROM
	   	   news	 
	   ";
	   
$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) {
	$news[] = $row;	
}

$Anzahl = count($news);

if (isset($_GET['id']) AND $_GET['id'] != "") {
$sql2 = "WHERE
			id = '".$_GET['id']."'
		ORDER BY
			datum DESC
		";
} else {
$sql2 = "
		ORDER BY
			datum DESC
		";
}

# Anzahl der angezeigten Nachrichten

if (isset($_GET['page']) AND $_GET['page'] != "") {
	$page = $_GET['page'];
	$page_start = ($page-1)*2;
	//$page_ende = $page*2;
	
	$sql3 = "LIMIT
	           ".$page_start.", 2
	         ";
} else {
	$sql3 = "LIMIT
	           1, 3
	         ";
}


if(isset($_GET['id'])) {
   
   $sql = "SELECT
            text
         FROM
            news
         WHERE
            `id` ='".$_GET['id']."' "; 
               
# Ausgabe des vollen Textes
                     
} else {
      
   $sql = "SELECT
            id,
            text
         FROM
            news"; }
            
#Anzeige

$sql = "SELECT
        title, untertitel, CONCAT(SUBSTRING_INDEX(text, ' ', 50), '...') AS text, DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum, quelle
        FROM
        news";      
	   
$sql = $sql.$sql2.$sql3;

$result = mysql_query($sql);

$news = array();
while ($row = mysql_fetch_assoc($result)) {
	$news[] = $row;	
}

for ($z=0; $z<count($news); $z++) {
echo "<b>".$news[$z]['title']."</b><br>";
echo "".$news[$z]['untertitel']."";
echo "<p>" .$news[$z]['text'] ."<a href='index1.php?id=".$row['id']."'>&nbsp;[weiter]</a></p>";
echo $news[$z]['Changedatum']."<br>";
echo "Quelle:&nbsp;".$news[$z]['quelle']."<hr>";
}

?>
 
in $row ist keine id drin.

Aber warum machst du die vielen SQLs? $sql wird am Schluss überschrieben.
Der folgende Abschnitt wird nie ausgewertet, da gleich darauf $sql neu geschrieben wird
PHP:
/**
if(isset($_GET['id'])) {
   
   $sql = "SELECT
            text
         FROM
            news
         WHERE
            `id` ='".$_GET['id']."' "; 
               
# Ausgabe des vollen Textes
                     
} else {
      
   $sql = "SELECT
            id,
            text
         FROM
            news"; } 
*/

Und wenn du dein letztes sql noch um die id erweiterst, kannst du sie auch für die ANzeige verwenden

PHP:
$sql = "SELECT
        id, title, untertitel, CONCAT(SUBSTRING_INDEX(text, ' ', 50), '...') AS text, DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum, quelle
        FROM
        news";
 
Wo ist in $rowkeine ID drin?
Und wie soll ich Deiner Meinung nach das SQL umschreiben damit es in den Link eingelesen wird?
Das letzte SQL habe ich um die ID ergänzt...
 
Dein Code mit Zeilennummern:
PHP:
<?php
error_reporting(E_ALL);
mysql_connect("localhost","xxx","xxx") or die("Fehler beim Verbinden");
mysql_select_db("xxx");


$sql = "SELECT
          *,
          DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum
       FROM
              news     
       ";
       
$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) {
    $news[] = $row;    
}

$Anzahl = count($news);

if (isset($_GET['id']) AND $_GET['id'] != "") {
$sql2 = "WHERE
            id = '".$_GET['id']."'
        ORDER BY
            datum DESC
        ";
} else {
$sql2 = "
        ORDER BY
            datum DESC
        ";
}

# Anzahl der angezeigten Nachrichten

if (isset($_GET['page']) AND $_GET['page'] != "") {
    $page = $_GET['page'];
    $page_start = ($page-1)*2;
    //$page_ende = $page*2;
    
    $sql3 = "LIMIT
               ".$page_start.", 2
             ";
} else {
    $sql3 = "LIMIT
               1, 3
             ";
}


if(isset($_GET['id'])) {
   
   $sql = "SELECT
            text
         FROM
            news
         WHERE
            `id` ='".$_GET['id']."' "; 
               
# Ausgabe des vollen Textes
                     
} else {
      
   $sql = "SELECT
            id,
            text
         FROM
            news"; }
            
#Anzeige

$sql = "SELECT
        title, untertitel, CONCAT(SUBSTRING_INDEX(text, ' ', 50), '...') AS text, DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum, quelle
        FROM
        news";      
       
$sql = $sql.$sql2.$sql3;

$result = mysql_query($sql);

$news = array();
while ($row = mysql_fetch_assoc($result)) {
    $news[] = $row;    
}

for ($z=0; $z<count($news); $z++) {
echo "<b>".$news[$z]['title']."</b><br>";
echo "".$news[$z]['untertitel']."";
echo "<p>" .$news[$z]['text'] ."<a href='index1.php?id=".$row['id']."'>&nbsp;[weiter]</a></p>";
echo $news[$z]['Changedatum']."<br>";
echo "Quelle:&nbsp;".$news[$z]['quelle']."<hr>";
}

?>

Im $sql ab Zeile 73 fehlt die id.

So sollte es aussehen (wie ich ja bereits gepostet habe)
PHP:
$sql = "SELECT
        id, title, untertitel, CONCAT(SUBSTRING_INDEX(text, ' ', 50), '...') AS text, DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum, quelle
        FROM
        news";

Zudem:
Zeile 52 bis 69 sind nutzlos, weil das Resultat dieser Zeile ab Zeile 73 überschrieben wird
 
So, das mit der ID auslesen funktioniert jetzt.
Nur wenn ich den Link [weiter] anklicke um auf die neue Seite zu kommen kriege ich eine leer Seite!
Der Link soll auf die Seite news_total verlinken und mir dann die komplette Nachricht anzeigen die vorher auf 50 Wörter
gekürzt wurde.

Hier mal der news-Code:

PHP:
<?php
error_reporting(E_ALL);
mysql_connect("localhost","xxx","xxx") or die("Fehler beim Verbinden");
mysql_select_db("xxx");


$sql = "SELECT
        *,
        DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum
     FROM
         news  
     ";
     
$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) {
  $news[] = $row;
}

$Anzahl = count($news);

if (isset($_GET['id']) AND $_GET['id'] != "") {
$sql2 = "WHERE
      id = '".$_GET['id']."'
    ORDER BY
      datum DESC
    ";
} else {
$sql2 = "
    ORDER BY
      datum DESC
    ";
}

if (isset($_GET['page']) AND $_GET['page'] != "") {
  $page = $_GET['page'];
  $page_start = ($page-1)*2;
  //$page_ende = $page*2;
 
  $sql3 = "LIMIT
             ".$page_start.", 2
           ";
} else {
  $sql3 = "LIMIT
             1, 3
           ";
}
     
$sql = "SELECT
        id, title, untertitel, CONCAT(SUBSTRING_INDEX(text, ' ', 50), '...') AS text, DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum 
        FROM
        news";    

$sql = $sql.$sql2.$sql3;

$result = mysql_query($sql);

$news = array();
while ($row = mysql_fetch_assoc($result)) {
  $news[] = $row;
}

for ($z=0; $z<count($news); $z++) {
echo "<b>".$news[$z]['title']."</b><br>";
echo "".$news[$z]['untertitel']."";
echo "<p>" .$news[$z]['text']."<a href='news_total.php?id=".$news[$z]['id']."'>&nbsp;[weiter...]</a></p>";
echo $news[$z]['Changedatum']."<hr>";
}

?>

Und hier der news_total-Code:

PHP:
<?php
error_reporting(E_ALL);
mysql_connect("localhost","xxx","xxx") or die("Fehler beim Verbinden");
mysql_select_db("xxx");


$sql = "SELECT
        *,
        DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum
     FROM
         news  
     ";
     
$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) {
  $news[] = $row;
}

$Anzahl = count($news);

if (isset($_GET['id']) AND $_GET['id'] != "") {
$sql2 = "WHERE
      id = '".$_GET['id']."'
    ORDER BY
      id DESC
    ";
} else {
$sql2 = "
    ORDER BY
      id DESC
    ";
}
     
$sql = "SELECT
        id, title, untertitel, text, DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum 
        FROM
        news";    

$sql = $sql.$sql2;

$result = mysql_query($sql);

$news = array();
while ($row = mysql_fetch_assoc($result)) {
  $news[] = $row;

echo "<b>".$news[$z]['title']."</b><br>";
echo "".$news[$z]['untertitel']."";
echo "<p>" .$news[$z]['text']."</p>";
echo $news[$z]['Changedatum']."<hr>";
}

?>

Kann mir irgend jemand dabei helfen? Brauche den Code dringend und habe doch nicht soviel Ahnung wie ich dachte...
 
Dein Problem dürfte an der Aneinander-Kettung der Strings $sql und $sql2 liegen:

PHP:
if (isset($_GET['id']) AND $_GET['id'] != "") {
$sql2 = "WHERE
      id = '".$_GET['id']."'
    ORDER BY
      id DESC
    ";
} else {
$sql2 = "
    ORDER BY
      id DESC
    ";
}
     
$sql = "SELECT
        id, title, untertitel, text, DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum 
        FROM
        news";    

$sql = $sql.$sql2;

Da kommt im Falle, das die if-Condition TRUE ist nämlich beispielhaft dieses SQL-Statement bei raus:

SQL:
SELECT
        id, title, untertitel, text, DATE_FORMAT(datum, '%d.%m.%Y um %T Uhr') AS Changedatum 
        FROM
        newsWHERE
      id = '1'
    ORDER BY
      id DESC

Und wie du vielleicht sehen kannst, gibts die Tabelle "newsWHERE" nicht.

Um das zu beheben müsstest du den True-Teil so abändern:

PHP:
if (isset($_GET['id']) AND $_GET['id'] != "") {
$sql2 = "
    WHERE
      id = '".$_GET['id']."'
    ORDER BY
      id DESC
    ";
} else {
 
Zurück