vernieuwen website

Status
Niet open voor verdere reacties.

Radio247

Gebruiker
Lid geworden
8 dec 2011
Berichten
31
Ik ben bezig een php website opnieuw op te bouwen danwel geschikt te maken voor php7 in plaats van php3.
Uiteraard kom ik heel wat problemen tegen waarvan ik er al een hoeveelheid heb kunnen oplossen maar nu zit ik met een punt waar ik niet uitkom omdat ik het gewoon niet snap.
In onderstaand script komen $mod en $counter voor maar worden niet gedefinieerd.
Hoe en waar kan ik dat doen of dit deel vervangen?
Bedoeling is dat de CD hoesjes worden weer gegeven in groepen per maand en dan per 3 rijen.

PHP:
include 'connect.php';

$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 75";
 $result = mysqli_query($conn, $sql);
  $aantal = mysqli_num_rows($result);

	# Foto's per rij!
	$ppr = "3";

	# In array zetten!
	while($row = mysqli_fetch_array($result))
	{
		$CDid[] = $row["cdid"];
		$CDnaam[] = stripslashes($row["cdnaam"]);
		$CDhoes[] = $row["cdhoes"];
		$CDdatum[] = $row["datum"];
		$CDmnd[] = $row["maand"];
	}

	# Tabel voor de netheid
	echo "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">";
	
	# Als er niets is!
	if($aantal == "0")
	{
		echo "<center><b>Wij hebben geen cd's toegevoegd!</b><br><br>Binnenkort online!";
	}
	else
	{
		# Gewoon een letter... Q ofzo
		$bitje = "Q";

		# x het aantal records
		for($cd=0; $cd<$aantal; $cd++)
		{
			//-- MAAND - Datum bewerken!
		    if($CDmnd[$cd] == "01")
		        { $CDmnd[$cd] = "Januari"; }
		    else if($CDmnd[$cd] == "02")
		        { $CDmnd[$cd] = "Februari"; }
		    else if($CDmnd[$cd] == "03")
		        { $CDmnd[$cd] = "Maart"; }
		    else if($CDmnd[$cd] == "04")
		        { $CDmnd[$cd] = "April"; }
		    else if($CDmnd[$cd] == "05")
		        { $CDmnd[$cd] = "Mei"; }
		    else if($CDmnd[$cd] == "06")
		        { $CDmnd[$cd] = "Juni"; }
		    else if($CDmnd[$cd] == "07")
		        { $CDmnd[$cd] = "Juli"; }
		    else if($CDmnd[$cd] == "08")
		        { $CDmnd[$cd] = "Augustus"; }
		    else if($CDmnd[$cd] == "09")
		        { $CDmnd[$cd] = "September"; }
		    else if($CDmnd[$cd] == "10")
		        { $CDmnd[$cd] = "Oktober"; }
		    else if($CDmnd[$cd] == "11")
		        { $CDmnd[$cd] = "November"; }
		    else if($CDmnd[$cd] == "12")
		        { $CDmnd[$cd] = "December"; }			
			
				# Controleren of de maand anders is!
				if($bitje <> $CDmnd[$cd])
				{
					$bitje = $CDmnd[$cd];
					
					if($cd != "0")
					{
						echo "<tr><td height=\"10\" colspan=\"3\"></td></tr>\n";
					}
					
					$CDjaar[$cd] = substr($CDdatum[$cd], 0, 4);
					
					echo "<tr height=\"20\">";
					echo "<td colspan=\"3\" bgcolor=\"#8DB521\">";
				    echo "<font face=\"Verdana\" size=\"2\" color=\"#FFFFFF\">\n";
				    echo "&nbsp;<b>$CDmnd[$cd] $CDjaar[$cd]</b>";
				    echo "</td></tr>\n";
							    
				    echo "<tr><td height=\"10\" colspan=\"3\"></td></tr>\n";
				    
				    # Alles weer resetten!
				    unset($mod);
				    unset($counter);
				}
			$mod = ($aantal); //proefondervindelijk erin gezet
			$mod++; 

			if ($counter == 0)
			{
				echo "<tr>";
			}

			$counter++; 

			if ($counter == $ppr)
			{
				$counter = 0;
			}

			if (($mod % $ppr) != 0)
			{
				echo "<td><center>";
			    echo "<font face=\"Verdana\" size=\"1\" color=\"#333333\">\n";
			    echo "<a href=\"nieuwinplaylist.show.php?id=$CDid[$cd]\">";
			    echo "<img src=\"cplog/cds/cds/$CDhoes[$cd]\" title=\"$CDnaam[$cd]\" border=\"0\" width=\"100\"></a></td>\n";
			}
			else
			{
				echo "<td><center>";
			    echo "<font face=\"Verdana\" size=\"1\" color=\"#333333\">\n";
			    echo "<a href=\"nieuwinplaylist.show.php?id=$CDid[$cd]\">";
			    echo "<img src=\"cplog/cds/cds/$CDhoes[$cd]\" title=\"$CDnaam[$cd]\" border=\"0\" width=\"100\"></a></td></tr>\n";
				    
			    echo "<tr><td height=\"10\" colspan=\"3\"></td></tr>\n";
			}
		}
	}
	
	echo "</table>";
 
Oef, dit is echt heel oud....
Als $mod niet gedefinieerd is, dan is het een $_GET['mod'] (via de URL) of een $_POST['mod'] (als het vanuit een door POST verstuurd formulier komt.

Verder kan je jouw 'echoput' ook vervangen door HTML buiten je PHP-tags, en kan je ook een elegante switch() gebruiken in plaats van je if-elseif opsomming
 
Er zit bij "mei" een { bug in je maanden omzetting.
Hieronder is korter met minder kans op bugs en je kan de maanden op andere plekken gebruiken
PHP:
// maanden, array van 0-11.
$maanden = [
    "Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli",
    "Augustus", "September", "Oktober", "November", "December"
];
// maak van tekst $CDmnd[$cd] een integer $CDmnd[$cd]
// haal er 1 vanaf om de naam uit de $maanden array te halen
$CDmnd[$cd] = $maanden[intval($CDmnd[$cd])-1];

Update. Deze "if" voorwaarde is altijd true, waarvoor is die letter Q ?
PHP:
$bitje = "Q";
....
// $CDmnd[$cd] is de naam van de maand
....
if ($bitje <> $CDmnd[$cd])
{
 
Laatst bewerkt:
vereenvoudiging

Dank voor het meedenken, hierdoor heb ik besloten de layout te vereenvoudigen en alleen een opsomming te maken in 3 kolommen.
hiervoor een script gevonden en iets aangepast en werkend gemaakt.
Helaas krijg ik nu de id en naam niet uit de array vandaan om in de url te gebruiken.
Kan dit komen door het gebruik van het "foreach" commando of probeer ik hier de informatie verkeerd op te vragen?

PHP:
include 'connect.php';

$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 75";
 $result = mysqli_query($conn, $sql);
  $aantal = mysqli_num_rows($result);

	# In array zetten!
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
	$cdid[] = $row['cdid'];
	$cdnaam[] = stripslashes($row['cdnaam']);
	$cdhoes[] = $row['cdhoes'];
	$cddatum[] = $row['datum'];
	$cdmnd[] = $row['maand'];
	}

// hulpvariabelen
$aantal_kolommen = 3;
$huidige_kolom   = 0; // als deze variabele de waarde 0 heeft dan is er een rij afgelopen en moet er een nieuwe beginnen

// bouw de tabel en doorloop de items
?>
<table align= "center" border="1" cellspacing="10" cellpadding="2">

<?php
foreach($cdhoes as $item) {
  // waren we klaar met een rij ?
  if($huidige_kolom == 0) {
    // open een nieuwe rij
    echo "<tr>"; // hier is toegevoegd om de leesbaarheid van de HTML-source te verhogen
  }

  // druk het item af - hier zou je dus nog tabellen kunnen nesten - in dit voorbeeld houden we het simpel
   echo "<td><a href=\"nieuwinplaylist.show.php?id=$row[cdid]\"><img src=\"cplog/cds/cds/$item\" title=\"$row[cdnaam]\" width=110px></a>\n</td>";

  // we zijn een kolom verder, verhoog $huidige_kolom
  $huidige_kolom++;

  // waren we klaar met een rij ?
  if($huidige_kolom == $aantal_kolommen) {
    // sluit de rij af en reset $huidige_kolom
    echo "</tr>";
    $huidige_kolom = 0;
  }
}
 
$row valt buiten de scope waar die werkt, in de while-loop.

Waarom doe je moeilijk, en maak je een nieuwe array aan?
Je hebt toch al een while-loop? Waarom ga je niet daarin je tabel opstellen?
 
Even snel een opzetje gemaakt die je zelf kan aanpassen
PHP:
<?php
$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 75";
$result = mysqli_query($conn, $sql);
$aantal = mysqli_num_rows($result);
$kolom = 0;
$kolom_rij = 3;
?>

<table align= "center" border="1" cellspacing="10" cellpadding="2">
<tbody>

<?php
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
    if ($kolom == 0) {
        echo "<tr>";
    }
    ?>
    <td><a href="nieuwinplaylist.show.php?id=<?= $row[cdid] ?>">
    <img src="cplog/cds/cds/<?= $item ?>" title="<?= stripslashes($row['cdnaam']) ?>" width="110"></a></td>
    <?php
    if ($kolom == $kolom_rij-1) {
        echo "</tr>";
        $kolom = 0;
    }
    $kolom++;
}
?>

</tbody>
</table>
 
stap in de goede richting gekomen

Ik ben inmiddels een heel stuk dichte bij mijn doel gekomen voor deze pagina op 1 puntje na.
Helaas blijft het bij 1 kolom in plaats van 3 en in mijn logica zou het goed moeten zijn maar helaas zie ik dus iets over het hoofd. iemand een idee?

PHP:
include 'connect.php';

$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 75";
 $result = mysqli_query($conn, $sql);
  $aantal = mysqli_num_rows($result);


	# In array zetten!
while ($rows = mysqli_fetch_array($result, MYSQLI_BOTH)) {

// bouw de tabel en doorloop de items
?>
<table align= "center" border="1" cellspacing="10" cellpadding="2">

<?php
// hulpvariabelen
$aantal_kolommen = 3;
$huidige_kolom   = 0; // als deze variabele de waarde 0 heeft dan is er een rij afgelopen en moet er een nieuwe beginnen

  // waren we klaar met een rij ?
  if($huidige_kolom == 0) {
    // open een nieuwe rij
    echo "<tr>"; // hier is toegevoegd om de leesbaarheid van de HTML-source te verhogen
   }

  // druk het item af - hier zou je dus nog tabellen kunnen nesten - in dit voorbeeld houden we het simpel
   echo "<td><a href=\"nieuwinplaylist.show.php?id=$rows[cdid]\"><img src=\"cplog/cds/cds/$rows[cdhoes]\" title=\"$rows[cdnaam]\" width=110px></a>\n</td>";

  // we zijn een kolom verder, verhoog $huidige_kolom
  $huidige_kolom++;

  // waren we klaar met een rij ?
  if($huidige_kolom == $aantal_kolommen) {
    // sluit de rij af en reset $huidige_kolom
    echo "</tr>";
    $huidige_kolom = 0;
  }
  $huidige_kolom++;
}
 
Laatst bewerkt:
Wil je echt je tabel steeds herhalen in je while-loop, of moeten enkel de rows <tr> gelooped worden?
Want het lijkt mij aannemelijk dat je while pas op lijn 19 moet beginnen.

Ik zou zeggen: Check je HTML-code eens.....
 
Dank PHP4U

dat was inderdaad de fout in mijn script, welke nu werkt zoals gewenst.
Hieronder de werkende versie voor zoekenden zoals ik :) .

