if(isset($_GET['id'])) ELSE

Status
Niet open voor verdere reacties.

BoukeWeening

Gebruiker
Lid geworden
3 apr 2007
Berichten
232
Hoi, ik heb het volgende:

PHP:
<?php

				if(isset($_GET['id']))
				{
				  // Bericht query
				  $berichtQuery = "SELECT * FROM sn_pages WHERE id=". $_GET['id'] ."";
				  $berichtResult = mysql_query($berichtQuery) or die('Query failed: ' . mysql_error());
				  $berichtRow = mysql_fetch_array($berichtResult);?>
                  
				 <h2><?	echo $berichtRow['name'];?></h2>
				 <?  echo $berichtRow['content'];?>
                 <p><a href="/school/">Vorige</a></p>
				<?
				}
				else

				?>
            

                				<?php
                // Performing SQL query
 
                $query = 'SELECT * FROM `sn_pages` WHERE `section`="10" ORDER BY sort';

                $result = mysql_query($query) or die('Query failed: ' . mysql_error());
 
                // Printing results in HTML
                while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
                    ?>
                    	<h2><?= $line['name']; ?></h2>
                       <a href='index.php?id=<?php echo $line['id']?>'><p<?php echo substr($line['content'], 0, 300).'...'; ?></p>
                       

                  <?php
                }
                ?>

maar nu opent hij de link in de pagina en blijven de andere stukjes eronder staan. Ik wil het eigenlijk zo hebben dat als je op een van de links klikt hij alleen dat opent en niet nog een keer alle links... wat moet ik hieraan dan veranderen?
 
Wellicht helpt het als je nog een accolade ( { ) achter else plaatst.
 
PHP:
<?php

  if ( isset ( $_GET[ 'id' ] ) ) {
    
    // Bericht query
    $berichtQuery = "SELECT * FROM sn_pages WHERE id='". mysql_real_escape_string ( $_GET[ 'id' ] ) ."'";
    $berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
    $berichtRow = mysql_fetch_assoc ( $berichtResult ); 

    echo '<h2>', $berichtRow[ 'name' ], '</h2>';
    echo $berichtRow[ 'content' ];
    echo '<p><a href="/school/">Vorige</a></p>';

  } else {

    // Performing SQL query
    $query = "SELECT * FROM sn_pages WHERE section = '10' ORDER BY sort ASC";
    $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error() );

    // Printing results in HTML
    while ( $line = mysql_fetch_assoc ( $result ) ) {

      echo '<h2>', $line[ 'name' ], '</h2>';
      echo '<a href="index.php?id=', $line[ 'id' ], '">', substr ( $line[ 'content' ], 0, 300 ), '...</a>'; 

    }

  }

?>

Verbeterde punten:

- Netter gestructureerd
- mysql_real_escape_string() gebruikt waar noodzakelijk. Er zat enorm security-lek in je pagina.
- De waarde in je WHERE-clause tussen single-quotes gezet. Netter.
- mysql_fetch_array veranderd in mysql_fetch_assoc aangezien je toch alleen de named-keys gebruikt.
- shorttags (<?) veranderd in <?php
- PHP-blok niet sluiten voor een beetje HTML-output
- Sorteerrichting (ASC) toegevoegd aan onderste query
- Je opent ergens een a, sluit die niet, je geeft een halve paragraaf-openingstag en sluit die weer.

Tip:

- Kijk ook eens naar de HTML-output die je script geeft (bron bekijken in je browser), nu zou die er (zeker in het tweede deel, de else) vreemd uit hebben gezien.

Conclusie:

- Zo ik het script nu "herschreven" heb, zou het moeten werken.
 
Dan gaat hier ook nog van alles fout ben ik bang... of niet? Zou je hier ook eens naar kunnen kijken:

PHP:
    <?php

				if(isset($_GET['id']))
				{
				  // Bericht query
				  $berichtQuery = "SELECT * FROM sn_m_news_articles WHERE id=". $_GET['id'] ."";
				  $berichtResult = mysql_query($berichtQuery) or die('Query failed: ' . mysql_error());
				  $berichtRow = mysql_fetch_array($berichtResult);?>
                  
				 <h2><?	echo $berichtRow['title'];?></h2>
				 <?  echo $berichtRow['content'];?><br />
				<?
				}
				else

				?>
        
				<p>----------------------------------------------------------------------------------------------</p>
				<?php
			
				
				  // Performing SQL query
				  $query = 'SELECT * FROM `sn_m_news_articles` ORDER BY date DESC LIMIT 0, 3';
				  $result = mysql_query($query) or die('Query failed: ' . mysql_error());

				  while ($line = mysql_fetch_array($result))
				  { ?>
                  		
				   <h2><? echo $line['title']; ?></h2>
                   <?  echo '<a href="?page=edit&id='. $line['id'] .'">'; ?>
                  		<p> <?php echo substr($line['content'], 0, 150).'...'; ?></p></a>
				
				
				 
				 <? }
				?>

						
				<h1 id="h1_archief">Archief</h1>
				<?php

				  // Performing SQL query
				  $query = 'SELECT * FROM `sn_m_news_articles` ORDER BY date DESC LIMIT 3, 15';
				  $result = mysql_query($query) or die('Query failed: ' . mysql_error());

				  while ($line2 = mysql_fetch_array($result))
				  {
				
				    echo '<a href="?page=edit&id='. $line2['id'] .'">'. $line2['title'] .'<br /></a>';
				  }
				?>
 
Als je nu eens gewoon bekijkt wat de veranderingen zijn tussen je oorspronkelijke script en dat wat ik herschreven heb, kun je het waarschijnlijk zelf ook wel aanpassen.

BTW, werkt het nu wel dan?
 
Ja, het werkt perfect!!! met een paar kleine aanpassingen om de vormgeving weer op orde te krijgen :)
 
Ik heb nu dit maar nu werkt ook deze hele pagina niet meer:

PHP:
<?php
 
  if ( isset ( $_GET[ 'id' ] ) ) {
    
    // Bericht query
    $berichtQuery = "SELECT * FROM sn_m_news_articles WHERE id='". mysql_real_escape_string ( $_GET[ 'id' ] ) ."'";
    $berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
    $berichtRow = mysql_fetch_assoc ( $berichtResult ); 
 
    echo '<h2>', $berichtRow[ 'title' ], '</h2>';
    echo '<p>', $berichtRow[ 'content' ], '<p>';
    echo '<p><a href="../nieuws">Terug naar het overige nieuws</a></p>';
 
  } else {            

			
				  // Performing SQL query
				  $query = 'SELECT * FROM `sn_m_news_articles` ORDER BY date DESC LIMIT 0, 3';
				  $result = mysql_query($query) or die('Query failed: ' . mysql_error());

				  while ($line = mysql_fetch_array($result))
				  { ?>
                  		
				   <h2><? echo $line['title']; ?></h2>
                   <?  echo '<a href="?page=edit&id='. $line['id'] .'">'; ?>
                  		<p> <?php echo substr($line['content'], 0, 150).'...'; ?></p></a>
				
				
				 
				 <? }
				?>

						
				<h1 id="h1_archief">Archief</h1>
				<?php

				  // Performing SQL query
				  $query = 'SELECT * FROM `sn_m_news_articles` ORDER BY date DESC LIMIT 3, 15';
				  $result = mysql_query($query) or die('Query failed: ' . mysql_error());

				  while ($line2 = mysql_fetch_array($result))
				  {
				
				    echo '<a href="?page=edit&id='. $line2['id'] .'">'. $line2['title'] .'<br /></a>';
				  }
				?>
 
ondertussen een stapje verder:

PHP:
 <?php
 
  if ( isset ( $_GET[ 'id' ] ) ) {
    
    // Bericht query
    $berichtQuery = "SELECT * FROM sn_m_news_articles WHERE id='". mysql_real_escape_string ( $_GET[ 'id' ] ) ."'";
    $berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
    $berichtRow = mysql_fetch_assoc ( $berichtResult ); 
 
    echo '<h2>', $berichtRow[ 'title' ], '</h2>';
    echo '<p>', $berichtRow[ 'content' ], '<p>';
    echo '<p><a href="../nieuws">Terug naar het overige nieuws</a></p>';
 
  } else {            

// Performing SQL query
    $query = "SELECT * FROM sn_m_news_articles ORDER BY date DESC LIMIT 0,5";
    $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error() );
 
    // Printing results in HTML
    while ( $line = mysql_fetch_assoc ( $result ) ) {
 
      echo '<h2>', $line[ 'title' ], '</h2>';
	  echo '<a href="?page=edit&id='. $line['id'] .'">';
      echo '<p>', substr ( $line[ 'content' ], 0, 300 ), '...</a></p>'; 
 
    }
 
  }
?>

Nu alleen het archief er weer onder...
 
PHP:
echo '<h1 id="h1_archief">Archief</h1>';
 
                  // Performing SQL query
                  $query = 'SELECT * FROM `sn_m_news_articles` ORDER BY date DESC LIMIT 3, 15';
                  $result = mysql_query($query) or die('Query failed: ' . mysql_error());
 
                  while ($line2 = mysql_fetch_array($result))
                  {
                
                    echo '<a href="?page=edit&id='. $line2['id'] .'">'. $line2['title'] .'<br /></a>';
                  }

Dit zet je tussen op-één-na-laatste en de laatste accolade ( } ).
 
Helemaal super, ik was bijna zover!!! Het werkt allemaal fantastisch!!! Dank u dank u
 
No problem, mooi dat 't werkt :thumb:\

Overigens zou ik je nog wel willen aanraden om het volgende boven elke pagina te zetten in je ontwikkel-omgeving:
PHP:
<?php

  error_reporting ( E_ALL );
  ini_set ( 'display_errors' , 1 );

?>

Dan wordt er bij een fout altijd aangegeven wát de fout is en dan is het een stuk makkelijk oplossen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan