Hallo Allemaal,

Ik heb een 3-tal scripts:
1) het aanmaken van een nieuwe entry in een bestaande tabel (nieuwe row)
2) Het verwijderen van één of meerdere ROW's
3) Het aanpassen van bestaande entry's.

script 1 en 2 heb ik succesvol aangemaakt. Ik kan dus nieuwe rijen aanmaken en rijen wissen. Ik wil echter ook de bestaande data uit die tabel kunnen aanpassen.

Ik heb een script dat werkt wanneer er één rij is in de tabel. Maar waanneer ik rijen toevoeg gaat het mis. Krijg het niet aan de praat.

Ik post hier een script wat rijen aanpast wanneer het één rij is...deze wertk dus op één rij:

<?php

$dbhost = 'gegevens';
$dbuser = 'gegevens';
$dbpass = 'gegevens';
$dbname = 'gegevens';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname) or die('Cannot select database');

if (isset($_POST['verzenden'])){
if (isset($_POST['partner'])) {
$partner = $_POST['partner'];
} else {
$partner = "";
};
if (isset($_POST['weblink'])) {
$weblink = $_POST['weblink'];
} else {
$weblink = "";
};
if (isset($_POST['omschrijving'])) {
$omschrijving = $_POST['omschrijving'];
} else {
$omschrijving = "";
};
if (isset($_POST['mid'])) {
$mid = $_POST['mid'];
} else {
$mid = "";
};

$query = "INSERT INTO partners (mid, partner, weblink, omschrijving) VALUES ('$mid', '$partner', '$weblink', '$omschrijving') ON DUPLICATE KEY UPDATE mid = '$mid', partner = '$partner', weblink = '$weblink', omschrijving = '$omschrijving'";

mysql_query($query) or die('Error, insert query failed');
};

$partner = "";
$weblink = "";
$omschrijving = "";
$mid = "";

$check = mysql_query ("SELECT * FROM partners");
if (!$check) {
$query = "CREATE TABLE partners (mid INT NOT NULL AUTO_INCREMENT, partner TEXT NOT NULL, weblink TEXT NOT NULL, omschrijving TEXT NOT NULL, PRIMARY KEY (mid))";

$result = mysql_query($query) or die;
} else {
$query = "SELECT * FROM partners";

$result = mysql_query($query);

while ($row = mysql_fetch_array ($result)) {
$partner = $row['partner'];
$weblink = $row['weblink'];
$omschrijving = $row['omschrijving'];
$mid = $row['mid'];
};
};

if (!$partner){$partner = "Voer Tekst in partner";};
if (!$weblink){$weblink = "Voer Tekst in weblink";};
if (!$omschrijving){$omschrijving = "Voer Tekst in omschrijving";};

echo "<form action='' method= 'POST'>";
echo "<textarea name='partner' rows='1' cols='35'>" . $partner . "</textarea><br>";
echo "<textarea name='weblink' rows='1' cols='35'>" . $weblink . "</textarea><br>";
echo "<textarea name='omschrijving' rows='3' cols='35'>" . $omschrijving . "</textarea><br>";
echo "<input type='hidden' name='mid' value='$mid'>";
echo "<input type='submit' value='verzenden' name='verzenden'>";
echo "</form>";
?>

Ik kan dus welgeteld één rij uitlezen...en aanpassen...
Mijn vraag is: hoe kan ik alle items uitlezen (dat is mij al eens gelukt, maar deed verder hele rare dingen) en per item iets wijzigen...dat is mij nog niet gelukt. Na een aanpassing in de code paste hij enkel de laatste rij aan en na een andere aanpassing in de code maakt hij telkens een nieuwe rij aan. Ik krijg dus niet voor elkaar dat hij de rij aanpast die bij de bewuste ID hoort.

Kan iemand mij op gang helpen?

Alvast bedankt voor jullie hulp!
ik snap er niets van.

Hoe moet het werken?
Wat is de dienst (leden beheeren, nieuwssysteem,... )?
Het is een admin pagina waar de webmaster teksten kan toevoegen, aanpassen of verwijderen. na het inloggen verschijn je op een overzichtspagina waar je de content van de website kunt gaan aanpassen. Ik heb hier 3 url's staan (regel toevoegen, regel(s) verwijderen en updaten). het betreft een gewone tekst pagina.

Ergens anders op de site heb ik een admin pagina die uit een tabel één regel aan data uitleest (kolom a, kolom b en kolom c op rij a) deze kan ik aanpassen. Dat is het script wat hierboven staat. Ik kan ook, wanneer meerdere regels bestaan, alles uitlezen (dus meerdere regels en kolommen) Wat ik niet op Google kan vinden is hoe ik deze waarden kan aanpassen met bijvoorbeeld DUPLICATE KEY. Ik lees dus alles uit in textareas...dit wil ik wijzigen. Maar dat hij wel de juiste kolom en regel aanpast...en niet de laatste terwijl ik de eerste wijzig.

Heb ik mijzelf nu een beetje duidelijk gemaakt? Het is nogal lastig uit te leggen namelijk...sorry...
echo $query eens.

Want wellicht gebruik je een ' (enkel haakje) in je tekst. En dan loopt het vast omdat je de input niet beveiligd.
updaten van een record zou ik (in dit voorbeeld) een eenvoudige UPDATE query (met daarin een WHERE om het betreffende record aan te geven) voor gebruiken.

Ten aanzien van je script:
variabelen in een query buiten quotes. Daarnaast mist, zoals Eddy aangeeft, de beveiliging van je query.
<?php
$check = mysql_query ("SELECT * FROM partners");?>
Gebruik liever het veld/de velden die je wilt opvragen.
Overigens begrijp ik niet wat je hier mee wilt bereiken; in plaats van een goede foutafhandeling kies je er voor om een tabel aan te gaan maken als de query mislukt. En als de query lukt, ken je aan een andere variabele dezelfde query toe. Lijkt me dubbelop.
En daar heb je helemaal geen foutafhandeling, zelfs geen or die().

Gezien je script haal je maar 1 record op; waarom dan een while-lus om variabelen aan te maken/toe te kennen? Gezien de manier waarop jij mysql_fetch_array gebruikt, kun je net zo goed kiezen voor mysql_fetch_assoc.

Laatste opmerking: in HTML zou je " moeten gebruiken en geen '
En dan in PHP juist ' gebruiken ipv "
http://www.phphulp.nl/php/tutorial/php-algemeen/correct-quoten/772/

Misschien http://www.phptuts.nl/view/39/ nog even doorlezen?

Obelix en Idefix op 31/08/2012 18:38:46

Laatste opmerking: in HTML zou je " moeten gebruiken en geen '
En dan in PHP juist ' gebruiken ipv "


Maar bij (SQL)queries dan weer niet. Daar gebruik je wel " omdat je IN je query ' kan gebruiken.

Reageren