PHP:
include 'connect.php';
 
// hulpvariabelen
$aantal_kolommen = 3;
$huidige_kolom   = 0; // als deze variabele de waarde 0 heeft dan is er een rij afgelopen en moet er een nieuwe beginnen

$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 75";
 $result = mysqli_query($conn, $sql);
  $aantal = mysqli_num_rows($result);
 
    # In array zetten!
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
 
// bouw de tabel en doorloop de items
  // waren we klaar met een rij ?
  if($huidige_kolom == 0) {
    // open een nieuwe rij
    echo "<tr>";
    }

  // toon het item
   echo "<td><a href=\"nieuwinplaylist.show.php?id=$row[cdid]\"><img src=\"cplog/cds/cds/$row[cdhoes]\" title=\"$row[cdnaam]\" width=110px></a>\n</td>";

  // we zijn een kolom verder, verhoog $huidige_kolom
  $huidige_kolom++;

  // waren we klaar met een rij ?
  if($huidige_kolom == $aantal_kolommen) {
    // sluit de rij af en reset $huidige_kolom
    echo "</tr>";

    $huidige_kolom = 0;
	}
} // while sluiten
 
Zet alleen herhalende dingen in een loop. Bij echo is het handig om ' (enkele quote) te gebruiken dan hoef je niet overal een \" te zetten. Hier is $aantal niet nodig.
PHP:
// select query met resultaat in array
$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 75";
$result = mysqli_query($conn, $sql);

$aantal_per_rij = 3;
$huidige_kolom = 0;

if (mysqli_num_rows($result) == 0) {
  echo '<center><b>Er is nog geen cd toegevoegd.</b>';
  echo '<br><br>Binnenkort zijn wij online.</center>';
} else {

  echo '<table align="center" border="1" cellspacing="10" cellpadding="2">';

  while ($row = mysqli_fetch_assoc($result)) {

    // een <tr> als huidige_kolom = 0
    if ($huidige_kolom == 0) {
      echo '<tr>';
    }

    // toon de <td>
    echo '<td><a href="nieuwinplaylist.show.php?id=' . strval($row[cdid]) . '">';
    echo '<img src="cplog/cds/cds/' . urlencode($row[cdhoes]) . '" title="' . $row[cdnaam] . '" style="width:110px; height:auto;"></a></td>';
    
    // verhoog huidige_kolom nummer
    $huidige_kolom++;

    // een </tr> als huidige_kolom = aantal_per_rij
    if ($huidige_kolom == $aantal_per_rij) {
      echo "</tr>";
      // zet dan ook huidige_kolom = 0
      $huidige_kolom = 0;
    }

  } // end while mysqli_fetch_assoc
} // end if mysqli_num_rows

echo '</table>';

Met de foreach loop zou het er zo uitzien
PHP:
$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 75";
$result = mysqli_query($conn, $sql);

foreach ($result as $row) {
  // ....
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan