[PHP] Tekst in database en aanpassen in database

Status
Niet open voor verdere reacties.

wouter54321

Gebruiker
Lid geworden
24 mei 2008
Berichten
218
Hallo,

Ik heb volgende bestanden:

wijzigindex.php

PHP:
<form method="POST" action="indexverwerk.php">
Index:
<br>
<textarea name="indextekstingeven">
<?php
include('cmsconfig.php');
$result = mysql_query("SELECT * FROM indextabel");
while($row = mysql_fetch_array($result))
echo $row['indexondertabel'];
?>
</textarea>
<input type="submit" value="Wijzig">
</form>

indexverwerk.php

PHP:
<?php 

include('cmsconfig.php');

 
if(empty($_POST['indextekstingeven'])){ // Als er geen tekst is ingevuld...


    echo "U heeft geen tekst opgegeven!";


  }


else{
    $query = mysql_query("SELECT * FROM indextabel"); // De query...


    $num = mysql_num_rows($query); //Controleren of er al een rij is...


    if($num >0){ // Er bestaat een rij


	$query2 = mysql_query("UPDATE indextabel SET wijzig='".$_POST['indextekstingeven']."'"); // tweede query...


      echo "Tekst gewijzigd.";


    }
    else{ // Er bestaat geen rij


      $query = mysql_query("INSERT INTO indextabel VALUES('".$_POST['indextekstingeven']."')"); // tweede query...


	echo "Tekst gewijzigd.";


    }
    }

?>

cmsconfig.php

PHP:
<?php

$hostname = "localhost"; 
$username = "root"; 
$password = ""; 
$database = "cms"; 

mysql_connect($hostname,$username,$password) or die(mysql_error()); 
mysql_select_db($database); 

?>

Als ik de eerste keer iets intoets in de database dan komt het er.
Als ik de tekst dan aanpas dan zegt hij wel "Tekst gewijzigd" maar het veranderd niet in de database.
Welke fout zit er in het script?

Alvast bedankt!
 
Laatst bewerkt:
Basis debugging.

Zorg altijd dat je kunt controleren of de query wordt verzonden welke jij bedoelde en of hij een foutmelding geeft.

Maak van deze regels
PHP:
 if($num >0){ // Er bestaat een rij 


    $query2 = mysql_query("UPDATE indextabel SET wijzig='".$_POST['indextekstingeven']."'"); // tweede query... 


      echo "Tekst gewijzigd."; 


    }
eens dit:
PHP:
if($num >0){ // Er bestaat een rij
  $updateQuery = "UPDATE indextabel SET wijzig='".$_POST['indextekstingeven']."'";
  $updateResult = mysql_query($updateQuery);
  if(!$updateResult) {
    echo 'Er is een fout opgetreden bij het aanpassen!<br />
De query: <b>'. $updateQuery .'</b><br />
MySQL melding: '. mysql_error();
  } else {
    echo "Tekst gewijzigd.";
 }
 
Laatst bewerkt:
Ik heb dat stukje code vervangen en als ik nu op wijzig klik geeft hij deze foutmelding:

Parse error: syntax error, unexpected ')', expecting ',' or ';' in C:\wamp\www\Chout\CMS\indexverwerk.php on line 28
 
Foutje, dr zit een ) teveel achter "mysql_error()" :o
 
Nu geeft hij dit:

Er is een fout opgetreden bij het aanpassen!
De query: UPDATE indextabel SET wijzig='Lol lol lol lol'
MySQL melding: Unknown column 'wijzig' in 'field list'
 
Blijkt dus dat je in je databasetabel indextabel geen veld wijzig hebt. :)
 
Neen dat klopt.
Hoe en met welke code moet ik dat veld wijzig aanmaken?

P.S. Al bedankt voor je hulp!
 
Gebruik je phpMyAdmin? Dan kun je het daarmee regelen :)
 
Yep, ik gebruik Phpmyadmin.

Nu heb ik deze tabel met de twee velden indexondertabel en wijzig:
PHP:
CREATE TABLE `cms`.`indextabel` (
`indexondertabel` TEXT NOT NULL ,
`wijzig` TEXT NOT NULL 
) ENGINE = InnoDB
Maar dan zijn al de pagina's weer fout.
 
Laatst bewerkt:
Waarom heb je een nieuwe tabel gemaakt? Je had in de bestaande tabel ook gewoon een extra veld kunnen toevoegen.
 
Sorry,

Dit was de tabel die ik eerst had:

CREATE TABLE `indextabel` (
`indexondertabel` TEXT NOT NULL
) ENGINE = InnoDB

Wil jij hier dat extra veld aan toevoegen?
 
Ja dat is gewoon mogelijk

Selecteer de database uit het dropdown-menu
Klik daarna eronder op "indextabel"

Dan staat er in het rechterdeel onder de tabel met alle velden "Add 1 field(s) At end of table"

Klik daarnaast op "Go"
 
Bedankt het werkt.
Ik heb wel nog een vraag:
Als ik nu de het veld wijzig weergeef, dan geeft hij de tekst nog allemaal achter elkaar weer.
Hoe zorg ik dat wat er op één regel staat in het teksvak, ook wordt weergegeven als één regel.

Echt al bedankt voor al je hulp!!!!!!!
 
Bij het weergeven moet je de functie nl2br() gebruiken om je variabele.

Dus zoiets
PHP:
$indexQuery = "SELECT indexondertabel, wijzig FROM indextabel";
$indexResult = mysql_query($indexQuery);
if(!indexResult) {
  echo 'Er is een fout opgetreden bij het ophalen van de gegevens!<br />
De query <b>'. $indexQuery .'</b><br />
MySQL melding: '. mysql_error();
} else {
  $indexRow = mysql_fetch_assoc($indexResult);
  echo nl2br($indexRow['wijzig']);
}
 
Ik was bezig en het werkte niet meer?
Zijn de connecties juist?(sorry)

wijzigindex.php

PHP:
<form method="POST" action="indexverwerk.php"> 
Index: 
<br> 
<textarea name="indextekstingeven"> 
<?php 
include('cmsconfig.php'); 
$result = mysql_query("SELECT * FROM indextabel"); 
while($row = mysql_fetch_array($result)) 
echo $row['wijzig']; 
 
?> 
</textarea> 
<input type="submit" value="Wijzig"> 
</form>

indexverwerk.php

PHP:
<?php  

include('cmsconfig.php'); 

  
if(empty($_POST['indextekstingeven'])){ // Als er geen tekst is ingevuld... 


    echo "U heeft geen tekst opgegeven!"; 


  } 


else{ 
    $query = mysql_query("SELECT indexondertabel, wijzig FROM indextabel"); // De query... 


    $num = mysql_num_rows($query); //Controleren of er al een rij is... 

if($num >0){ // Er bestaat een rij 


    $query2 = mysql_query("UPDATE indexondertabel SET wijzig='".$_POST['indextekstingeven']."'"); // tweede query... 


      echo "Tekst gewijzigd."; 


    }  


else { // Er bestaat geen rij 


$query = mysql_query("INSERT INTO indextabel VALUES('".$_POST['indextekstingeven']."')"); // tweede query... 


echo "Tekst gewijzigd."; 


    } 
   }

?>

Ik weet het ik ben een zaag!
 
Je moest indexverwerk,php ook niet wijzigen. ;)

Als ik het zo bekijk neem ik aan dat je met dit
Als ik nu de het veld wijzig weergeef, dan geeft hij de tekst nog allemaal achter elkaar weer.
Hoe zorg ik dat wat er op één regel staat in het teksvak, ook wordt weergegeven als één regel.
wijzigindex.php bedoelde, klopt dat? Zo ja dan moet je die wijzigen :)

Dit
PHP:
while($row = mysql_fetch_array($result))  
echo $row['wijzig'];
Moet dit worden
PHP:
while($row = mysql_fetch_assoc($result))  {
  echo nl2br($row['wijzig']);
}
2 dingen gewijzigd
  • mysql_fetch_array naar mysql_fetch_assoc = efficienter
  • nl2br toegevoegd :)
 
Nee ik bedoel als ik nu iets intik in het tekstvak in wijzigindex.php en ik druk op Wijzig.
Dan zet hij niks bij in de database.
 
Oke even opnieuw.

indexverwerk.php
PHP:
<?php   

include('cmsconfig.php');  

//Enige juiste manier om te controleren of een formulier is verzonden!
if($_SERVER['REQUEST_MODE'] == "POST") {
  if(empty($_POST['indextekstingeven'])) {
    echo "U heeft geen tekst opgegeven!";
  } else {
    $checkQuery = "SELECT indexondertabel, wijzig FROM indextabel";
    $checkResult = mysql_query($checkQuery);
    $num = mysql_num_rows($query); //Controleren of er al een rij is...  
    if($num >0){ // Er bestaat een rij
      $updateQuery = "UPDATE indextabel SET wijzig='". mysql_real_espace_string($_POST['indextekstingeven']) ."'";
      $updateResult = mysql_query($updateQuery);
      if(!$updateResult) {
        echo 'Er is een fout opgetreden bij het aanpassen!<br />
                 De query: <b>'. $updateQuery .'</b><br />
                 MySQL melding: '. mysql_error();
      } else {
        echo "Tekst gewijzigd.";
      }
    } else { // Er bestaat geen rij
      $insertQuery = "INSERT INTO indextabel VALUES('". mysql_real_escape_string($_POST['indextekstingeven']) ."')";
      $insertResult = mysql_query($insertQuery);
      if(!$insertResult) {
        echo 'Er is een fout opgetreden bij het toevoegen!<br />
                 De query: <b>'. $insertQuery .'</b><br />
                 MySQL melding: '. mysql_error();
      } else {
        echo "Tekst toevoegd.";
      }
    }
  }
}
?>

wijzigindex.php
PHP:
<form method="POST" action="indexverwerk.php">  
Index:  
<br>  
<textarea name="indextekstingeven">  
<?php  
include('cmsconfig.php');  
$result = mysql_query("SELECT * FROM indextabel");  
while($row = mysql_fetch_assoc($result)) {
  echo $row['wijzig'];
}  
?>  
</textarea>  
<input type="submit" value="Wijzig">  
</form>
Probeer het eens.
 
Als ik op Wijzig klik kom ik op indexverwerk.php en er staat niets.
In de database is ook niets bijgekomen.

Waarschijnlijk is de mysql tabel weer fout.
 
Blegh, zat met "mode" in mijn hoofd. Dit moest "method" zijn.

Probeer dit:
PHP:
<?php    

include('cmsconfig.php');   

//Enige juiste manier om te controleren of een formulier is verzonden! 
if($_SERVER['REQUEST_METHOD'] == "POST") { 
  if(empty($_POST['indextekstingeven'])) { 
    echo "U heeft geen tekst opgegeven!"; 
  } else { 
    $checkQuery = "SELECT indexondertabel, wijzig FROM indextabel"; 
    $checkResult = mysql_query($checkQuery); 
    $num = mysql_num_rows($query); //Controleren of er al een rij is...   
    if($num >0){ // Er bestaat een rij 
      $updateQuery = "UPDATE indextabel SET wijzig='". mysql_real_espace_string($_POST['indextekstingeven']) ."'"; 
      $updateResult = mysql_query($updateQuery); 
      if(!$updateResult) { 
        echo 'Er is een fout opgetreden bij het aanpassen!<br /> 
                 De query: <b>'. $updateQuery .'</b><br /> 
                 MySQL melding: '. mysql_error(); 
      } else { 
        echo "Tekst gewijzigd."; 
      } 
    } else { // Er bestaat geen rij 
      $insertQuery = "INSERT INTO indextabel VALUES('". mysql_real_escape_string($_POST['indextekstingeven']) ."')"; 
      $insertResult = mysql_query($insertQuery); 
      if(!$insertResult) { 
        echo 'Er is een fout opgetreden bij het toevoegen!<br /> 
                 De query: <b>'. $insertQuery .'</b><br /> 
                 MySQL melding: '. mysql_error(); 
      } else { 
        echo "Tekst toevoegd."; 
      } 
    } 
  } 
} else {
  echo 'Directe toegang is niet toegestaan!';
}
Daarnaast voor de zekerheid nog even een extra debugger aan het einde toegevoegd :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan