werken met een mySql db

Status
Niet open voor verdere reacties.

bn2vs

Terugkerende gebruiker
Lid geworden
18 aug 2007
Berichten
1.705
Ik heb overlaatst een site gemaakt waar wat inhoud uit een db werd gehaald met 3 tabellen. Ik heb meer dan 5 uur bezig gezeten aan een edit pannel de maken voor de info in die db, wat vooral komt doordat ik alle gelinkte id's via php heb geregeld. resultaat was een nogal heel complex script voor iets wat eigenlijk redelijk simpel is... :shocked:

Ik wil nu iets gelijkaardig doen, maar dan met meer dan 20 tabellen. Als ik dat op dezelfde manier zou doen ben ik volgend jaar nog bezig. Is er geen 'eenvoudige' manier om gelinkte id's te regelen? :confused:
 
Je zou het zo kunnen doen:

iets toevoegen
PHP:
<?php
if(isset($_POST['submit'])) {
  $errors = 0;
  $error = array();
  // Velden checken welke verplicht zijn bijvoorbeeld:
  if(empty($_POST['naam'])) {
    $errors++;
    $error[] = 'U bent vergeten een naam in te vullen';
  }
  // end voorbeeld
  // Controle op fouten
 if($errors != 0) {
    foreach($error AS $line) {
      $errorBox .= $line ."<br />\n\r";
    }
    echo $errorBox;
  } else {
    // INSERT query + melding dat het gelukt is

    // variabelen resetten
    $errors = 0;
    $error = array();
  }
}
// Hieronder het formulier
// Niet vergeten <input type="submit" name="submit" value="Toevoegen" />
// anders werkt de eerste IF-statement niet
?>

iets wijzigen
PHP:
<?php
if(isset($_GET['id'])) {
  // SELECT-query of id wel bestaat
  if(mysql_num_rows($result) > 0) {
    // Een wijziging doorvoeren
    if(isset($_POST['submit'])) {
      $errors = 0;
      $error = array();
      // Zelfde controles als bij het toevoegen
      if(empty($_POST['name'])) {
        $errors++;
        $error[] = 'U bent vergeten een naam in te vullen.';
      }
      // Controle op fouten     
      if($errors != 0) {
        foreach($error AS $line) {
          $errorBox .= $line ."<br />\n\r";
        }
        echo $errorBox;
      } else {
        // UPDATE query WHERE id=$_GET['id'] + Melding van succes
        
        // variabelen resetten
        $errors = 0;
        $error = array();        
      }
    }
    // Ingevuld toevoegen formulier weergeven
    // Kan doormiddel van bovenstaande SELECT-query
    $row = mysql_fetch_array($result);
  } else {
    // Melding geven van ongeldige ID
  }
} else {
// Lijst met alle records weergeven met een link + id
}
?>

Vervolgens kun je deze structuur elke keer opnieuw gebruiken voor je verschillende opties.
 
Ik heb iets gelijkaardigs, maar dat deel is het probleem niet. Hier heb je een voorbeeld, want ik weet niet goed hoe ik het moet uitleggen :(

PHP:
							if (isUnique('websites', 'website_url', $website)) // update url
								{
								$create_sql = "INSERT INTO `websites` (`website_url`) VALUES ('$website')";
								$create_sqlres = mysql_query($create_sql) or die ("error getting data: ".mysql_error());
								$website_id = mysql_insert_id();
								$create_id = "UPDATE $table SET `website_id`='$website_id' WHERE `company_id`='$edit_id'";
								$create_idres = mysql_query($create_id) or die ("error getting data: ".mysql_error());
 								}
							else
								{
								$website_sql = "SELECT website_id FROM websites WHERE website_url = '".$website."'";
								$whaaaaa = mysql_query($website_sql); $website_row = mysql_fetch_array($whaaaaa);
								$website_id = $website_row[0];
 								$update_sql = "UPDATE $table SET `website_id`='$website_id' WHERE `company_name`='$name'";
								$update_sqlres = mysql_query($update_sql) or die ("error getting data: ".mysql_error());
								}

dat is de code die ik nu gebruik om de info van 1 invulveld op te slaan. heb dan ook nog eens andere code voor als de record niet bestaad, en voor als je hem wil verwijderen... als je dat dan hebt voor meer dan 20 invulvelden heb je vééééél code :(
 
Als ik de code zo bekijk dan wil je afhankelijk van of het al bestaat of niet iets invoegen en anders aanpassen. Klopt dat?

Volgens mij moet je eerder je databasestructuur aan gaan passen.
Is het zo dat een company meerdere websites heeft? Volgens mij niet, dus dan zou je het gewoon als extra veld aan kunnen maken.

Dan zit je niet met een extra tabel en hoef je dus ook niet van die omslachtige queries te maken.
 
dat eerste is idd juist.

hoe pas ik mn db structuur aan dan? (is dat via phpmyadmin?)

het is mogelijk dat meersere companies dezelfde website gebruiken, en ik wil voorkomen dat die dan 2 keer in de darabase terecht komt :)
 
Een databasestructuur aanpassen wanneer je al aardig bezig bent is niet echt bevordelijk.
De kans is aardig groot dat je veel code moet herschrijven.

Die structuur zul je voor je begint moeten bedenken.
Je kijkt dan wat je op wilt slaan en wat je in een andere tabel opslaat en via sleutels gaat regelen.

Het lijkt mij nogsteeds handiger om gewoon die website bij het bedrijf op te slaan. Dan heb je maar een paar keer hetzelfde record er in staan. De kans dat meerdere bedrijven dezelfde website hebben lijkt mij niet zo heel hoog.

Als je bepaalde handelingen vaak uit voert is het wellicht een optie om die in een functie te zetten met bepaalde argumenten die elke keer anders zijn.
 
Ik heb moementeel een database met daarin een tabel met een 20-tal velden vol met dubbele gevens enzo. Die moet ik zowiso hermaken naar iets dat wat relationeel is.

Is het dan mogelijk om volledig zonder php functies sleutels te linken?

Je hebt wss wel gelijk dat voor websites je best gewoon nieuwe records maakt, maar mn huidige tabel was een soort van voorbereiding op degene die ik nu ga maken. Dingen zoals de bedrijfstak komen normaalgezien altijd meerdere keren voor, waar ik dit systeem dus voor nodig heb.

Functies verkort alles idd wel een hele hoop, wat ik ook zal trachten te doen bij deze db :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan