Problema script PHP dupa modificari

Aici prezentati probleme, intrebari, sau orice subiecte legate de scripturi si tutoriale de pe site.
Liaf
Mesaje: 36

Problema script PHP dupa modificari

Salutare tuturor.
Sunt nou in acest domeniu.
Am gasit aici acest script: Preluare date din formular si adaugare in baza de date MySQL, si l-am modificat putin dar nu stiu de ce nu merge.
Ma poate ajuta cineva cu modificarea acestuia astfel incat sa fie functional sau cu indicatii cum sa il fac functional ?
Multam

MarPlo Mesaje: 4343
Salut
Poti adauga direct pe forum partea de cod cu modificarile pe care le-ai facut.
Foloseste la inceputul scriptului acest cod:

Cod: Selectaţi tot

ini_set('display_errors',1);
error_reporting(E_ALL);
 
- ca sa fie afisate toate erorile, si le poti copia aici.
Plus explicatii despre ce vrei sa faci si ce nu merge.

Liaf Mesaje: 36
conn.php l-am redenumit in conectare.php si arata asa dupa modificare:

Cod: Selectaţi tot

<?php
 // Datele pt. conectare la serverul si baza de date MySQL
 $host = 'localhost';         // Serverul MySQL
 $utilizator = 'romixers_adminsd';         // Utilizator pt. server
 $parola = 'r_adminsdatabase';         // Parola utilizator
 $numebd = 'romixers_adminsdatabase';         // Numele bazei de date

 // Conectarea la server
 $conn = mysql_connect($host, $utilizator, $parola);
 if (!$conn) { echo '<h4>Conectare nereusita la MySQL</h4>'; }

 // Selectarea bazei de date
 if (!mysql_select_db($numebd, $conn)) { echo '<h4>Baza de date nu a putut fi selectata deoarece : '. mysql_errno(). ' : '. mysql_error().'</h4>'; }

 mysql_set_charset('utf8', $conn);         // Setarea pt. lucru cu format UTF-8
 ?>
make_table.php l-am redenumit in tabel.php si arata asa dupa modificare:

Cod: Selectaţi tot

<?php
 include('conectare.php');         // Include fisierul pt. conectare-selectare baza de date

 // Creaza tabelul Admini, avand coloanele Steam_ID, Steam ADD, E-mail, Server, Fapta
 $sql = "CREATE TABLE `Admini` (Steam_ID(18), Steam_ADD varchar(42), E-mail varchar(55), Server varchar(10), Fapta varchar(99)) CHARACTER SET utf8 COLLATE utf8_general_ci";
 if (mysql_query($sql, $conn)) echo '<h4>Tabelul <u>Admini</u> a fost creat.</h4>';
 else echo 'h4>Tabelul <u>Admini</u> nu a putut fi creat deoarece - '. mysql_errno(). ' : '. mysql_error(). '</h4>';

 mysql_close($conn);
 ?>
Si adauga.php l-am redenumit in writeandsearch.php si arata dupa modificare asa:

Cod: Selectaţi tot

<?php
// Se defineste un Header pt. a utiliza setul de caractere cu format UTF-8
header('Content-type: text/html; charset=utf-8');

$mesaj = '';          // Variabila folosita pt. mesajul ce va fi afisat pt. utilizator

// Se verifica daca sunt primite datele de la formular
if (isset($_POST['Steam_ADD']) && isset($_POST['E-mail']) && isset($_POST['Server'])) {
  // Se filtreaza datele pt. eliminare posibile spatii exterioare si tag-uri
  $_POST = array_map("trim", $_POST);
  $_POST = array_map("strip_tags", $_POST);

  // Se verifica daca "magic_quotes_gpc()" este setat ON
  // Daca e ON, se aplica stripslashes() pentru a nu se adauga de 2 ori '\' cand va fi aplicat "mysql_real_escape_string()"
  if(get_magic_quotes_gpc()) { $_POST = array_map("stripslashes", $_POST); }

  // Se verifica daca au fost completate corect toate campurile
  // Daca au fost completate le preia in variabile, in caz contrar seteaza o variabila tip Array cu mesaj de eroare

  // Verifica daca Steam_ADD are cel putin 3 caractere si maxim 50
  if(strlen($_POST['Steam_ADD'])>2 && strlen($_POST['Steam_ADD'])<51) $Steam_ADD = $_POST['Steam_ADD'];
  else $eroare[] = 'Caseta cu Steam_ADD trebuie sa contina intre 3 si 50 caractere';

  // Verifica daca adresa de e-mail scrisa corespunde formatului unei adrese de e-mail
  if(preg_match('/^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4})$/', $_POST['E-mail'])) $E-mail = $_POST['E-mail'];
  else $eroare[] = 'Completati corect adresa de E-mail';

  // Verifica daca a fost selectata o valoare pt. 'Server'
  if(strlen($_POST['Server'])>2) $Server = $_POST['Server'];
  else $eroare[] = 'Selectati "Server"';

  // Verifica daca Fapta are cel putin 3 caractere si maxim 999
  if(strlen($_POST['Fapta'])>2 && strlen($_POST['Fapta'])<1000) $Fapta = $_POST['Fapta'];
  else $eroare[] = 'Caseta cu Fapta trebuie sa contina intre 3 si 999 caractere';

  // Daca nu exista nici un mesaj de eroare, filreaza datele cu mysql_real_escape_string() si le adauga in baza de date
  // Altfel, in cazul vreunei erori, adauga in variabila $mesaj
  if (!isset($eroare)) {
    include('conectare.php');         // Include fisierul pt. conectare-selectare baza de dat

    // Se aplica functia de filtrare mysql_real_escape_string()
    $Steam_ADD = mysql_real_escape_string($Steam_ADD);
    $E-mail = mysql_real_escape_string($E-mail);
    $Server = mysql_real_escape_string($Server);
    $Fapta = mysql_real_escape_string($Fapta);

	
    // Acum se adauga mai in siguranta aceste date in MySQL
    $sql = "INSERT INTO `Admini` (`Steam_ADD`, `E-mail`, `Server`, `Fapta`) VALUES ('$Steam_ADD', '$E-mail', '$Server', '$Fapta')";
	if (mysql_query($sql, $conn)) {
	  $mesaj = '<font color="blue">Datele au fost adaugate</font>';
	  $Steam_ADD = '';  $E-mail = '';
	}
    else $mesaj = '<font color="red">Datele nu au putut fi adaugate '. mysql_error(). '</font>';

	mysql_close($conn);
  }
  else $mesaj = '<font color="red">'. implode('<br />', $eroare). '</font>';
}

echo $mesaj;
?>

<form action="" method="post">
 Steam ADD: <input type="text" name="Steam_ADD" id="Steam_ADD" value="<?php if(isset($Steam_ADD)) echo $Steam_ADD; ?>" /><br />
 Adresa E-mail: <input type="text" name="E-mail" id="E-mail" value="<?php if(isset($E-mail)) echo $E-mail; ?>" /><br />
 Server: <select name="Server" id="Server">
  <option value="">Alege</option>
  <option value="Server war oficial">Server war oficial</option>
  <option value="Server war afiliat">Server war afiliat</option>
  <option value="Server public oficial">Server public oficial</option>
  <option value="Server public afiliat">Server public afiliat</option>
 </select><br />
 Fapta: <input type="text" name="Fapta" id="Fapta" value="<?php if(isset($Fapta)) echo $Fapta; ?>" /><br />
   <input type="submit" name="submit" id="submit" value="Trimite" />
</form>
Se incarca pagina conectare.php dar nu vad nimic. Pagina este goala
Se incarca pagina tabel.php si primesc aceasta eroare:

Cod: Selectaţi tot

h4>Tabelul Admini nu a putut fi creat deoarece - 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(18), Steam_ADD varchar(42), E-mail varchar(55), Server varchar(10), Fapta varch' at line 1
Se incarca pagina writeandsearch.php si primesc aceasta eroare:

Cod: Selectaţi tot

Parse error: syntax error, unexpected '=' in /home/romixers/public_html/ro-mixers.eu/adminsdatabase/writeandsearch.php on line 25

MarPlo Mesaje: 4343
In codul din "tabel.php" problema e la crearea coloanei Steam_ID , nu este specificat tipul: VARCHAR, INT, sau altul; e doar (18).
In "writeandsearch.php" problema e de sintaxa la numele variabilei, nu se foloseste liniuta '-' in numele variabilei, cum e la $E-mail . Indicat e: $E_mail, $Email.
Deci ar trebui modificate toate numele de variabile care contin liniuta; indicat sa fie fara liniuta si la denumirea coloaneler in baza de date.

Liaf Mesaje: 36
Am modificat peste tot E-mail cu Email si am pus la Steam_ID varchar.
Acum cand accesez conectare.php nu imi da nimic. Pagina este goala
Intradevar cand accesez tabel.php imi spune ca tabelul admini a fost creat cu succes.
si Cand accesez writeandsearch.php imi arata coloanele pe care le doresc si le pot completa.

Dar cum pot sa arunc o privire in baza de date care se creaza astfel ?

MarPlo Mesaje: 4343
Liaf scrie:Dar cum pot sa arunc o privire in baza de date care se creaza astfel ?
Poti instala si folosi phpMyAdmin , e o interfata pentru lucru direct din browser in bazele de date. Se gaseste gratuit pe net.
Daca sunt si alte lucruri care nu merg sau erori, incearca sa le gasesti cauza in modificarile pe care le faci.
Poti folosi print_r() sau var_dump() ca sa verifici continutul variabilelor, ce date primeste scriptul prin $_POST, $_GET, $_SESSION, si ce date transmite, de exemplu printr-un "echo $sql;" la variabila cu comanda SQL, si sa testezi in phpMyAdmin ce afiseaza acel "echo".
Sunt multe lucruri ce pot fi facute pt depanarea unui script si rezolvarea problemelor, care necesita mult timp.

Liaf Mesaje: 36
Dupa cum am spus si in primul post sunt nou in domeniul bazelor de date.
Am acces la phpmyadmin de pe pagina unde este hostul domeniului, am acces si la baze de date mysql pentru ca ceea ce am folosit in script de acolo am luat.
Nu am nici cea mai mica idee unde ar trebui si cum ar trebui sa pun print_r si/sau acele comenzi pe care le-ai scris tu :)
As fi vrut doar sa existe un fisier php care sa aiba un camp cu cauta iar in casuta campului sa se introduca un steam_id sau un e-mail iar ca raspuns sa primesc informatiile cu acel e-mail sau steam id din baza de date, sau daca nu se gaseste in baza de date sa primesc un raspuns de genul e-mail-ul sau steam-id-ul nu exista in baza de date.

MarPlo Mesaje: 4343
Daca esti la inceput cu invatarea PHP, incearca sa studiezi lectiile si tutorialele de pe site, de la Curs PHP-MySQL, cum ar fi cele despre lucru cu baza de date MySQL si Select in tabel.
Vezi daca iti e de folos tutorialul Cautare in tabel MySQL .

Liaf Mesaje: 36
In codul dat pe acea pagina scrie:

Cod: Selectaţi tot

$conn = new mysqli('localhost', 'root', 'pass', 'baza_date');
root cu ce ar trebui inlocuit ?
cumva cu userul asociat bazei de date ?

Nu stiu ce nu am procedat corect. Am baza de date cu tabelul Admini si coloanele Steam_ID, Steam_ADD, E-mail, Server, Fapta.
Eu vreau ca atunci cand se introduce valoarea Steam_ID sa se afiseze ca raspuns Steam_ADD , E-mail, Server, Fapta, valori gasite in tabelul Admini pentru acel Steam_ID, iar in caz contrat cum este si in php 0 rezultate. Codul l-am modificat asa dar nu stiu de ce nu este ok sau ce am gresit.
Codul dupa modificare arata asa:

Cod: Selectaţi tot

<?php
// conecteaza la baza de date
$conn = new mysqli('localhost', 'romixers_adminsd', 'r_adminsdatabase', 'romixers_adminsdatabase');

// verifica conexiunea
if (mysqli_connect_errno()) {
  exit('Connect failed: '. mysqli_connect_error());
}

$val = 'cuvant';           // Variabila ce contine valoarea pt. coloana cautata

// interogare sql SELECT 
$sql = "SELECT `Steam_id`, `Steam_ADD`, `E-mail`, `Server`,, `Fapta`, FROM `tabel` WHERE `Steam_id`='$val'"; 

// executa interogarea si retine datele returnate
$result = $conn->query($sql);

// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
  // Parcurge si afiseaza randurile gasite
  while($row = $result->fetch_assoc()) {
    echo '<br />'. $row['Steam_ID']. ' - '. $row['Steam_ADD']. ' - '. $row['E-mail']. ' - '. $row['Server']. ' - '. $row['Fapta'];
  }
}
else {
  echo '0 rezultate gasite';
}

$conn->close();
?>
Eroarea este asta:

Cod: Selectaţi tot

Fatal error: Class 'mysqli' not found in /home/romixers/public_html/ro-mixers.eu/adminsdatabase/cauta.php on line 3

MarPlo Mesaje: 4343
Da, "root" este numele de utilizator la baza de date.
Script-ul foloseste clasa PHP MySQLi (o varianta mai noua pentru functiile vechi de conectare la MySQL).
Eroarea arata ca acel server nu are instalata /activata clasa MySQLi.
In acest caz, script-ul trebuie modificat, la partea de lucru cu baza de date, sa foloseasca PHP PDO, sau functiile mai vechi pt lucru cu MySQL.
La pagina Lectii PHP - MySQL sunt lectii despre PHP MySQLi, PHP PDO, si varianta veche de lucru cu MySQL in PHP.

Liaf Mesaje: 36
Sincer ma depasesc acest lucruri, iar ca sa citesc toate tutorialele de pe site imi este practic imposibil, pentru ca timpul este foarte limitat. Dupa cum se vede majoritatea posturilor aici pe forum le fac dupa ora 22 cand ma intorc de la lucru.

Cum pot transforma acest script ca sa foloseasca My SQL si sa poata rula in concordanta cu primele scripturi din acest post m-ar fi interesat, nu un link unde sunt destuld e multe tutoriale si fiind la inceput in asemenea lucru cu baze de date si php sa ma uit si degeaba la ele pentru ca ma depasesc :)

MarPlo Mesaje: 4343
Incearca sa folosesti /adaptezi acest cod:

Cod: Selectaţi tot

<?php
// conecteaza la baza de date
$conn = mysql_connect('localhost', 'romixers_adminsd', 'r_adminsdatabase') or exit('Unable to connect to MySQL');
if(!mysql_select_db('romixers_adminsdatabase')) echo 'Baza de date nu poate fi selectata: '. mysql_error(); 

$val = 'cuvant';           // Variabila ce contine valoarea pt. coloana cautata

// interogare sql SELECT
$sql = "SELECT `Steam_id`, `Steam_ADD`, `E-mail`, `Server`, `Fapta` FROM `tabel` WHERE `Steam_id`='$val'";

$result = mysql_query($sql, $conn);
if(mysql_errno()) {
  echo '<br/>'. mysql_error().'<br/>';
}
if(mysql_num_rows($result) == 0) {
  echo '0 rezultate';
}
else {
  while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo '<br />'. $row['Steam_ID']. ' - '. $row['Steam_ADD']. ' - '. $row['E-mail']. ' - '. $row['Server']. ' - '. $row['Fapta'];
  }
}
?>
- Indicat e sa inlocuiesti numele colanei din tabel, E-mail, cu Email sau E_mail .

Subiecte similare